andCrab勒索病毒從2018年1月被首次發現之后,僅僅半年的時間,就連續出現了V1.0,V2.0,V2.1,V3.0,V4.0等變種,非常活躍,并且在國內流行度頗高,它會加密圖片、文檔、視頻、壓縮包等文件類型,在原文件名之后加上.GDCB后綴,再向受害者勒索價值約1200美元的達世幣贖金。這也是首個使用達世幣作為贖金的勒索毒。
新型勒索病毒GandCrab近段時間通過網頁掛馬、郵件、漏洞等在國內大肆蔓延,被黑頁面涉及景區、交通等社會服務網點,影響極廣。
不法分子通過制造網頁亂碼,誘導網民下載偽裝為字體更新的病毒程序,進而加密設備上多種類型的文件,索要達世幣贖金。由于該病毒作案手法巧妙,迷惑性極高,網民看到安全軟件攔截提示時,甚至會冒險運行而中招。
病毒分析:
GandCrab勒索病毒不具備感染傳播能力,不會主動對局域網的其他設備發起攻擊,會加密局域網共享目錄文件夾下的文件。
1.樣本經過多層封裝與代碼混淆,代碼會經過幾層解密操作,如下所示:
在內存中解密出勒索病毒Payload代碼,如下所示:
最后進行內存拷貝,屬性更改之后,跳轉到相應的勒索Payload入口點執行勒索操作,如下所示:
2.樣本跳轉到了入口點,相應的反匯編代碼,如下所示:
3.獲取Windows操作系統版本,如下所示:
4.獲取當前運行進程權限,如下所示:
5.遍歷進程,然后結束相關的進程,如下圖所示:
相關的進程列表如下:
msftesql.exe,sqlagent.exe,sqlbrowser.exe,sqlwriter.exe,oracle.exe,ocssd.exe
dbsnmp.exe,synctime.exe,agntsvc.exeisqlplussvc.exe,xfssvccon.exe
sqlservr.exe,mydesktopservice.exe,ocautoupds.exe,agntsvc.exeagntsvc.exe
agntsvc.exeencsvc.exe,firefoxconfig.exe,tbirdconfig.exe,mydesktopqos.exe
ocomm.exe,mysqld.exe,mysqld-nt.exe,mysqld-opt.exe,dbeng50.exe
sqbcoreservice.exe,excel.exe,infopath.exe,msaccess.exe,mspub.exe
onenote.exe,outlook.exe,powerpnt.exe,steam.exe,sqlservr.exe,thebat.exe
thebat64.exe,thunderbird.exe,visio.exe,winword.exe,wordpad.exe
6.查詢操作系統安裝的輸入法,如下所示:
如果發現系統安裝的輸入法為Russian,則不進行加密操作,執行后面的自刪除操作,如下所示:
在后面的分析中發現這個GandCrab勒索V4.0版本的Payload核心加密代碼與之前分析的Sigrun勒索家族的加密核心代碼非常多的相似之處。
7.獲取操作系統的語言版本,如下所示:
當操作系統語言為如下國家時,則不進行加密,相應的國家列表如下:
419(LANG_RUSSIAN俄語)
422(LANG_UKRAINIAN烏克蘭)
423(LANG_BELARUSIAN白俄羅斯)
428(LANG_TAJIK塔吉克)
42B(LANG_ARMENIAN亞美尼亞)
42C(阿塞拜疆,拉丁美洲(AZ))
437(LANG_GEORGIAN格魯吉亞人)
43F(LANG_KAZAK哈薩克族)
440(LANG_KYRGYZ吉爾吉斯)
442(LANG_TURKMEN土庫曼)
443(烏茲別克斯坦,拉丁語(UZ))
444(LANG_TATAR俄羅斯(RU))
818(未知) 819(未知)
82C(LANG_AZERI阿塞拜疆,西里爾(亞利桑那州))
843(LANG_UZBEK烏茲別克)
相應的反匯編代碼,如下所示:
8.隨機讀取相應目錄下的隨機文件名.lock文件,如下所示:
如果讀取到隨機的lock文件,則退出程序。
9.利用程序中硬編碼的數據,生成加密RSA的公鑰public,如下所示:
相應的public公鑰信息如下:
06 02 00 00 00 A4 00 00 52 53 41 31 00 08 00 00 01 00 01 00 BB EF 02 46 0B 5E 8C 72 8E A0 A0 31 AE 95 33 82 D6 67 89 32 B2 ED 92 A8 16 0A BC 28 C1 4D 3E 00 A3 DC 48 47 3D E9 9A C1 31 AE 41 C5 E8 22 70 6A 7F 75 98 8F C6 EB EE 65 9B 1B 96 D3 4D AA 3F 75 0B A5 75 E7 71 CD 88 A0 77 E0 CB 2F 33 A2 0D AB E4 E3 40 82 3F D9 95 50 A4 92 56 AA 77 61 05 75 F2 25 81 DA A1 BE 30 A7 CB DA 2B A39E 85 AB 03 8D BB D3 F0 BB 9C 71 9A D4 98 CF C6 C2 A8 62 84 32 85 4C 1B 2C FF E4 D8 D9 E5 2A BB 18 06 08 6A F4 D8 D1 8D 00 E3 41 FC E7 C5 20 25 D2 DD 47 FF 27 09 1F 6D 34 6C 8A 0A EB AB 13 48 09 F6 24 24 98 84 22 DD C1 A1 1C 60 63 06 71 EE 00 4A 21 BA 1F AF 4C 03 D2 C7 3F BA 64 39 35 B4 44 0B 17 5F B5 2C 8C 4E B2 E6 61 B2 23 21 4D AD FB D4 1D 96 4B A1 FC 7F BF 98 78 BB D3 72 F1 E3 46 1F 03 4C 05 18 96 C1 47 C0 A0 6F 17 07 11 10 2B 2D D4 C8
10.獲取主機相關信息,如下所示:
獲取到的相關信息如下:
用戶名、主機名、工作組、操作系統語言、操作系統版本類型信息、安全軟件信息、CPU類型、磁盤空間等信息
pc_user=panda&pc_name=PANDA-PC&pc_group=WORKGROUP&pc_lang=zh-CN&pc_keyb=0&
os_major=Windows 7 Professional&os_bit=x86&ransom_id=4cccd561a9e9938&
hdd=C:FIXED_43850395648/15526735872,D:FIXED_41941987328/2760519680&id=15&sub_id=15&version=4.0.
11.獲取主機中安裝的安全軟件信息,如下所示:
相應的安全軟件列表如下:
AVP.EXE、ekrn.exe、avgnt.exe、ashDisp.exe、NortonAntiBot.exe、Mcshield.exe
avengine.exe、cmdagent.exe、smc.exe、persfw.exe、pccpfw.exe、fsguiexe.exe
cfp.exe、msmpeng.exe
12.將獲取到的主機信息,在內存進行加密,如下所示:
13.利用程序中硬編碼的數據作為Key,用于生成RSA加密的公鑰和私鑰,并導出RSA公鑰和私鑰信息,如下所示:
14.將成生的公鑰和私鑰寫入到注冊表項上,如下所示:
生成的RSA私鑰,如下所示:
15.將生成的公鑰與私鑰,導入到注冊表中之后,如下所示:
相應的注冊表項:
HKEY_CURRENT_USER\SOFTWARE\keys_data\data
16.生成勒索信息文件加密Key信息,如下所示:
17.內存拼接生成勒索文件信息,如下所示:
18.創建線程,加密局域網共享目錄文件夾下的文件,如下所示:
19.遍歷磁盤,創建線程,加密磁盤文件,如下所示:
20.遍歷主機或網絡共享目錄的文件目錄,如果為以下文件目錄,則不進行加密,如下圖所示:
相應的文件目錄列表如下:
\ProgramData\
\Boot\
\Program Files\
\Tor Browser\
\Local Settings\
\Windows\
21.將之前生成的勒索信息相應寫入到勒索信息文本文件KRAB-DECRYPT.txt中,如下所示:
22.生成隨機的lock文件,保存感染時間,如下所示:
23.遍歷磁盤目錄下的文件,如果為以下文件,則不進行加密,如下所示:
相應的文件列表如下:
desktop.ini
autorun.inf
ntuser.dat
iconcache.db
bootsect.bak
boot.ini
ntuser.dat.log
thumbs.db
KRAB-DECRYPT.html
KRAB-DECRYPT.txt
CRAB-DECRYPT.txt
ntldr
NTDETECT.COM
Bootfont.bin
24.生成以.KRAB為后綴的加密文件,如下所示:
25.加密文件的主過程函數,如下所示:
26.加密完成之后,通過ShellExecuteW函數調用wmic.exe程序,刪除磁盤卷影操作,如下所示:
27.然后彈出勒索信息文件,如下所示:
28.通過提供的鏈接,在tor打開鏈接,如下所示:
通過分析發現,此勒索病毒整體的加密勒索過程與之前版本類似,但是感染方式發生了改變,同時這款勒索病毒沒有了相應的網絡功能,預測后面應該馬上會有相應的V4.1....等版本出現,同時在分析的過程中,發現此勒索病毒的一些功能和之前發現的Sigrun勒索病毒比較類似,這款勒索病毒會針對不同的國家進行感染傳播,如果為某些地區的國家的操作系統,則不進行感染加密。
解決方案 :
國信安全湖北中心態勢感知服務與威脅監測服務可以有效監測、防護及預警此類勒索病毒,如下所示:
注意事項:
3不:
3及時:
根據 Github 上的面經總結的一些安全崗面試的基礎知識,這些基礎知識不僅要牢記,而且要熟練操作,分享給大家,共勉。
如果有漏掉的大家可以留言或是聯系作者補充,謝謝。
1.對Web安全的理解
我覺得 Web 安全首先得懂 Web、第三方內容、Web 前端框架、Web 服務器語言、Web 開發框架、Web 應用、Web容器、存儲、操作系統等這些都要了解,然后較為常見且危害較大的,SQL 注入,XSS 跨站、CSRF 跨站請求偽造等漏洞要熟練掌握。
第三方內容: 廣告統計、mockup 實體模型
Web前端框架: jQuery 庫、BootStrap
Web服務端語言: aps.net、php
Web開發框架: Diango/Rails/Thinkphp
Web應用: BBS ( discuz、xiuno ) / CMS ( 帝國、織夢、動易、Joomla ) / BLOG ( WordPress、Z-Blog、emlog )
Web 容器: Apache ( php )、IIS ( asp )、Tomcat ( java ) -- 處理從客戶端發出的請求
存儲:數據庫存儲 / 內存存儲 / 文件存儲
操作系統: linux / Windows
2.http協議
安裝火狐瀏覽器常用插件方便HTTP抓包調試:
firebug:抓包與各種調試
Tamper Data:攔截修改
Live Http Header:重放功能
Hackbar:編碼解碼 / POST 提交
Modify Headers:修改頭部
http常見狀態碼:
1xx:信息提示,表示請求已被成功接收,繼續處理。
2xx:成功,服務器成功處理了請求
3xx:重定向,告知客戶端所請求的資源已經移動
4xx:客戶端錯誤狀態碼,請求了一些服務器無法處理的東西。
5xx:服務端錯誤,描述服務器內部錯誤
200 請求成功,一般用于 GET 和 POST 請求
301 URL 重定向,永久移動
302 URL 重定向,臨時移動
404 請求資源不存在
400 客戶端請求有語法錯誤,不能被服務器理解
401 請求未經授權
403 服務器收到請求,但是拒絕服務
500 服務器內部錯誤
503 服務器當前不能處理客戶端請求,一段時間后可能恢復正常
GET 和 POST:
GET方法用于獲取請求頁面的指定信息,如點擊鏈接
POST方法是有請求內容的,由于向服務器發送大量數據,如提交表單
http 請求:
http 請求包括三個部分,請求行 ( 請求方法 )、請求頭 ( 消息報頭 ) 和請求正文
http響應:
http 響應也由三部分組成,響應行,響應頭 ( 消息報頭 ) 和響應正文 ( 消息主題 )
3.數據庫
基本 SQL 語句
增:INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....)
刪:DELETE FROM 表名稱 WHERE 列名稱=值
查:SELECT 列名稱 FROM 表名稱
改:UPDATE 表名稱 SET 列名稱=新值 WHERE 列名稱=某值
mysql 有哪些表
mysql 自帶的數據庫有 information_schema、performance_schema、sys、mysql,information_schema 數據庫是 mysql 自帶的,它提供了訪問元數據庫的方式。
在 mysql 數據庫中,有 mysql_install_db 腳本初始化權限表,存儲權限的表有:
1、user表: 用戶列、權限列、安全列、資源控制列
2、db表 : 用戶列、權限列
3、host表
4、table_priv表
5、columns_priv表
6、proc_priv表
sys 數據庫表說明 sys_config ,這是在這個系統庫上存在的唯一一個表了:
詳見這兩篇文章:
http://blog.csdn.net/xlxxcc/article/details/51754524
http://blog.csdn.net/huwei0518/article/details/43563583
mysql 提權方式 ( 搭建環境使用 mysql5.1 或以前的版本)
mof 提權:
拿到 Webshell 后:
1.找一個可寫目錄上傳mof文件,例如上傳到 C:/Windows/nullevt.mof 代碼如下:
2.執行load_file及into dumpfile把文件導出到正確的位置即可:
Select load_file('C:/Windows/nullevt.mof') into dumpfile 'c:/windows/system32/wbem/mof/nullevt.mof'
執行成功后,即可添加一個普通用戶,然后你可以更改命令,再上傳導出執行把用戶提升到管理員權限,然后3389連接即可
反彈端口提權
1、拿到 mysql root 權限,無法通過網站 Getshell,利用 mysql 客戶端工具連接 mysql 服務器,然后執行下面的操作:
2、本地監聽你反彈的端口
nc.exe -vv -l -p 2010
成功后,你將獲得一個 system 權限的 cmdshell
Mysql udf 提權
目錄位置:
c:\windows\system32
1、最常見的是直接使用 udf.php ( http://pan.baidu.com/s/1jIEIQbk
) 此類的工具來執行 udf 提權
具體如下:
連接到 mysql 以后,先導出 udf.dll 到 c:\windows\system32
目錄下。
2、創建相應的函數并執行命令,具體如下:
某些情況下,我們會遇到 Can't open shared library 的情況,
這時就需要我們把 udf.dll 導出到 lib\plugin
目錄下才可以,利用 NTFS ADS 流來創建文件夾
select @@basedir; //查找到mysql的目錄
select 'It is dll' into dumpfile 'C:\Program Files\MySQL\MySQL Server 5.1\lib::$INDEX_ALLOCATION'; //利用NTFS ADS創建lib目錄
select 'It is dll' into dumpfile 'C:\Program Files\MySQL\MySQL Server 5.1\lib\plugin::$INDEX_ALLOCATION'; //利用NTFS ADS創建plugin目錄
執行成功以后再進行導出即可。
4.操作系統
死鎖以及為什么發生死鎖,解除死鎖
死鎖是指一組相互競爭系統資源或進行通信的進程間的"永久"阻塞。
產生死鎖的原因:
(1)競爭系統資源
(2)進程的推進順序不當
產生死鎖的四個必要條件:
(1) 互斥條件:一個資源每次只能被一個進程使用。
(2) 請求與保持條件:一個進程因請求資源而阻塞時,對已獲得的資源保持不放。
(3) 不剝奪條件:進程已獲得的資源,在末使用完之前,不能強行剝奪。
(4) 循環等待條件:若干進程之間形成一種頭尾相接的循環等待資源關系。
解除死鎖:
當發現有進程死鎖后,應立即把它從死鎖狀態中解脫出來,常采用的方法有:
剝奪資源:從其它進程剝奪足夠數量的資源給死鎖進程,以解除死鎖狀態;
撤消進程可以直接撤消死鎖進程或撤消代價最小的進程,直至有足夠的資源可用,死鎖狀態消除為止
所謂代價是指優先級、運行代價、進程的重要性和價值等。
進程之間通信方式:
信號,管道,消息隊列,共享內存。
啟動流程 ( Windows ):
基本上操作系統是從計算機通電自檢完成后開始進行的,這一過程可以分為 ( 預引導、引導、載入內核、初始化內核、登錄等 5 個階段 )
1) 預引導
通電自檢后,從引導設備中讀取并運行主引導記錄MBR
2) 引導
引導階段又可以分為 初始化引導載入程序、操作系統選擇、硬件檢測、硬件配置文件選擇
在這一過程中需要使用的文件包括 ntldr、boot.ini、ntdetect.com、ntoskrnl.exe、ntbootdd.sys、bootsect.dos ( 非必須 )
A 初始化引導載入程序:
程序 ntldr 會自動尋找系統自帶的一個微型的文件驅動,讀取文件系統驅動并成功找到硬盤上的分區后,引導載入程序的初始化過程就已經完成。
B 操作系統選擇:
ntldr 程序完成了初始化工作后就會從硬盤上讀取 boot.ini 文件,進行操作系統選擇(多系統)
C 硬件檢測:
操作系統選擇了想要載入的 Windows 系統后,ntdetect.com 首先要將當前計算機中安裝的所有硬件信息收集起來并列成一個表,接著將該表發送給 ntldr,這個表的信息稍后會被用來創建注冊表中有關硬件的鍵。這里需要被收集信息的硬件包括總線 / 適配器類型顯卡、通訊端口、串口、浮點運算器 ( CPU )、可移動存儲器、鍵盤、指示裝置 ( 鼠標 )。
D 配置文件選擇:
這個步驟不是必須的。
只有在計算機(常用于筆記本電腦)創建了多個硬件配置文件的時候才需要處理這一步
3) 載入內核階段
在這一階段,ntldr 會載入 Windows 的內核文件 ntoskrnl.exe,但這里僅僅是載入,內核此刻還不會被初始化。隨后被載入的是硬件抽象層。接下來要被內核載入的是:HKEY_LOCAL_MACHINE\System
注冊表鍵。
ntldr 會根據載入的 Select 鍵的內容判斷接下來需要載入哪個 ControlSet 注冊表鍵,這些鍵決定隨后系統會載入哪些設備驅動或者啟動哪些服務。
這些注冊表鍵的內容被載入后,系統將進入初始化內核階段。
這時候ntldr會將系統的控制權交給操作系統內核。
4) 初始化內核階段
在這一階段中主要會完成 4 項任務:
創建 Hardware 注冊表鍵、對 Control Set 注冊表鍵進行復制載入和初始化設備驅動、啟動服務
A.創建Hardware注冊表鍵:
Windows 內核會使用前面硬件檢測階段收集倒的硬件信息來創建
HKEY_LOCAL_MACHINE/Hardware
鍵。也就是說注冊表中該鍵的內容不是固定的,會根據系統中的硬件配置情況動態更新。
B.對Control Set注冊表鍵進行復制:
如果上一步成功,系統內核會對 Control Set 鍵的內容創建一個備份。這個備份會被用在系統的高級啟動菜單中 "最后一次正確的配置" 選項。
例如,系統新裝了一個顯卡驅動,Hardware 還沒有創建成功系統就崩潰了,這時就可以使用"最后一次正確的配置"選項,用上一次 Control Set 注冊表鍵的備份內容重新生成 Hardware 鍵,從而撤銷因安裝了顯卡驅動對系統設置的更改。
C.載入和初始化設備驅動:
操作系統內核首先會初始化之前在載入內核階段載入的底層設備驅動,然后會在注冊表的,
HKEY_LOCAL_MACHINE/System/CurrentControlSet/Services
鍵下查找所有 Strat 鍵值為 1 的設備驅動,這些設備驅動將會在載入之后立刻進行初始化。
D.啟動服務:
系統內核成功載入并且成功初始化所有底層設備驅動后,ntoskrnl.exe 創建會話管理器進程 smss.exe,這是第一個用戶態進程 會話管理器會啟動其他高層子系統和服務,加載并初始化內核模式中的 Win32 子系統 ( win32k.sys ),啟動 csrss.exe ( win32 子系統在用戶模式的部分 ),進而啟動 Win32 子系統。Win32 子系統的作用是控制所有輸入 / 輸出設備以及訪問顯示設備。當這些操作都完成后,Windows 的圖形界面就可以顯示出來了,同時用戶也將可以使用鍵盤以及其他 I/O 設備。
接下來會話管理器會啟動 winlogon 進程。至此,初始化內核階段已經成功完成,這時候用戶就可以開始登陸了。
5)登錄階段
這一階段,由會話管理器啟動的 winlogon.exe 進程將會啟動本地安全性授權 lsass.exe 子系統,加載圖形化標識和驗證 ( Graphical Identfication and Authentication,GINA ) 并等待用戶登錄。
默認 GINA 是 Msgina.dll,可以自行開發 GINA 實現基于生物信息的用戶登錄 ( 指紋識別,人臉識別 ),然后啟動后臺服務管理器 services.exe ,通過它啟動所有標識為自動啟動的 Win32 服務程序。
在登錄過程中,后臺可能仍在加載一些非關鍵的設備驅動。系統會再次掃描 HKEY_LOCAL_MACHINE/System/CurrentControlSet/Services
注冊表鍵,尋找 Start 鍵的數值是 2 或者更大數字的服務。這些服務就是非關鍵服務,系統直到成功登錄后才開始加載這些服務,至此,Windows 啟動過程完成。
線程:
線程有時候又被稱為輕量級進程,是程序執行的最小單元。
一個進程可對應多個線程,而一個線程只屬于一個進程。進程的執行是以線程為單位進行的,比如說一個簡單 “hello world” 程序只有一個線程,就是 main() 函數對應的線程。
保護模式,實模式
保護模式與實模式相對應,在保護模式下, CPU 的尋址模式與實模式不同。
實模式下的尋址方式是 "段基址+段偏移",段的默認大小為 64kb ,所有段都是可讀寫的,唯有代碼段是可執行的,段的特權級為 0。
特權級有 0、1、2、3 四個級別,0 特權級別最高,3 特權級別最低想要控制系統,就必須取得0特權級,比如調試工具 SoftICE 就工作在0特權級上。
詳細:
http://blog.csdn.net/rosetta/article/details/8933200
5.https的建立過程
1.客戶端發送請求到服務器端 ( 支持的加密協議及版本,SSL,TLS )
2.服務端篩選合適的加密協議,返回 CA 證書和公開秘鑰(公開秘鑰作為證書的一部分而存在)
3.客戶端使用瀏覽器根證書驗證證書的合法性
4.如果驗證通過,客戶端生成對稱秘鑰,通過證書中的公鑰加密,發送到服務端
5.服務端使用私鑰解密,獲取對稱秘鑰,使用對稱秘鑰加密數據
6.客戶端使用共享秘鑰解密數據,建立 SSL 加密通信...
6.TCP三次握手的過程以及對應的狀態轉換
1) 源主機給目標主機發送一個 SYN 標志位為 1 的數據包
2) 目標主機自動應答,SYN 和 ACK 均設置為 1,序號 SEQ 為 Y,并將確認號設置為 Y+1
3) 源主機收到目標主機返回的第二次握手的數據包后,向目的主機發送一個 ACK 標志位為 1 的應答包示意對第二次握手確認要建立連接,第三次握手數據包的序號為 SEQ 為 X+1,確認號為 Y+1。
7.SQL注入漏洞
基本原理和防范
應用程序對用戶輸入的數據校驗處理不嚴或者根本沒有校驗,以至用戶可以直接執行 SQL 查詢
1.對特殊字符進行轉義處理(可能被編碼繞過)
2.使用參數化語句 (完全杜絕 SQL 注入) 以 PHP 的 PDO 或 mysqli 為例:
PDO ( 使用序數參數 ):
除了數據庫數據,利用方式還有哪些?
A 獲取系統 shell
B 留數據庫后門
8.XSS漏洞
基本原理和分類
當應用程序發送給瀏覽器的頁面中包含用戶提交的數據,但沒有經過適當驗證或轉義時,就會導致跨站腳本漏洞。
分類:
反射型:經過后端,不經過數據庫
存儲型:經過后端,經過數據庫
DOM 型:不經過后端,DOM—based XSS 漏洞,是基于文檔對象模型 ( Document Objeet Model,DOM ) 的一種漏洞,DOM xss 是通過 url 傳入參數去控制觸發的。
XSS防范
前端:
對用戶輸入進行編碼轉換
后端(在入口和出口都過濾):
對輸入和輸出都編碼轉換
可以自己編寫過濾函數,調用也行。或者查找網上的 XSS 過濾函數。
xssfuzzing
一個基本的流程是:
1.檢測輸入點
2.潛在注入點檢測
3.生成 payload
4.Payload 攻擊驗證
詳細參考下面這篇文章:
https://www.qcloud.com/community/article/172258001490259493
xss還能干什么?
A 重定向網站
B 組建僵尸網絡
更多:
http://bobao.360.cn/learning/detail/159.html
9.CSRF
原理與防范
由于瀏覽器自動發送會話 Cookie 等認證憑證,導致攻擊者能夠創建惡意的 Web 頁面來產生偽造請求
案例:
上面一句話概括了 CSRF 的原理,下面我虛構了一個案例幫助理解:
123456:李白的用戶 ID
741741:杜甫的用戶 ID
941941:白居易的用戶 ID
李白正在某銀行網站給白居易轉賬,則有以下 URL
http://www.abc.com/zhuanzhang?=amount=500&fromAccount=123456&toAccount=941941
杜甫構造一個請求,把李白賬戶中的錢轉到自己賬戶中(并且修改了金額為 5000 )
杜甫在他控制的多個網站中嵌入這段代碼,李白只要登錄了銀行網站,又恰巧訪問了杜甫控制的網站,李白的 5000 塊錢就會轉給杜甫
防范:
1.給每個 HTTP 請求添加一個不可預測的令牌,并保證該令牌對每個合法用戶來說是唯一的,將獨有的令牌包含在隱藏字段中,通過 HTTP 請求發送,避免在URL中暴露出來。
2.要求用戶重新認證或判斷他是一個真實的用戶
csrf 如何不帶 referer 訪問?
那么什么是referer呢?
根據 HTTP 協議,在 HTTP 頭中有一個字段叫 Referer,它記錄了該HTTP請求的來源地址。在通常情況下,訪問一個安全受限頁面的請求必須來自于同一個網站。比如某銀行的轉賬是通過用戶訪問
http://bank.test/test?page=10&userID=101&money=10000
頁面完成,用戶必須先登錄 bank.test,然后通過點擊頁面上的按鈕來觸發轉賬事件。當用戶提交請求時,該轉賬請求的 Referer 值就會是轉賬按鈕所在頁面的 URL(本例中,通常是以 bank. test 域名開頭的地址)。而如果攻擊者要對銀行網站實施 CSRF 攻擊,他只能在自己的網站構造請求,當用戶通過攻擊者的網站發送請求到銀行時,該請求的 Referer 是指向攻擊者的網站。因此,要防御 CSRF 攻擊,銀行網站只需要對于每一個轉賬請求驗證其 Referer 值,如果是以 bank.test 開頭的域名,則說明該請求是來自銀行網站自己的請求,是合法的。如果 Referer 是其他網站的話,就有可能是 CSRF 攻擊,則拒絕該請求。
測試發現:
測試發現 302 跳轉不會帶 referer,可以直接請求配置寫 php 代碼實現不帶 referer 訪問
302 跳轉 php 代碼實現
還有更簡單的方式,使用 html 中 a 標簽的一個屬性
<a rel="noreferrer">test
10.SSRF 漏洞
原理介紹
SSRF ( Server-Side Request Forgery: 服務器端請求偽造) 是一種由攻擊者構造形成由服務端發起請求的一個安全漏洞。一般情況下,SSRF 攻擊的目標是從外網無法訪問的內部系統。正是因為它是由服務端發起的,所以它能夠請求到與它相連而與外網隔離的內部系統 SSRF 形成的原因大都是由于服務端提供了從其他服務器應用獲取數據的功能且沒有對目標地址做過濾與限制。
比如從指定 URL 地址獲取網頁文本內容,加載指定地址的圖片,下載等等.
如何尋找?
一、從 Web 功能上尋找
1)分享:通過URL地址分享網頁內容
2)圖片加載與下載:通過URL地址加載或下載圖片
3)圖片、文章收藏功能
二、從 URL 關鍵字尋找
大致有以下關鍵字:
share、wap、url、link、src、source、target、u、3g、display、sourceURl、imageURL、domain
如果利用 google 語法加上這些關鍵字去尋找 SSRF 漏洞,耐心的驗證,現在還是可以找到存在的 SSRF 漏洞
如何深入利用?如何探測非 HTTP 協議?如何防范?
這兩篇文章寫的不錯,搭建環境什么的都有:
http://www.91ri.org/17111.html
https://www.t00ls.net/articles-41070.html
11.如何滲透一個網站/思路(滲透測試流程)
1.信息收集
whois 查詢 //站長工具
DNS 信息 //站長工具
子域名查詢 //站長工具
旁站、C 段查詢:http://www.webscan.cc/
開放協議、操作系統、中間件、使用的開源 Web 應用(如 WordPress,憑借經驗判斷)
用 nmap 進行端口掃描:
nmap-sP 192.168.1.100 //查看一個主機是否在線
nmap 192.168.1.100 //查看一個主機上開放的端口
nmap-p 1-1000 192.168.1.100 //掃描指定端口范圍
nmap-p 80 192.168.1.* //掃描特定端口
nmap-O 192.168.1.100 //判斷目標操作系統類型
nmap-sV 192.168.1.100 //查看目標開放端口對應的協議及版本信息
獲取 WAF、IDS、防火墻信息 ( 使用 hping3、wafw00f 等工具)
網站目錄 ( 使用工具 DirBuster )
數據庫類型:
我通常是通過中間件信息和開放端口來判斷,這些只是判斷思路并不是 100% 正確
MySQL:Apache+PHP:3306
MSSQL:asp+IIS:1433
Oracle:Java+Tomcat:1521
PostgreSQL:5432
2.漏洞掃描
使用 w3af、AWVS、Nessus、APPscan 等專業的漏洞掃描器自動化掃描,或者,用自己收集的EXP編寫漏洞掃描器
3.漏洞利用
SQLmap:SQL 注入利用
BeFF:XSS 漏洞利用
Metasploit:漏洞利用模塊
總而言之,根據掃描到的漏洞選擇合適的方法或工具來利用
4.權限獲取
后臺編輯器提權、Webshell 提權、數據庫提權、內網滲透提權
5.分析報告
滲透測試范圍和內容 ( 包不包括社工··· )
脆弱性分析:
有哪些漏洞哪些風險等等、漏洞信息以圖示出。
檢測過程
使用的方法和工具
改善建議和修復方案
如何獲得一個域名的郵箱列表
工具:
如何社工一個企業的員工信息:
嗯,不太擅長,簡單說一下吧~
先線上搜索他的公開信息,社交賬號,社交圈子等等
可以先從他身邊的人間接了解他本人
然后以顧客的身份接近,套取所需信息
再者時間充裕的可以跟蹤一下(違法危險,被抓住容易被揍成豬頭)
然后就是投其所好獲取信任了
12.需要認識的常見端口
13.如何獲取 Web 指紋
1:網頁中發現關鍵字
2:特定文件的 MD5(主要是靜態文件、不一定要是 MD5 )
3:指定 URL 的關鍵字
4:指定 URL 的 TAG 模式
whatweb ( Ruby 寫的 ) 是一個 web 應用程序指紋識別工具,可以鑒別出內容管理系統 ( CMS ),博客平臺、統計分析軟件、javascript 庫、服務器和其他更多Web程序。
whatweb 擁有超過 900 個插件,插件是用來鑒別 Web 應用系統的。
可以說 whatweb 是目前網絡上比較強大的一款應用識別程序了。
它支持正則表達式、md5 hash 匹配、url 識別、HTML 標記模式、蜘蛛爬行等等
下載地址:
https://github.com/urbanadventurer/whatweb/
plecost 是基于 python 架構,利用了 Beautiful Soup 來解析 html、xml 文件,識別網站使用的插件及版本。kali 系統上集成了這個工具。(感興趣的可以試著讀讀它的代碼,自己開發一個指紋識別工具)
14.如何代碼審計
自己找到過的代碼審計問題
15.如何做掃描器-思路-為什么要這么設計
端口掃描器:
通過連接測試服務端口可以判斷端口是否開放
(1) TCP 全連接掃描
嘗試與目標主機建立正常的TCP三次握手,如果能建立三次握手,說明目標端口開放,但是掃描過程容易被檢測到。
(2) TCP SYN 掃描 ( TCP 的半連接掃描)
利用 TCP 前兩次握手,如第二次握手回復了,則證明端口開放,因為沒有第三次握手建立連接,降低了被發現的可能,同時提高了掃描性能
(3) TCP FIN 掃描
向目標主機發送 FIN 標志位為 1 的數據包進行探測。
如果目標端口開放,則丟棄此包,不進行回應
若未開放,則返回一個 RST 標志位為 1 的數據包
這種掃描更隱秘又叫秘密掃描通常用于 UNIX 操作系統主機
有的 Windows 主機 ( Windows NT ),不論端口是否開放都回復 RST。
(4) UDP 的 ICMP 端口不可達掃描
用 UDP 協議向目標主機 UDP 端口發送探測數據包。
如果目標端口未打開,會返回一個 ICMP_PORTUNREACHABLE 錯誤。
根據是否收到這個消息,可以發現關閉的 UDP 端口
(5) ICMP 掃描
用 ICMP 協議向目標主機發送一個協議存在錯誤的 IP 數據包
根據反饋的 ICMP 信息判斷目標主機使用的網絡服務和端口
(6) 亂序掃描和慢速掃描
將掃描端口的順序打亂,降低掃描速度,躲避防火墻和入侵檢測系統的檢查
漏洞掃描器
用模擬攻擊掃描出具體的漏洞類型
比如 SQL 漏洞掃描器用 payload 字符去試、使頁面報錯
一個 SQL 漏洞掃描器實例:
http://blog.csdn.net/oxuzhenyi/article/details/72763486?locationNum=13&fps=1
防范掃描可以在目標主機和網絡的外圍邊界部署防火墻和入侵檢測系統
16.黑客兵器譜(滲透常用工具)
信息收集: Maltego
Web 程序 ( 攔截、重放 ):Burp suite
端口掃描: nmap (其實不僅僅是端口掃描它的腳本也很有用)
漏洞掃描:w3af、AWVS、Nessus、AppScan
SQL 注入神器: SQLmap
sqlmap 給出類型對安全研究有什么幫助(區別有、無),tamper 腳本使用:信安之路的一篇總結挺好,地址:
http://mp.weixin.qq.com/s/vEEoMacmETUA4yZODY8xMQ
XSS利用框架:BeEF
漏洞利用框架:metasploit
爆破利器:Hydra
17.python
基礎類庫
常用第三方類庫、爬蟲的基本流程
18.挖過哪些有趣的漏洞講述過程
沒有拿得出手的?
分享一個域名劫持釣魚獲取管理權限的思路文章吧:
http://mp.weixin.qq.com/s/iteYPCNPq0Sly1nf8QJWhg
19.還有就是 HR 面的時候,記住一定要準備一份自己的職業規劃。
本文作者:溫酒送詩人
轉:信安之路