00截断上传绕过_关于上传中的00截断分析
關(guān)于上傳中00截斷的細節(jié),很多朋友在滲透中都會發(fā)現(xiàn)一些這樣的有趣現(xiàn)象,這個站點使用00截斷上傳的方法上傳成功了,而換一個站點又失敗了,這是什么原因呢?你看了這篇文章就會明白。
00截斷原理
0x00是字符串的結(jié)束標識符,攻擊者可以利用手動添加字符串標識符的方式來將后面的內(nèi)容進行截斷,而后面的內(nèi)容又可以幫助我們繞過檢測。
00截斷的限制條件1PHP<5.3.29,且GPC關(guān)閉
00截斷的利用方法
上傳文件后綴檢測代碼1
2
3
4
5
6
7
8
9
10
11
12
13$uploaded_name = $_FILES[ 'file' ][ 'name' ];
$uploaded_ext = substr( $uploaded_name, strrpos( $uploaded_name, '.' ) + 1); // 提取上傳文件后綴
$target_name = md5( uniqid() . $uploaded_name ) . '.' . $uploaded_ext; // 對上傳文件進行重命名
if( ( strtolower( $uploaded_ext ) == "jpg" || strtolower( $uploaded_ext ) == "jpeg" || strtolower( $uploaded_ext ) == "png" ))
{
move_uploaded_file($_FILES["file"]["tmp_name"],
$dir . $target_name); // 將臨時文件移動到指定目錄
$result = $dir . $target_name;
echo "Stored in: $result";
}
else{
echo "Invalid file";
}
誤區(qū)
有很多朋友喜歡在文件名中加%00進行截斷,筆者認為這種方式是不對的,為什么呢?比如攻擊者構(gòu)造文件名:admintony.php%00a.jpg,在提取后綴名的時候遇到%00則認為字符串結(jié)束了,那么他提取到的后綴名會是.php,.php后綴又不允許上傳所以上傳失敗了(這里有必要提一句,有人可能會說在一些情況下,%00截斷文件名可以成功,這種案例你試一下是不是任意文件上傳,西普的00截斷實驗就是一個任意文件上傳的上傳點,既然是任意文件上傳又何必用00截斷繞過呢?)
正確用法
那么00截斷應(yīng)該在什么時候使用呢?筆者認為,數(shù)據(jù)包中必須含有上傳后文件的目錄情況才可以用,比如數(shù)據(jù)包中存在path: uploads/,那么攻擊者可以通過修改path的值來構(gòu)造paylod: uploads/aa.php%00
為什么修改path才可以,因為程序中檢測的是文件的后綴名,如果后綴合法則拼接路徑和文件名,那么攻擊者修改了path以后的拼接結(jié)果為:uploads/aaa.php%00/2018051413370000.php,移動文件的時候會將文件保存為uploads/aaa.php,從而達到Getshell效果。
疑問:
為什么效果圖中打印的結(jié)果和預(yù)期不符,是因為echo的特殊性質(zhì),官方解釋的echo:
正是因為echo可以輸出多個字符串,一個字符串截斷后就變成了兩個字符串,所以會輸出后面的內(nèi)容。
%00和%00(urldecode)
在網(wǎng)上常見用Burp將數(shù)據(jù)包中的%00進行urldecode的操作,那為什么要進行這一個操作?網(wǎng)上也常見直接放入%00就可以截斷成功的案例,為什么呢?
%00(urldecode)
首先解釋為什么要進行urldecode操作呢?其原因在于上傳的表單中有一個enctype的屬性,并且需要enctype="multipart/form-data" (不對表單中數(shù)據(jù)進行編碼),path大多數(shù)都是存放在表單中的,因此需要在數(shù)據(jù)包中進行urldecode操作使%00變成字符串結(jié)束符號。
%00
那么為什么網(wǎng)上也有直接添加%00而不進行urldecode操作呢?因為path也可以存放在URL或者Cookie中,而在提交數(shù)據(jù)的時候,瀏覽器會對數(shù)據(jù)做一次urldecode的操作,而到服務(wù)端,會對數(shù)據(jù)進行一次urldecode的操作,因此如果path在非enctype=multipart/form-data的表單中或URL or Cookie中的時候,就可以直接寫%00不需要進行URLdecode操作,讓服務(wù)端對%00進行URL解碼即可。
總結(jié)
以上是生活随笔為你收集整理的00截断上传绕过_关于上传中的00截断分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: cesium 设置时间_Cesium应用
- 下一篇: swagger3 设置值可以为空_【Sw