二月份的比赛,前几天做ezphp的时候发现有其他web的题目,索性全都复现一下,有些是之前buu做过了
docker环境:https://github.com/BjdsecCA/BJDCTF2020_January
ezphp
写在csdn上了,传送
easy_md5
打开靶机只有一个提交框
输啥都没有反应,抓了个包,返回头里看到hint
考点:mysql特性,MD5函数特殊字符串,php强弱类型
php中MD5函数的处理方式如下
由于会返回原始二进制格式,我们来看看ffifdyop
字符串的结果
生成了’or’6以及一些不可见字符,那么再结合hint,他本来的语句是select * from 'admin' where password='传入处理后的值'
当我们传入ffifdyop
之后,就会变成select * from 'admin' where password=''or'6xxxxxxx'
而在mysql中,判断条件时,以数字为开头的字符串会被当做是整型,均会返回1,也就是true
那么password的or判断就接收true并绕过了这个语句。
传入之后跳转到了levels91.php,源码给出了php代码
1 |
|
一个简单的弱类型,可以利用科学计数法特性提交两个md5后以0e开头的字符串,或者直接变为数组两个NULL相等绕过。
传入之后又跳转到levell14.php,强类型碰撞
1 |
|
传入两个md5后值相等的字符串或一样用数组即可。
mark loves cat
csdn上写过:传送
easy_search
打开靶机一个登录框
请求index.php.swp得源码
1 |
|
可以看到成功登录的关键,$admin == substr(md5($_POST['password']),0,6)
,脚本爆破即可
1 | import hashlib |
跑出来结果是202066,登录看看,headers里返回了url
访问之后发现会回显username的内容
考点:ssi代码执行注入
ssi是服务器端包含的意思,就是在html中,可以通过注释行调用的命令或指针,即允许通过在HTML页面注入脚本或远程执行任意代码。
在这里, shtml文件可以执行 bash 命令,构造<!--#exec Cmd="ls"-->
即可命令执行,最后在ls ../找到flag文件
直接cat读取即可
the mystery of ip
打开靶机flag.php会显示出ip,抓包观察到xff头可以控制
考点:smarty模板注入
构造4
会直接得到4
猜测为模板注入,尝试读取配置文件构造发现是smarty模板。
1 | {{system('ls')}}或者{if system('ls')}{/if} |
都可以执行命令,最后在根目录下找到flag
Cookie is so stable
打开靶机在flag.php有个提交框会把输入内容输出到网页上
构造4发现还会返回计算结果4
考点:Twig模板注入
发现在cookie处
user会把输入的内容存进去,urldecode(%7B%7B2%2B2%7D%7D)=4
,首先了解一下使用的是什么模板,在csdn师傅的一篇文章找到流程图
输入49成功回显,但Jinja2是基于python的模板引擎,那么只能是Twig了,百度一下Twig的payload
1 | {{_self.env.registerUndefinedFilterCallback("exec")}}{{_self.env.getFilter("cat /flag")}} |
由于提交之后cookie会url编码处理,所以提交之后直接把cookie改回来即可
ZJCTF,不过如此
之前写在csdn上,传送