alxc tool 报错数组超出了界限_代码审计之报错信息泄露与字符串截断
機器在語言編碼轉換的時候,經常會出現各種各樣的異常,這些神奇的字符串就有可能組合成一堆亂碼出來,也有可能直接把程序搞崩潰掉,不過總有那么一些字符,可以幫助我們在利用漏洞的時候變得更簡單一些,下面我們就來看看是哪些函數這么調皮。
- 字符處理函數報錯信息泄露
頁面的報錯信息通常能泄露文件絕對路徑、代碼、變量以及函數等信息,頁面報錯有很多情況,比如參數少了或者多了、參數類型不對、數組下標越界、頁面超時,等,
不過并不是所有情況下頁面都會出現錯誤信息,要顯示錯誤信息需要打開在PHP配置文件php.ini中設置display_errors=on或者在代碼中加入error_reporting()函數,error_reporting()函數有幾個選項來配置顯示錯誤的等級,列表如下:
E_WARNING其中最常用的是E_ALL、E_WARNING、E_NOTICE
E_ALL代表提示所有問題,E_WARNING代表顯示錯誤信息,E_NOTICE則是顯示基礎提示信息。
大多數錯誤提示都會顯示文件路徑,在滲透測試中,經常遇到webshell的場景要用到文件絕對路徑,所以這個利用頁面報錯來獲取Web路徑的方式也比較實在了,用戶提交上去的數據后端大多是以字符串方式處理,所以利用字符串處理函數報錯成了必不可少的方法,對于利用參數來報錯的方式,給函數傳入不同類型的變量是最實用的方式。
大多數程序會使用trim()函數對用戶名等值去掉兩邊的空格,這時候如果我們傳入的用戶名參數是一個數組,則程序就會報錯,測試代碼如下:
<?當我們請求/1.php?a[]=test時,程序報錯如下,如圖所示
類似的函數還有很多很多,比如
addcslashes- 字符串截斷
如果你以前做過滲透測試,那字符串截斷應該是我們比較熟悉的一個利用方式,在利用文件上傳漏洞的時候,經常會用到抓包,然后修改POST文件上傳數據包里面的文件,在文件名里面加一個%00,用來繞過文件擴展名的檢查,又能把腳本文件寫入到服務器中,下面我們就來了解下其中的原理吧。
%00空字符截斷
字符串截斷被利用最多的是在文件操作上面,通常用來利用文件包含漏洞和文件上傳漏洞,%00即NULL是會被GPC和addslashes()函數過濾掉,所以要想用%00截斷需要GPC關閉以及不被addslashes()函數過濾,另外在PHP5.3之后的版本全面修復了文件名%00截斷的問題,這個版本以后也是不能用這種方式截斷。
為什么PHP在文件操作的時候用%00會截斷字符?
PHP基于C語言開發,%00在URL解碼后為0,0在C語言中是字符串結束符,遇到0的時候以為到了字符串結尾,不再讀取后面的字符串,自然而然的就理解成了截斷。
做一個簡單的測試,測試代碼(1.php)
<?在同目錄下面新建文件2.txt,內容為輸出phpinfo信息代碼,當我們請求
/實際上包含了2.txt這個文件,正常執行phpinfo代碼。
- iconv函數字符編碼轉換截斷
iconv()函數用來做字符編碼轉換,比如從UTF-8轉換到GBK,字符集的編碼轉換總會存在一定的差異性,導致部分編碼不能被成功轉換,也就是出現常說的亂碼。
在使用iconv()函數轉碼的時候,當遇到不能處理的字符串則后續字符串會不被處理。
我們來做一個簡單的測試,測試代碼如下:
<?我們執行這段代碼的行結果如圖所示。
可以看到第一次輸出$a變量,1和2都被正常輸出,當使用iconv()函數轉換編碼后,從chr(130)字符開始之后的字符串都沒有輸出,已經被成功截斷。經過筆者fuzz測試,當我們文件名中有chr(128)到chr(255)之間都可以截斷字符。
- 建站之星模糊測試實戰之任意文件上傳漏洞
漏洞發生在/module/mod_tool.php文件第89行起,img_create()函數,代碼如下:
public這是一個文件上傳的代碼,其中此漏洞的關鍵代碼在:
if在這里調用_savelinkimg()函數保存文件,跟進該函數,函數代碼如下:
private代碼中:
$struct_file對文件名進行轉碼,之后:
move_uploaded_file(寫入文件,這里就出現了我們上面說到的編碼轉換,最終導致可以上傳任意文件。
總結
以上是生活随笔為你收集整理的alxc tool 报错数组超出了界限_代码审计之报错信息泄露与字符串截断的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux人才招聘(linux人才)
- 下一篇: 什么时候会是用treeset?_flex