0x00前言
這個題是sql注入與命令執行相結合的一個題,思路有兩個:
一、:sql注入登錄web系統,命令執行反彈公網IP監聽端口(需要vps),此種方法詳見鏈接:http://www.bugku.com/thread-80-1-1.html
一般人沒有vps,因此這種方法比較小眾,我做的時候卡在這兒沒辦法,甚至一度買了體驗版vps,后來做夢夢到了第二種思路
0x01正文
首先我們拿到題目http://118.89.219.210:49165/login.php,頁面什么也沒有,目錄掃描了也沒有東西,看來是要注入登錄,一般注入都會用burp->repeater測試,比較方便,這就看到服務器的返回報文有一段base64解密的字符串

JHNxbD0iU0VMRUNUIHVzZXJuYW1lLHBhc3N3b3JkIEZST00gYWRtaW4gV0hFUkUgdXNlcm5hbWU9JyIuJHVzZXJuYW1lLiInIjsKaWYgKCFlbXB0eSgkcm93KSAmJiAkcm93WydwYXNzd29yZCddPT09bWQ1KCRwYXNzd29yZCkpewp9
解碼之后發現是登錄頁面的一小段源碼,通過分析源碼中數據庫的處理流程發現可以通過輸入不存在用戶,用union select 構造出指定密碼的md5值,從而登錄成功,payload大概就是這樣username=adminawevcq3vq3rv' union select 1,'25d55ad283aa400af464c76d713c07ad'%23&password=12345678
至此,第一步就完成了,此時進入進程監控系統:

這里就沒有任何提示信息了,在輸入框輸入以下字符串實驗:
123
123;ls
123;cat index.php
發現除了進程信息之外其他的都沒有回顯,不知道是不是有過濾,又更換命令的分解符號為|,&,&&均沒有反應,這樣存在兩種可能,命令執行了,輸出過濾了,或者是命令被過濾了。
基於盲注原理測試123;sleep 5發現返回延遲將近5秒,看來是輸出過濾,命令可以執行,如果其他的shell命令沒有被過濾,那么此處就相當於getshell,可以執行更多操作;
我們需要回顯,不考慮反向鏈接的情況,借鑒sql盲注的原理,進行基於時間的命令行盲注,采用bash命令,通過對比字符串中一個一個的字符與頁面延遲來確定我們需要的內容,關鍵的注入語句:c=123;a=`ls`;b='a';if [ ${a:0:1} == $b ];then sleep 2;fi
注釋:如果ls結果中的第一個字符為a,頁面返回延遲兩秒,利用這個思路,首先確定當面目錄#ls的文件情況如下(這是我猜解一半的截圖,腳本運行完自然就有了整個目錄結構,存放flag的文件名是fLag_********.txt):

然后進一步cat flag******.txt來獲取最終的flag,放上猜解flag文件內容一半的截圖:

0x02結語
這個方法應該對每個人都適用,不會出現硬件障礙。我是個懶人,沒有排版,大家看着不清楚的請留言哈哈!!!
