網(wǎng)頁(yè)設(shè)計(jì)汽車網(wǎng)站建設(shè)在線視頻用什么網(wǎng)址
upload labs靶場(chǎng)
注意:本人關(guān)卡后面似乎相比正常的關(guān)卡少了一關(guān),所以每次關(guān)卡名字都是+1才可以和正常關(guān)卡在同一關(guān)
一.個(gè)人信息
個(gè)人名稱:張嘉瑋
二.解題情況
三.解題過(guò)程
題目:up load labs靶場(chǎng)
pass 1前后端
思路及解題:先驗(yàn)證合法性是前端還是后端(如果是前端驗(yàn)證意味著你可以在前端驗(yàn)證之后后數(shù)據(jù)流發(fā)往后臺(tái)的時(shí)候?qū)⑵鋽r截并且修改)
題目中的提交限制必須為jpg等類型,需要判斷這個(gè)提交是前端還是后端驗(yàn)證的,所以先打開(kāi)抓包,并且發(fā)送一個(gè)不合法的php文件,提交,發(fā)現(xiàn)抓包并沒(méi)有阻止頁(yè)面顯示文件上傳格式錯(cuò)誤,所以是前端驗(yàn)證。因此我直接將php文件類型重命名為jpg類型,提交文件前先抓包攔,再改變其中文件類型php為jpg,再forward,此時(shí)我已將木馬發(fā)送到其內(nèi)部,之后在下方圖片中右鍵點(diǎn)擊新標(biāo)簽頁(yè)中打開(kāi)圖片,復(fù)制域名,打開(kāi)蟻劍,右擊添加數(shù)據(jù),粘貼域名到url并且輸入密碼a,點(diǎn)擊測(cè)試連接觀察是否通過(guò),若通過(guò)再添加,此時(shí)便可以控制對(duì)方了。
一句話木馬
<?php
@eval($_POST_['a']);
?>
+++
pass 2前后端
1.思路:仍然是先看合法性是前端還是后端
我上傳一個(gè)不合法的php文件并且用bp攔截,發(fā)現(xiàn)在攔截過(guò)程中頁(yè)面未報(bào)錯(cuò),所以是后端驗(yàn)證,不是前端,,之后判斷攔截下的語(yǔ)句中哪句話是判斷文件類型的,所以我繼續(xù)先上傳jpg,burp攔截后找到其中的Content-Type:image/jpeg然后刪掉再forward,發(fā)現(xiàn)文件傳輸錯(cuò)誤,所以它是通過(guò)content-type驗(yàn)證合法性的,之后我再上傳一個(gè)php,攔截,將content-type:application/octet-stream改為image/jpeg之后forward則發(fā)送成功,蟻劍中添加數(shù)據(jù)后查看是否成功
+++
pass 3文件名加數(shù)字
(此題驗(yàn)證方式為黑名單,大部分網(wǎng)站是白名單)
思路及做法:查看源代碼后發(fā)現(xiàn)其限制了php文件 但存在漏洞,未限制php3,4等格式;
所以直接將文件后綴名改為.php3等類型
+++
pass4配置文件
思路及做法:1.查看源碼,發(fā)現(xiàn)其已限制大多數(shù)文件類型,但是有一個(gè)明顯的漏洞,沒(méi)有限制htacess文件,所以直接將文件后綴名改為.htacess就行了。
AddType application/x-httpd-php .jpg.txt意思就是將txt和.jpg文件當(dāng)作php文件解析
2.所以接下來(lái)直接上傳一個(gè)jpg文件類型的一句話木馬就可以搞定了,再連接蟻劍測(cè)試是否成功.
+++
補(bǔ)充文件后綴名字
.htaccess
叫分布式配置文件 作用于網(wǎng)站根目錄及其子目錄 修改后立刻生效 可覆蓋httod-conf
httpd -conf
(先加載)
包含apache http 作用于整個(gè)服務(wù)器 優(yōu)先級(jí)低,需管理員權(quán)限 ,且重啟服務(wù)器才可以生效
.user.ini
作用于用戶或特定目錄的配置文件,,可覆蓋或追加配置選項(xiàng),在web應(yīng)用程序根目錄下,可覆蓋php.ini,追加全職配置文件
php.ini
(先加載)
作用是存儲(chǔ)了對(duì)整個(gè)php環(huán)境生效的配置選項(xiàng),通常位于php安裝目錄之下,優(yōu)先級(jí)較低,需管理員權(quán)限和重啟web服務(wù)器
+++
pass5配置文件
思路和做法:
仍然是有黑名單,限制了.htaccess,但是未限制.user.ini的,因?yàn)?user,.ini優(yōu)先級(jí)程度高,可以覆蓋掉php.ini,所以不限制的危害較大
Auto-prepend-file=index(2).txt //此文件中有木馬//自動(dòng)包含所有文件 用index(2).txt包含
所以先上傳一個(gè).user.ini的文件 再上傳對(duì)應(yīng)的php改為jpg后的文件 ,通過(guò)蟻劍連接,就可以
法二: 思路: 由于題目中檢查文件名后綴的源代碼并未選擇循環(huán)結(jié)構(gòu),因此后綴名.php 后直接加**.空格.就可以在其檢查后正好剩一個(gè).php.正好運(yùn)行(windows操作系統(tǒng)下會(huì)將最后一個(gè)點(diǎn)刪除,使得文件仍然可以運(yùn)行,所以蟻劍連接時(shí)直接輸入.php**就可以了。
+++
pass6大寫(xiě)
思路:題目黑名單源代碼中明顯沒(méi)有限制pHp,PHP等大寫(xiě)形式的后綴名,所以直接在bp中攔截之后更改Content后面的后綴名就可以了,之后蟻劍連接看有沒(méi)有成功
+++
pass7空格
思路:題目黑名單源代碼未限制首位去空,借此繞過(guò)黑名單(都需bp攔截后修改)。并且我windows系統(tǒng)下就算給文件后綴名加了點(diǎn)系統(tǒng)也會(huì)自動(dòng)刪除,所以可以正常運(yùn)行。
+++
pass8 .
思路:題目黑名單源代碼中少了del的自動(dòng)刪除.,**(刪除方式是從右邊往左邊刪,遇到空格就會(huì)停止)**因此直接bp更改Content下的文件后綴名就可以了,注意蟻劍搭建url時(shí)將最后的.刪除,因?yàn)閣indows下會(huì)自動(dòng)刪除多余的點(diǎn).
+++
補(bǔ)充額外數(shù)據(jù)流
格式: “”::$DATA" 即表示一個(gè)附加數(shù)據(jù)流 它不是一個(gè)文件 所以不會(huì)驗(yàn)證文件后綴.
作用:和例如打開(kāi)txt文件后直接就可以看見(jiàn)的文字信息,也叫默認(rèn)數(shù)據(jù)流不同,其可以存儲(chǔ)文件的元數(shù)據(jù),標(biāo)簽,備份等,想要訪問(wèn)需要特殊命令
導(dǎo)入方式:
-
echo 內(nèi)容 >>文件名:數(shù)據(jù)流名
訪問(wèn) Notepad 文件名:數(shù)據(jù)流名
-
type 文件名>>文件名.數(shù)據(jù)流名
+++
pass9::$DATA
思路:題目黑名單中缺少了對(duì)**:: D A T A ? ? 的限制,這不是一個(gè)文件,是一個(gè)額外數(shù)據(jù)包,因此黑名單不會(huì)檢查它,通過(guò)這個(gè) b u g 直接繞過(guò),之后新建標(biāo)簽頁(yè)打開(kāi)后將 u r l 里的 : : DATA**的限制,這不是一個(gè)文件,是一個(gè)額外數(shù)據(jù)包,因此黑名單不會(huì)檢查它,通過(guò)這個(gè)bug直接繞過(guò),之后新建標(biāo)簽頁(yè)打開(kāi)后將url里的:: DATA??的限制,這不是一個(gè)文件,是一個(gè)額外數(shù)據(jù)包,因此黑名單不會(huì)檢查它,通過(guò)這個(gè)bug直接繞過(guò),之后新建標(biāo)簽頁(yè)打開(kāi)后將url里的::DATA刪除就可以訪問(wèn)了
+++
pass10. .
思路:刪除點(diǎn)與空格的源代碼中沒(méi)有添加循環(huán) ,所以直接**.空格 .**解決
+++
pass10雙寫(xiě)后綴繞過(guò)
$file_name = str_ireplace($deny_ext,"", $file_name);
意思是deny—會(huì)將$file_name路徑下的之前黑名單的文件全部變成’ ',也就是刪除他們 順序是從左邊往右邊刪(沒(méi)有循環(huán)的條件下只循環(huán)一下
+++
補(bǔ)充空字符
格式:0x00 順序從左到右(在編程語(yǔ)言使用 || %00(在url中使用)
+++
pass11%00截?cái)?#xff08;php<5.3.29)
思路:觀察源代碼發(fā)現(xiàn)其用白名單過(guò)濾
$ext_arr = array('jpg','png','gif');
$file_ext = substr($_FILES['upload_file']['name'], strrpos($_FILES['upload_file']['name'],".")+1)
逗號(hào)前 是獲取文件 也就是從哪里獲取:逗號(hào)后 是在幾位 ;(點(diǎn)在這個(gè)里面最后出現(xiàn)是出現(xiàn)在了第幾位)(從左到右)
php上傳先先把文件放在臨時(shí)路徑當(dāng)中,再移動(dòng)到指定位置
漏洞在于通過(guò)**GET[‘save_path’].來(lái)拼接組成上傳的文件路徑 而這個(gè)get傳參是我們可以改掉的地方,改掉其上傳路徑,再將后面進(jìn)行截?cái)?。其?shí)原理就是在后端驗(yàn)證時(shí)它發(fā)現(xiàn)你是jpg文件,所以給你通過(guò)了,但是后續(xù)經(jīng)過(guò)移動(dòng)到臨時(shí)路徑和最終路徑的過(guò)程中時(shí),111.php和.jpg拼接,因?yàn)閜hp后面有%00所以jpg會(huì)省略,最終還是以php形式解讀的
操作:
改為
%00
是空字符(NULL字符)的URL編碼,它在某些情況下可能被用于截?cái)嘧址蚶@過(guò)安全措施
(后面的http1.1是個(gè)http協(xié)議)
+++
pass12
思路:大致和12關(guān)一樣
將空格改成右邊框中hex(16進(jìn)制)形式---->00
+++
補(bǔ)充圖片字符標(biāo)識(shí)
- jpeg/jfif 頭字節(jié)0xff 0xd8
- png(無(wú)損壓縮形式) 0x89 0x50
- gif 0x47 0x47 0x49
- bmp(windows位圖) 0x42 0x4d
- tuff(標(biāo)簽圖片格式) 可是不同的d
+++
pass13修改前兩個(gè)字節(jié)
思路及做法:
觀察題目源代碼,發(fā)現(xiàn)其有判斷語(yǔ)句判斷(讀取文件的前兩個(gè)字節(jié))轉(zhuǎn)化為10進(jìn)制再判斷.
switch($typeCode){ case 255216: $fileType = 'jpg'; //十進(jìn)制break;case 13780: $fileType = 'png';break; case 7173: $fileType = 'gif';break;default: $fileType = 'unknown';} return $fileType;
代碼通過(guò)讀為圖片頭字母判斷是什么圖片類型
做法:先將一句話木馬以jpg形式更改后綴名,再通過(guò)記事本形式打開(kāi)將最前面增加兩個(gè)空格,(以方便后續(xù)的修改),再通過(guò)010editor更改前面兩個(gè)字頭->89 50 (png)形式,之后將文件后綴名字改為php以原來(lái)的方式上傳 發(fā)現(xiàn)不可以 因?yàn)槲募訮ng的形式解析了;所以需要將jpg文件以php形式輸出,這個(gè)時(shí)候就需要文件包含漏洞了:上傳一個(gè)改了文件頭的php文件,觀察他的路徑 是在upload路徑里面 而包含漏洞的文件夾在他的上級(jí)目錄,所以在有漏洞頁(yè)面的后面輸入urll后**?file=./upload/7020241111194319**就成功了
漏洞:通過(guò)get請(qǐng)求獲得file文件中的東西,它沒(méi)有對(duì)文件包含的東西過(guò)濾,都會(huì)將文件以php形式解析
所以可以利用它會(huì)將文件當(dāng)成php形式的漏洞直接輸入?file=1.jpg(文件中是一句話木馬)
+++
pass14圖片馬繞過(guò)
getimgaesize()意思是返回包含文件屬性的數(shù)組,這里不可以通過(guò)13關(guān)一樣簡(jiǎn)單的方法過(guò)了
做法:應(yīng)用cmd,將一個(gè)圖片與含有一句話代碼的php文件(這兩個(gè)文件必須放在一個(gè)路徑)通過(guò)cmd(打開(kāi)cmd后,通過(guò)基礎(chǔ)命令進(jìn)入他倆在的那個(gè)路徑) 輸入:copy 1.jpg/b + index(22).php/a 2.jpg生成一個(gè)圖片馬,之后就可以成功發(fā)送了,之后打開(kāi)文件包含漏洞的頁(yè)面 輸入**?file=./upload/剛剛隨機(jī)生成的文件編碼**,就可以通過(guò)蟻劍連接了.
+++
pass15圖片馬繞過(guò)
仿照第14關(guān)就可以過(guò)去了
+++
pass16二次渲染
思路:通過(guò)觀察源代碼,發(fā)現(xiàn)它將圖片進(jìn)行了二次渲染,也就是重新超了一遍,會(huì)刪掉一些東西,所以原來(lái)有的Php木馬會(huì)直接消失掉,如下:
做法一:保存一個(gè)gif圖片(),上傳到題目中去,通過(guò)010editor打開(kāi)并進(jìn)行比較,其中藍(lán)色部分是兩者相同的部分,找到兩者相同的地方(要稍微靠后一點(diǎn)),則我可以在原來(lái)的圖片的一堆數(shù)字里增加一句話木馬,這里的木馬因?yàn)楸谎谏w掉了,所以木馬不會(huì)被刪除,上傳成功之后,通過(guò)文件包含漏洞在url里輸入?file=./upload/文件名,再通過(guò)蟻劍連接,然后就成功了.
做法二:在你第一次發(fā)送的gif圖片里直接插入一句話木馬,再發(fā)送給題目,發(fā)現(xiàn)木馬其并沒(méi)有被刪掉,所以這就是他的漏洞,他渲染一次后就不會(huì)再渲染了,所以可以直接將渲染一次后的圖片里直接插入一句話木馬,就成功了
+++
補(bǔ)充條件競(jìng)爭(zhēng)
文件上傳會(huì)從臨時(shí)目錄(服務(wù)器)轉(zhuǎn)移到指定目錄,再判斷文件是否合法,所以通過(guò)發(fā)送很多請(qǐng)求,使判斷過(guò)程緩不過(guò)來(lái),我再趁機(jī)訪問(wèn)
<?php fputs(fopen('../upload/shell18.php','w'),'<?php phpinfo();?>');?>
原理:訪問(wèn)有沒(méi)有Php文件,如果沒(méi)有就會(huì)新建一個(gè)shell.php文件 再將一句話木馬寫(xiě)下去
+++
pass17
思路及做法:先抓一個(gè)上傳php文件的包
同時(shí)在url中搜索 路徑為在upload里的你要往過(guò)發(fā)的文件的路徑,也攔截住,把這兩個(gè)都發(fā)送都爆破模式,再按照上述設(shè)置同時(shí)爆破,只要看見(jiàn)upload路徑下長(zhǎng)存這那個(gè)shell18.php文件就成功了.(注意要一邊訪問(wèn)一邊攻擊)
+++
pass18apache解析漏洞+條件競(jìng)爭(zhēng)(php版本為apache版本才有的漏洞)
思路:在這里的源代碼中會(huì)提前解析文件后綴名,所以就算爆破,其中的php文件也會(huì)被攔截,但是apache解析不了7z 它從右邊往左邊解析時(shí)候,遇到7z不會(huì)執(zhí)行,會(huì)直接解析php index(22).php.7z,所以可以借助7z的后綴名字通過(guò),下一步就和17關(guān)一樣了.
+++
pass19后綴繞過(guò)總結(jié)
思路:觀察源代碼發(fā)現(xiàn)其會(huì)直接看.后面的后綴 然后判斷
可以上傳的時(shí)候 后綴名字為.php空格 .jpg就可以通過(guò)了,因?yàn)閣indows解析時(shí)候會(huì)自動(dòng)將空格刪除,所以不要害怕文件打不開(kāi),而題目過(guò)濾時(shí)卻會(huì)讀取到j(luò)pg,所以可以成功繞過(guò)。
+++
hp版本為apache版本才有的漏洞)
思路:在這里的源代碼中會(huì)提前解析文件后綴名,所以就算爆破,其中的php文件也會(huì)被攔截,但是apache解析不了7z 它從右邊往左邊解析時(shí)候,遇到7z不會(huì)執(zhí)行,會(huì)直接解析php index(22).php.7z,所以可以借助7z的后綴名字通過(guò),下一步就和17關(guān)一樣了.
+++
pass19后綴繞過(guò)總結(jié)
思路:觀察源代碼發(fā)現(xiàn)其會(huì)直接看.后面的后綴 然后判斷
可以上傳的時(shí)候 后綴名字為.php空格 .jpg就可以通過(guò)了,因?yàn)閣indows解析時(shí)候會(huì)自動(dòng)將空格刪除,所以不要害怕文件打不開(kāi),而題目過(guò)濾時(shí)卻會(huì)讀取到j(luò)pg,所以可以成功繞過(guò)。
+++