我打算开始在空闲时间刷些题目并且在这里记录一些自己学习到的东西,因为题目不是一次就可以刷完的,所以我决定分板块记录
一、baby_web
打开题目我们可以发现初始页面应该是index.php,但是当我们GET传参的时候发现输入index.php它也会自动跳转到1.php,这下我们可以使用burp抓包试试
抓到返回包提示flag被藏起来了,我们翻翻数据包,发现flag被藏在head头里面
成功找到flag:
flag{very_baby_web}
二、Training-WWW-Robots
根据题目页面提示,这一题考查的还是robots.txt
访问该目录
得到flag:
cyberpeace{3e245c949f07b64119030d58bb64cd36}
有对robots协议不太清楚的小伙伴可以自行百度一下
三、PHP2
打开题目地址
查看源代码没有发现什么有用的东西,这个时候我们很容易想到目录爆破
这里经过查看其他文章(我这个小白的字典不够强大)发现爆破出来的目录是index.phps(赶紧把它添加到我的字典里面去),爆破可以使用的工具有很多,御剑、dirsearch等等都可以
访问index.phps目录我们找到了源代码
<?php
if("admin"===$_GET[id]) {
echo("<p>not allowed!</p>");
exit();
}
$_GET[id] = urldecode($_GET[id]);
if($_GET[id] == "admin")
{
echo "<p>Access granted!</p>";
echo "<p>Key: xxxxxxx </p>";
}
?>
审计一下:
很明显第一句要使语句里面的条件为假
第二句里面urldecode函数
这是个解码函数,注意我们在传参的时候实际上计算机会自动编码一次,然后自动解码一次,执行这个函数后就解码了两次,所以我们要对传参进行两次URL编码,我们可以使用burp自带的编解码工具或者使用在线编解码工具
这里我们要了解===和==这两个符号的区别,我在网上找了一下,可以看看这篇文章
PHP中==和===的区别在哪?_LMXQH的博客-CSDN博客_php和html的区别
大概意思是说==是对值的(同类型)比较,PHP中会将非数字转换成0进行比较,但是JavaScript却不会,===是对值和类型的比较中,相对于==更为严格,比如"o"==0,这里判断就是真,但是如果是"o"===0,这里判断就是假
基于这个我们就可以将admin或者只对a(其中一两个字母)进行两次编码
?id=%25%36%31dmin
这样第一比较的就是:
"admin"==="%61dmin"
第一句不成立
然后第二句
"admin"=="admin"
这样就可以顺利得到flag,注意是要在php不是phps里面传参
cyberpeace{e1584aebef6cd8388353b2cfeeb83059}