




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
項(xiàng)目三命令注入攻擊與防御項(xiàng)目描述 項(xiàng)目分析 項(xiàng)目相關(guān)知識項(xiàng)目訓(xùn)練項(xiàng)目小結(jié)
實(shí)訓(xùn)任務(wù) 項(xiàng)目描述SVU?公司新開發(fā)了通過?Web?查詢?IP?地址功能,滲透測試工程師小?D?負(fù)責(zé)測試該功能的安全,并提出針對性的加固方案。因此,小?D?需要了解命令注入漏洞的基礎(chǔ)知?識。本項(xiàng)目的具體要求如下:(1)測試可用命令連接符;(2)測試可執(zhí)行命令;(3)測試是否可以控制服務(wù)器;(4)針對測試結(jié)果,給出加固方?案。項(xiàng)目分析命令注入攻擊為惡意攻擊者往Web頁面里插入惡意命令,使得惡意命令在服務(wù)器中被執(zhí)行,從而達(dá)到惡意攻擊Web服務(wù)器的目的。針對上述情況,本項(xiàng)目的任務(wù)布置如下:項(xiàng)目目標(biāo)(1)了解命令注入攻擊原理;(2)能夠理解常命令注入的攻擊方式,如信息獲取、密碼破解等;(3)能夠利用多種手段防御命令注入攻擊;項(xiàng)目分析命令注入漏洞與文件上傳漏洞攻擊過程基本相似,攻擊過程如下圖所示:項(xiàng)目任務(wù)列表任務(wù)1:利用簡單命令注入漏洞理解攻擊原理;任務(wù)2:利用命令注入獲取信息; 任務(wù)3:掌握中、高安全級別下命令注入攻擊方法;任務(wù)4:掌握防御命令注入攻擊項(xiàng)目分析命令注入攻擊過程描述如下:(1)用戶或者是攻擊者分析測試是否存在命令注入漏洞;(2)通過服務(wù)器返回信息,確定是否存在命令注入;(3)向服務(wù)器注入惡意命令;(4)通過惡意命令獲取服務(wù)器信息。(5)用戶在獲取服務(wù)器控制權(quán)后,可以利用服務(wù)器做跳板,繼續(xù)攻擊或者是破壞服務(wù)器所在局域網(wǎng)。項(xiàng)目相關(guān)知識點(diǎn)命令注入簡介計(jì)算機(jī)說到底還是為人服務(wù)的,并由人來操縱。計(jì)算機(jī)的操縱方式涉及數(shù)據(jù),以及操作這些數(shù)據(jù)的指令。數(shù)據(jù)和指令都是事先準(zhǔn)備好的,各司其職,人們通過指令對輸入的數(shù)據(jù)進(jìn)行處理,獲得期望的結(jié)果后通過特定的渠道輸?出。隨著?IT?技術(shù)的飛速發(fā)展,計(jì)算機(jī)的形態(tài)逐漸多樣化(大型服務(wù)器、PC、智能終端等),不同的人在計(jì)算機(jī)系統(tǒng)中所扮演的角色各異(開發(fā)者、維護(hù)者、高級用戶、普通用戶、管理者等)。在這些場景中,數(shù)據(jù)甚至指令通常都無法事先確定,需要在運(yùn)行的過程中動態(tài)輸入。如果這兩者混雜在一塊,沒有經(jīng)過良好的組織,就會被黑客加以利用,成為一種典型的攻擊方式——命令注入。命令注入概述項(xiàng)目相關(guān)知識點(diǎn)命令注入簡介命令注入攻擊的一種典型應(yīng)用場景是用戶通過瀏覽器提交執(zhí)行命令,由于服務(wù)器沒有針對執(zhí)行命令進(jìn)行有效過濾,導(dǎo)致在沒有指定絕對路徑的情況下執(zhí)行命令,可能會允許攻擊者通過改變$PATH?或程序執(zhí)行環(huán)境的其他方面來執(zhí)行一個(gè)惡意構(gòu)造的代碼。這個(gè)漏洞存在的原因在于開發(fā)人員編寫源代碼時(shí)沒有針對代碼中可執(zhí)行的特殊函數(shù)入口進(jìn)行過濾,導(dǎo)致客戶端可以提交惡意構(gòu)造語句,并交由服務(wù)器執(zhí)行。命令注入攻擊中WEB服務(wù)器沒有過濾類似system(),eval(),exec()等函數(shù)是該漏洞攻擊成功的最主要原因。命令注入攻擊的常見模式是,在僅需要用戶輸入命令執(zhí)行所需數(shù)據(jù)的文本框中,惡意用戶利用多條命令通過相應(yīng)連接符連接可全部執(zhí)行的規(guī)則,在輸入所需數(shù)據(jù)的同時(shí)利用連接符連接惡意命令。如果裝載數(shù)據(jù)的系統(tǒng)并未設(shè)計(jì)良好的數(shù)據(jù)過濾安全方案,將會導(dǎo)致惡意命令被一并執(zhí)行,最終導(dǎo)致信息泄露或正常數(shù)據(jù)被破?壞。項(xiàng)目相關(guān)知識點(diǎn)防御思路對于此類攻擊的防御思路是,首先,假定所有的輸入都是可疑的,并且嘗試對所有提交的輸入可能執(zhí)行命令的構(gòu)造語句進(jìn)行嚴(yán)格的檢查,或者控制外部輸入,系統(tǒng)命令執(zhí)行函數(shù)的參數(shù)不允許在外部傳遞;其次,不僅要驗(yàn)證數(shù)據(jù)的類型,還要驗(yàn)證其格式、長度、范圍和內(nèi)容;不僅要在客戶端進(jìn)行數(shù)據(jù)的驗(yàn)證與過濾,還要在服務(wù)器完成關(guān)鍵的指令過濾;再次,對輸出的數(shù)據(jù)進(jìn)行檢查,數(shù)據(jù)庫里的值有可能在一個(gè)大型網(wǎng)站的多處都有輸出,即使在輸入過程中進(jìn)行編碼處理,各處的輸出數(shù)據(jù)也要進(jìn)行安全檢查;最后,在發(fā)布應(yīng)用程序之前測試所有已知的威?脅。命令注入概述項(xiàng)目相關(guān)知識點(diǎn)DOS命令連接符:&Usage:第一條命令&第二條命令[&第三條命令...]
,用這種方法可以同時(shí)執(zhí)行多條命令,而不管命令是否執(zhí)行成功。&&
(;)Usage:第一條命令&&(;)第二條命令[&&(;)第三條命令...]
,用這種方法可以同時(shí)執(zhí)行多條命令,當(dāng)碰到執(zhí)行出錯(cuò)的命令后將不執(zhí)行后面的命令,如果一直沒有出錯(cuò)則一直執(zhí)行完所有命令。示例如下:
find"ok"c:\test.txt&&(;)echo成功如果找到了"ok"字樣,就顯示"成功",找不到就不顯示。項(xiàng)目相關(guān)知識點(diǎn)DOS命令連接符:||Usage:第一條命令||第二條命令[||第三條命令...],用這種方法可以同時(shí)執(zhí)行多條命令,當(dāng)碰到執(zhí)行正確的命令后將不執(zhí)行后面的命令,如果沒有出現(xiàn)正確的命令則一直執(zhí)行完所有命令。示例如下:find"ok"c:\test.txt||echo不成功如果找不到"ok"字樣,就顯示"不成功",找到了就不顯示|管道命令Usage:第一條命令
|第二條命令[|第三條命令...]
,將第一條命令的結(jié)果作為第二條命令的參數(shù)來使用,在unix或者是windows中這種命令使用方式很常見。示例如下:
Netstat-an|find"80"將當(dāng)前pc中端口使用清苦作為find指令查找輸入,將pc中找到的80端口使用情況輸出,如果查找不到無輸出。項(xiàng)目相關(guān)知識點(diǎn)DOS命令連接符:>,>>輸出重定向命令將一條命令或某個(gè)程序輸出結(jié)果重定向到特定文件中。>與>>的區(qū)別在于,>會清除原有文件中的內(nèi)容后再寫入,而>>只會追加內(nèi)容到指定文件中,而不會清除其中原有的內(nèi)?容。<,>&,<&
<從文件中而不是從鍵盤中讀入命令輸入。
>&將一個(gè)句柄的輸出寫入到另一個(gè)句柄的輸入中。
<&從一個(gè)句柄讀取輸入并將其寫入到另一個(gè)句柄輸出中。項(xiàng)目相關(guān)知識點(diǎn)DOS命令連接符:使用命令重定向操作符可以使用重定向操作符將命令輸入和輸出數(shù)據(jù)流從默認(rèn)位置重定向到其他位置。輸入或輸出數(shù)據(jù)流的位置稱為句柄。句柄描述見下表句柄句柄的數(shù)字代號描述STDIN0鍵盤輸入STDOUT 1輸出到命令提示符窗口STDERR 2錯(cuò)誤輸出到命令提示符窗口UNDEFINED 3-9句柄由應(yīng)用程序單獨(dú)定義,它們是各個(gè)工具特有的項(xiàng)目相關(guān)知識點(diǎn)reg主要命令用法:reg命令是Windows提供的,它可以添加、更改和顯示注冊表項(xiàng)中的注冊表子項(xiàng)信息和值。
在cmd窗口中輸入“reg/?”顯示如下信息:REGOperation[ParameterList]Operation[QUERY|ADD|DELETE|COPY|SAVE|LOAD|UNLOAD|RESTORE|COMPARE|EXPORT|IMPORT|FLAGS]返回代碼:(除了REGCOMPARE)0-成功1-失敗項(xiàng)目相關(guān)知識點(diǎn)regadd將新的子項(xiàng)或項(xiàng)添加到注冊表中
語法:regaddKeyName[/vEntryName|/ve][/tDataType][/sseparator][/dvalue][/f]參數(shù)
:KeyName
,指定子項(xiàng)的完全路徑。對遠(yuǎn)程計(jì)算機(jī),在\\ComputerName\PathToSubkey中的子項(xiàng)路徑前包含計(jì)算機(jī)名。忽略ComputerName會導(dǎo)致默認(rèn)對本地計(jì)算機(jī)進(jìn)行操作。以相應(yīng)的子目錄樹開始路徑。有效子目錄樹為HKLM、HKCU、HKCR、HKU以及HKCC。遠(yuǎn)程機(jī)器上只有HKLM和HKU。
HKCR:HKEY_CLASSES_ROOTHKU:HKEY_USERSHKCU:HKEY_CURRENT_USERHKCC:HKEY_CURRENT_CONFIGHKLM:HKEY_LOCAL_MACHINE/vEntryName
:指定要添加到指定子項(xiàng)下的項(xiàng)名稱。
/ve
:指定添加到注冊表中的項(xiàng)為空值。項(xiàng)目相關(guān)知識點(diǎn)reg主要命令用法:/tDataType
:指定項(xiàng)值的數(shù)據(jù)類型。DataType可以是以下幾種類型:REG_SZ
REG_BINARY
REG_MULTI_SZ
REG_LINK
REG_DWORD_BIG_ENDIAN
REG_FULL_RESOURCE_DESCRIPTOR
REG_DWORD
REG_EXPAND_SZ
REG_DWORD_LITTLE_ENDIAN
/sseparator
:指定用于分隔多個(gè)數(shù)據(jù)實(shí)例的字符。當(dāng)REG_MULTI_SZ指定為數(shù)據(jù)類型且需要列出多個(gè)項(xiàng)時(shí),請使用該參數(shù)。如果沒有指定,將使用默認(rèn)分隔符為"\0"。
/dvalue
:指定新注冊表項(xiàng)的值。
/f
:不用詢問信息而直接添加子項(xiàng)或項(xiàng)。
項(xiàng)目相關(guān)知識點(diǎn)reg主要命令用法:具體regadd命令使用案例,cmd/k為在運(yùn)行中使用reg命令如下所示:顯示隱藏的文件和文件夾:cmd/kregadd"HKLM\Software\Microsoft\Windows\CurrentVersion\explorer\Advanced\Folder\Hidden\SHOWALL"/vCheckedvalue/treg_dword/d1/f開機(jī)啟動音量控制:cmd/kregadd"HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run"/vsystray/tREG_SZ/d"%SystemRoot%\system32\systray.exe"/f
開機(jī)啟動外殼程序:cmd/kregadd"HKLM\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Winlogon"/vShell/tREG_SZ/d"%SystemRoot%\explorer.exe"/f項(xiàng)目相關(guān)知識點(diǎn)reg主要命令用法:具體regadd命令使用案例,cmd/k為在運(yùn)行中使用reg命令如下所示:開機(jī)啟動AC97音效管理員程序cmd/kregadd"HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run"/vSoundMan/tREG_SZ/d"%SystemRoot%\SOUNDMAN.exe"/f添加遠(yuǎn)程機(jī)器ABC上的一個(gè)注冊表項(xiàng)REGADD\\ABC\HKLM\Software\MyCo
regdelete從注冊表刪除項(xiàng)或子項(xiàng)
:語法:regdeleteKeyName[{/vEntryName|/ve|/va}][/f]
/vEntryName
:刪除子項(xiàng)下的特定項(xiàng)。如果未指定項(xiàng),則將刪除子項(xiàng)下的所有項(xiàng)和子項(xiàng)。
/ve
:指定只可以刪除為空值的項(xiàng)。
/va
:刪除指定子項(xiàng)下的所有項(xiàng)。使用本參數(shù)不能刪除指定子項(xiàng)下的子項(xiàng)。
/f:無需請求確認(rèn)而刪除現(xiàn)有的注冊表子項(xiàng)或項(xiàng)。
項(xiàng)目相關(guān)知識點(diǎn)regdelete具體使用案例如下:任務(wù)欄里的任務(wù)管理器為灰色:cmd/kregdelete"HKLM\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\ImageFileExecutionOptions\taskmgr.exe"/f
刪除MSConfig啟動里的未勾選項(xiàng)目:
cmd/kregdelete"HKLM\SOFTWARE\Microsoft\SharedTools\MSConfig\startupreg"/f刪除通知區(qū)域的歷史記錄:cmd/kregdelete"HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\TrayNotify"/vPastIconsStream/f項(xiàng)目訓(xùn)練3.1實(shí)驗(yàn)環(huán)境本章節(jié)中的所有實(shí)驗(yàn)環(huán)境都是安裝在winxp虛擬機(jī)中,在虛擬機(jī)中使用的實(shí)驗(yàn)環(huán)境為DVWA實(shí)驗(yàn)環(huán)境,使用python-2.7、DVWA-1.9、xampp-win32-1.8.0-VC9-installer三個(gè)軟件按搭建。在本章節(jié)命令注入實(shí)驗(yàn)中使用物理機(jī)作為攻擊機(jī),虛擬機(jī)作為靶機(jī)。項(xiàng)目訓(xùn)練3.2任務(wù)1利用簡單命令注入漏洞理解攻擊原理在任務(wù)1中主要里利用DVWA實(shí)驗(yàn)平臺分析命令注入漏洞攻擊原理。1、打開靶機(jī)虛擬機(jī),虛擬機(jī)網(wǎng)絡(luò)設(shè)置為Nat,查看虛擬機(jī)的環(huán)境設(shè)置,打開xampp服務(wù)器管理軟件,如圖下圖所示:項(xiàng)目訓(xùn)練如上圖所示打開Apache與MySQL服務(wù),虛擬機(jī)ip為31,確保虛擬機(jī)與物理機(jī)之間網(wǎng)絡(luò)連通,可以在物理機(jī)中使用ping命令,探測網(wǎng)絡(luò)連接情況。2、在攻擊機(jī)瀏覽器中輸入31/dvwa/login.php,用戶名為:admin,密碼為password登陸DVWA實(shí)驗(yàn)平臺。如下圖所示:項(xiàng)目訓(xùn)練3、在DVWA中選擇DVWASecurity,在安全級別中選擇Low,單擊按鈕submit。項(xiàng)目訓(xùn)練4、然后選擇左側(cè)中的CommandInjection進(jìn)入命令注入實(shí)驗(yàn)環(huán)境。在實(shí)驗(yàn)環(huán)境中實(shí)現(xiàn)的功能為Pingadevice。在文本框中輸入一個(gè)正確的ip地址,在此我們輸入靶機(jī)虛擬機(jī)的ip地址31執(zhí)行如下圖所示。從下圖返回結(jié)果可知,正確的ip地址是可以返回相應(yīng)的ping指令執(zhí)行信息。因靶機(jī)的實(shí)驗(yàn)環(huán)境是搭建在虛擬機(jī)中,因此輸入的ip地址最好選用虛擬機(jī)所在的ip地址。如果虛擬機(jī)所在的物理機(jī)能夠連接到Internet,此處輸入公網(wǎng)ip地址也是可以的。項(xiàng)目訓(xùn)練輸入合法ip地址是可以順利執(zhí)行,為了后續(xù)可以注入惡意命令在此輸入一個(gè)不合法ip地址,查看其執(zhí)行返回結(jié)果。在此輸入一個(gè)數(shù)值255,以及一個(gè)不合法的ip地址56結(jié)果如圖所示:項(xiàng)目訓(xùn)練5、由前面基礎(chǔ)知識點(diǎn)可以知道,在?Windows?中,可以使用“&&”或“;”連接多條?DOS?命令使之相繼執(zhí)行,因此使用“31&&netusers”進(jìn)行命令注入測試,查看是否存在命令注入漏洞,命令注入測試如圖?3-7?所示。在圖?3-7?中可以看到“netusers”被正確執(zhí)行,并顯示出當(dāng)前系統(tǒng)中的全部用戶。通過執(zhí)行結(jié)果得出存在命令注入漏洞,可以進(jìn)行惡意命令注?入。項(xiàng)目訓(xùn)練點(diǎn)擊右下角的ViewSource查看源代碼,分析命令注入原理。源代碼如下所示:<?phpif(
isset(
$_POST[
'Submit'
]
)
)
{
//
獲取輸入,如果輸入不為空,執(zhí)行下面命令
$target
=
$_REQUEST[
'ip'
];
//
探測主機(jī)是什么類型操作系統(tǒng)。
if(
stristr(
php_uname(
's'
),
'Windows
NT'
)
)
{
//
如果是windows系統(tǒng)執(zhí)行下面指令
$cmd
=
shell_exec(
'ping
'
.
$target
);
}項(xiàng)目訓(xùn)練
else
{
//
如果是linux或者是unix操作系統(tǒng)執(zhí)行下面指令
$cmd
=
shell_exec(
'ping
-c
4
'
.
$target
);
}
//
返回命令執(zhí)行結(jié)果到用戶頁面
echo
"<pre>{$cmd}</pre>";}?>通過分析源代碼可以看到在使用shell_exec(
'ping
'
.
$target
);執(zhí)行ping命令前沒有做任何用戶輸入數(shù)據(jù)的過濾,因此在執(zhí)行命令“ping29&&netusers”時(shí),先成功執(zhí)行ping命令后,再執(zhí)行netusers命令,netusers命令可以替換為其他可執(zhí)行命令。項(xiàng)目訓(xùn)練由源代碼分析,可以得出,導(dǎo)致命令注入漏洞存在的原因?yàn)椋浩湟唬瑢τ脩糨斎霐?shù)據(jù),未做任何處理,即將所有用戶都假設(shè)為沒有惡意的用戶,但總有特例存在;其二,在執(zhí)行用戶輸入命令后,將用戶輸入指令的執(zhí)行信息,完整的輸出,給用戶完整的信息提示,無論是可執(zhí)行還是不可執(zhí)行的信息,給用戶詳細(xì)的信息提示,為惡意用戶執(zhí)行下一步指令做準(zhǔn)備。項(xiàng)目訓(xùn)練3.3任務(wù)2利用命令注入獲取信息在任務(wù)2中利用命令注入漏洞,打開靶機(jī)3389端口、添加用戶、遠(yuǎn)程登陸到靶機(jī)系統(tǒng)中,獲取靶機(jī)控制權(quán)限。1、在攻擊機(jī)中輸入網(wǎng)址:31/dvwa/login.php,登陸后選擇安全等級為low。因?yàn)槭菍?shí)驗(yàn)對命令注入漏洞的利用方法,為了實(shí)驗(yàn)順利進(jìn)行,所以選擇在low安全級別下進(jìn)行實(shí)驗(yàn)。在文本框中輸入“31&&netstat-an”,查看系統(tǒng)當(dāng)前開放的端口,如下圖所示:項(xiàng)目訓(xùn)練3.3任務(wù)2利用命令注入獲取信息2、從上圖可以看出系統(tǒng)開放了很多端口,可以選擇不同端口作為入侵方法,本任務(wù)中采用3389端口遠(yuǎn)程連接。3389端口沒有開放,需要使用命令打開3389端口,輸入如下字符串,命令執(zhí)行結(jié)果如圖。:31&®ADDHKLM\SYSTEM\CurrentControlSet\Control\Terminal""Server/vfDenyTSConnections/tREG_DWORD/d0/f項(xiàng)目訓(xùn)練3.3任務(wù)2利用命令注入獲取信息3.再次使用命令“31&&netstat–an”查看系統(tǒng)3389端口是否打開,如下圖所示:項(xiàng)目訓(xùn)練3.3任務(wù)2利用命令注入獲取信息4.現(xiàn)在3389已經(jīng)打開,下面在文本框中輸入“31&&netusertesttest/add”,在靶機(jī)系統(tǒng)中添加一個(gè)用戶test,密碼為test,執(zhí)行結(jié)果如下圖所示:項(xiàng)目訓(xùn)練3.3任務(wù)2利用命令注入獲取信息5、使用命令“31&&netusers”查看用戶添加結(jié)果。如下圖所示:項(xiàng)目訓(xùn)練3.3任務(wù)2利用命令注入獲取信息6、為添加的test用戶提權(quán),添加到管理員用戶組。輸入“31&&netlocalgroupAdministratorstest/add”,執(zhí)行結(jié)果如下圖所示:項(xiàng)目訓(xùn)練3.3任務(wù)2利用命令注入獲取信息7、查看用戶提權(quán)結(jié)果,輸入“29&&netlocalgroupAdministrators”,如下圖所示:項(xiàng)目訓(xùn)練3.3任務(wù)2利用命令注入獲取信息8、在攻擊機(jī)中打開遠(yuǎn)程連接,輸入靶機(jī)ip地址,如下圖所示:項(xiàng)目訓(xùn)練3.3任務(wù)2利用命令注入獲取信息9、輸入用戶名test,密碼test,進(jìn)入靶機(jī),如下圖所示,完全控制靶機(jī)。項(xiàng)目訓(xùn)練3.3任務(wù)2利用命令注入獲取信息到此,該任務(wù)實(shí)驗(yàn)結(jié)束,通過利用命令注入漏洞,使用注冊表指令,將遠(yuǎn)程桌面的3389端口打開。接著創(chuàng)建用戶、用戶提權(quán)、遠(yuǎn)程連接、獲取服務(wù)器系統(tǒng)控制權(quán)限。注冊表(Registry)是MicrosoftWindows系統(tǒng)中的一個(gè)重要的數(shù)據(jù)庫,用于存儲系統(tǒng)和應(yīng)用程序的設(shè)置信息,可以通過注冊表命令,修改系統(tǒng)參數(shù)。注冊表命令具體使用參看章節(jié)前面知識點(diǎn)。項(xiàng)目訓(xùn)練3.4任務(wù)3中、高安全級別下命令注入漏洞攻擊方法按照任務(wù)1方法,打開DVWA實(shí)驗(yàn)環(huán)境,將安全級別選擇為中等,進(jìn)入命令注入實(shí)驗(yàn)環(huán)境,在該環(huán)境中,使用合法的ip地址,即輸入靶機(jī)的ip地址,能夠返回正常的數(shù)據(jù)。為了進(jìn)一步測試是否存在命令注入漏洞,進(jìn)行下面的實(shí)驗(yàn)。使用注入命令“31&&dir”,執(zhí)行結(jié)果如下圖所示。在下圖中可以看到執(zhí)行命令中的連接符號“&&”被過濾,過濾后輸入數(shù)據(jù)變?yōu)椤?1dir”為非法ip地址,不能正確執(zhí)行。因此可以推測,在該安全級別下對用戶輸入數(shù)據(jù)進(jìn)行了安全過濾。項(xiàng)目訓(xùn)練3.4任務(wù)3中、高安全級別下命令注入漏洞攻擊方法進(jìn)一步測試系統(tǒng)中是采用白名單還是黑名單過濾,白名單是指只有名單中的數(shù)據(jù)是可用,其他數(shù)據(jù)都是不可用的;黑名單是指只有名單中的數(shù)據(jù)是不可用的,其他數(shù)據(jù)都是可用的。測試“;”連接符號是否可用,使用注入命令“31;dir”,運(yùn)行結(jié)果如下圖所示,從下圖返回結(jié)果可以得到,該連接符號也被過濾。項(xiàng)目訓(xùn)練3.4任務(wù)3中、高安全級別下命令注入漏洞攻擊方法測試連接符“&”,使用注入命令“31&dir”,運(yùn)行結(jié)果如下圖所示,在該返回結(jié)果中,顯示了當(dāng)前路徑下的目錄,因此可以判斷在該安全級別是采用了黑名單的過濾方式。這一步為止,可以判斷存在命令注入漏洞??梢允褂妹钸B接符號“&”,按照任務(wù)2的方法進(jìn)行命令注入攻擊。為了進(jìn)一步測試黑名單中包含的字符,可以進(jìn)行符號“||”、“|”的測試,通過測試結(jié)果推測,黑名單為“&&”、“;”只對上面兩個(gè)命令連接符號進(jìn)行了過濾項(xiàng)目訓(xùn)練3.4任務(wù)3中、高安全級別下命令注入漏洞攻擊方法針對上面測試結(jié)果,分析構(gòu)造一種繞過方法,為了繞過過濾可以在文本框中輸入“29&;&netuser”,執(zhí)行結(jié)果如圖所示通過上面執(zhí)行結(jié)果可以看到成功繞過了對數(shù)據(jù)的過濾。原理是只對數(shù)據(jù)中的“&&”、“;”過濾,因此在“&;&”中將分號過濾后剩下“&&”。利用系統(tǒng)過濾特性構(gòu)造字符串。項(xiàng)目訓(xùn)練3.4任務(wù)3中、高安全級別下命令注入漏洞攻擊方法在DVWA的實(shí)驗(yàn)環(huán)境中,將安全級別選擇為高級,測試該安全級別下是否存在安全漏洞。首先進(jìn)行合法ip地址與非法ip地址的測試,查看測試結(jié)果,通過測試結(jié)果進(jìn)行相應(yīng)的分析。通過測試結(jié)果可以得到,系統(tǒng)給出了詳細(xì)的出錯(cuò)信息,可以通過錯(cuò)誤信息分析錯(cuò)誤原因。使用注入命令“31&dir”,進(jìn)行測試,測試結(jié)果如下圖所示。通過下圖運(yùn)行結(jié)果分析,可以得到,系統(tǒng)中進(jìn)行了字符“&”過濾,因此命令連接符號“&&”同樣也是被過濾,因?yàn)椤?&”是有兩個(gè)“&”組成。項(xiàng)目訓(xùn)練3.4任務(wù)3中、高安全級別下命令注入漏洞攻擊方法進(jìn)一步測試,測試“||”、“|”符號是否被過濾使用注入命令“cat||dir”,進(jìn)行測試,從前面知識點(diǎn)中知道,該連接符號是當(dāng)?shù)谝粭l指令不能正確執(zhí)行時(shí)可以執(zhí)行第二條指令,測試結(jié)果如下圖所示。使用注入命令“31|dir”,運(yùn)行結(jié)果如下圖所示項(xiàng)目訓(xùn)練3.4任務(wù)3中、高安全級別下命令注入漏洞攻擊方法通過常規(guī)的方法,在該安全級別下無法發(fā)現(xiàn)測試漏洞,需要采用一些非常規(guī)的測試方法,首先來猜測空格符號有沒有被過濾,如果沒有被過濾,可以使用空格進(jìn)行注入命令的構(gòu)造。使用注入命令“192.168.190.131”,在131前加了一個(gè)空格,測試結(jié)果如下圖所示項(xiàng)目訓(xùn)練3.4任務(wù)3中、高安全級別下命令注入漏洞攻擊方法通過上圖的運(yùn)行結(jié)果可以得出,空格沒有被系統(tǒng)過濾,因此,可以對連接符號進(jìn)行構(gòu)造,例如“||”、“||”、“||”、“||”,是四個(gè)不同的連接符號。對四個(gè)構(gòu)造符號進(jìn)行測試結(jié)果如下圖所示。通過下圖結(jié)果可以得到后面兩種構(gòu)造是可以繞過過濾,即“cat||dir”、“cat||dir”。通過發(fā)現(xiàn)的構(gòu)造方法按照任務(wù)2的命令注入步驟可以獲取靶機(jī)的系統(tǒng)控制權(quán)限。項(xiàng)目訓(xùn)練3.4任務(wù)3中、高安全級別下命令注入漏洞攻擊方法項(xiàng)目訓(xùn)練3.4任務(wù)3中、高安全級別下命令注入漏洞攻擊方法通過大量的測試,發(fā)現(xiàn)使用“|”連接符號,符號前后不能加空格,也可以繞過過濾,在此不再做實(shí)驗(yàn)結(jié)果。在實(shí)驗(yàn)過程中可以根據(jù)文章中所提示的思路原則,進(jìn)行命令構(gòu)造做測試,看是否能發(fā)現(xiàn)其他的構(gòu)造方法。項(xiàng)目訓(xùn)練3.5任務(wù)4防御命令注入攻擊在任務(wù)1中分析命令注入漏洞原理時(shí),涉及到對于命令注入漏洞的防御方法,在DVWA、實(shí)驗(yàn)平臺mid等級中,使用黑名單進(jìn)行輸入數(shù)據(jù)過濾。在該實(shí)驗(yàn)中,利用數(shù)據(jù)過濾規(guī)則可以成功繞開,執(zhí)行惡意命令。因?yàn)閿?shù)據(jù)在進(jìn)行過濾時(shí)只過濾了一次,因此要想能夠更好的過濾數(shù)據(jù)可以使用循環(huán)結(jié)構(gòu)進(jìn)行過濾。中等安全級別下,服務(wù)器端源代碼如下:<?phpif(isset($_POST['Submit'])){//獲取輸入,如果輸入不為空執(zhí)行下面命令$target=$_REQUEST['ip'];//設(shè)置黑名單,將輸入ip中的&&,;使用空字符替換。$substitutions=array('&&'=>'',';'=>'',);項(xiàng)目訓(xùn)練3.5任務(wù)4防御命令注入攻擊//設(shè)置黑名單,將輸入ip中的&&,;使用空字符替換。$target=str_replace(array_keys($substitutions),$substitutions,$target);//
探測主機(jī)是什么類型操作系統(tǒng)。
if(
stristr(
php_uname(
's'
),
'Windows
NT'
)
)
{
//
如果是windows系統(tǒng)執(zhí)行下面指令
$cmd
=
shell_exec(
'ping
'
.
$target
);
}
else
{
//
如果是linux或者是unix操作系統(tǒng)執(zhí)行下面指令
$cmd
=
shell_exec(
'ping
-c
4
'
.
$target
);
}
//
返回命令執(zhí)行結(jié)果到用戶頁面
echo
"<pre>{$cmd}</pre>";}項(xiàng)目訓(xùn)練3.5任務(wù)4防御命令注入攻擊在上面源碼中通過源碼注釋可以看到,在執(zhí)行shell_exec(
'ping
'
.
$target
);命令前,使用“str_replace(array_keys($substitutions),$substitutions,$target)”函數(shù)將輸入的“&&”、“;”全部過濾掉,使多條指令連接符號不能起到應(yīng)有的作用,不能相繼執(zhí)行。在此為了繞過過濾可以在文本框中輸入“31&;&netuser”,進(jìn)行構(gòu)造注入命令。項(xiàng)目訓(xùn)練3.5任務(wù)4防御命令注入攻擊在中等安全級別下,對注入命令在不同操作系統(tǒng)中的執(zhí)行結(jié)果,都將詳細(xì)的信息通過“echo
"<pre>{$cmd}</pre>"”函數(shù)輸出到客戶端??蛻艨梢酝ㄟ^分析錯(cuò)誤的輸出結(jié)果,進(jìn)行仔細(xì)的分析,推測出系統(tǒng)的安全處理方式,例如注入“31&&dir”,注入命令執(zhí)行結(jié)果的錯(cuò)誤提示中“……31dir……”,可以分析得出系統(tǒng)安全測試將“&&”進(jìn)行了過濾。可見雖然是錯(cuò)誤的提示信息,但對有經(jīng)驗(yàn)的惡意用戶還是十分有效的,能從其中分析推測出有用的信息,因此對于安全的防御方法中,詳細(xì)的錯(cuò)誤信息不能輸出到客戶端。通過上面執(zhí)行結(jié)果可以看到成功繞過了對數(shù)據(jù)的過濾,原理是數(shù)據(jù)只對‘&&‘、’;‘過濾,因此在’&;&‘中將分號過濾后正好剩下‘&&’。在還可以使用第一條命令并不能正確執(zhí)行而執(zhí)行第二條命令的連接符‘||’,進(jìn)行繞過,例如執(zhí)行‘256||netuser’也可以繞過。項(xiàng)目訓(xùn)練3.5任務(wù)4防御命令注入攻擊在高等安全級別中,同樣采用了黑名單的方式進(jìn)行數(shù)據(jù)過濾,源代碼如下圖所示項(xiàng)目訓(xùn)練3.5任務(wù)4防御命令注入攻擊從上圖中可以得到在該安全級別下,對用戶輸入數(shù)據(jù)使用函數(shù)“$substitutions=array('&'=>'',';'=>'','|'=>'','-'=>'','$'=>'','('=>'',')'=>'','`'=>'','||'=>'',);”進(jìn)行安全處理,將命令連接符號進(jìn)行了詳細(xì)過濾。因是采用黑名單進(jìn)行的過濾方法,所以只要不在黑名單中的數(shù)據(jù),都是可用的,在任務(wù)3中,通過大量的測試進(jìn)行了一系列注入命令的構(gòu)造,猜測到了黑名單外的數(shù)據(jù),完成了注入繞過。在此,仔細(xì)分析上圖中的源代碼,可以看到在將“|”進(jìn)行過濾的黑名單中的數(shù)據(jù)為“|”,管道符號后面緊跟著一個(gè)空格符號,因此只有當(dāng)管道符號與空格同時(shí)出現(xiàn)時(shí)才滿足黑名單中的數(shù)據(jù),才會被過濾,在任務(wù)3中也測試出了采用管道符號緊密連接的多條指令是可以正確執(zhí)行,成功繞過。因此,在設(shè)計(jì)黑名單時(shí),程序員要考慮全面,才不會留下漏洞。在該安全級別下,同樣將詳細(xì)的錯(cuò)誤信息輸出到客戶端。項(xiàng)目訓(xùn)練3.5任務(wù)4防御命令注入攻擊在該實(shí)驗(yàn)環(huán)境中的impossible安全級別下,代碼是無法繞過過濾的,分析該安全級別的詳細(xì)源代碼,源代碼如下所示。<?phpif(isset($_POST['Submit'])){//CheckAnti-CSRFtokencheckToken($_REQUEST['user_token'],$_SESSION['session_token'],'index.php');//Getinput$target=$_REQUEST['ip'];$target=stripslashes($target);//SplittheIPinto4octects$octet=explode(".",$target);//CheckIFeachoctetisanintegerif((is_numeric($octet[0]))&&(is_numeric($octet[1]))&&(is_numeric($octet[2]))&&(is_numeric($octet[3]))&&(sizeof($octet)==4)){項(xiàng)目訓(xùn)練3.5任務(wù)4防御命令注入攻擊//Ifall4octetsareint'sputtheIPbacktogether.$target=$octet[0].'.'.$octet[1].'.'.$octet[2].'.'.$octet[3];//DetermineOSandexecutethepingcommand.if(stristr(php_uname('s'),'WindowsNT')){//Windows$cmd=shell_exec('ping'.$target);}else{//*nix$cmd=shell_exec('ping-c4'.$target);}//Feedbackfortheenduserecho"<pre>{$cmd}</pre>";}項(xiàng)目訓(xùn)練3.4.5任務(wù)4防御命令注入攻擊else{//Ops.Lettheusernametheresamistakeecho'<pre>ERROR:YouhaveenteredaninvalidIP.</pre>';}}//GenerateAnti-CSRFtokengenerateSessionToken();?>分析上述源碼,可以得出采用了三種安全方面的數(shù)據(jù)處理,加強(qiáng)系統(tǒng)安全性。項(xiàng)目訓(xùn)練3.5任務(wù)4防御命令注入攻擊加入了token,每次會話都采用需要將客戶端生成的token值傳遞到服務(wù)器端,防止被暴力破解。分析客戶端實(shí)驗(yàn)環(huán)境中的頁面源代碼,發(fā)現(xiàn)在頁面中加了一個(gè)隱藏的input標(biāo)簽<inputname="user_token"value="598460
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 藥品采購藥庫管理制度
- 藥店中藥入庫管理制度
- 藥店庫房貨位管理制度
- 論述人力資源管理制度
- 設(shè)備創(chuàng)建流程管理制度
- 設(shè)備安裝進(jìn)場管理制度
- 設(shè)備施工安全管理制度
- 設(shè)備點(diǎn)檢編制管理制度
- 設(shè)備維修項(xiàng)目管理制度
- 設(shè)備需求清單管理制度
- 中國重點(diǎn)、熱點(diǎn)區(qū)域(講練)-2025年中考地理二輪復(fù)習(xí)(全國版)
- 陪玩俱樂部合同協(xié)議
- 2025年統(tǒng)計(jì)學(xué)期末考試題庫-深度解析綜合案例分析題
- 2024北京朝陽區(qū)五年級(下)期末數(shù)學(xué)試題及答案
- 《商場促銷活動策劃》課件
- 多模態(tài)成像技術(shù)在醫(yī)學(xué)中的應(yīng)用-全面剖析
- 郭秀艷-實(shí)驗(yàn)心理學(xué)-練習(xí)題及答案
- 員工測試題目及答案
- 汽車點(diǎn)火考試題及答案
- 2024年湖南學(xué)考選擇性考試政治真題及答案
- 《用電飯煲蒸米飯》(教案)-2024-2025學(xué)年四年級上冊勞動魯科版
評論
0/150
提交評論