感谢学姐给我们这些小白推荐CSDN这个博客分享网站,更感谢她对我们说可以把自己的问题,想法都可以写上去,不一定非要是技术博客。虽然前两天把她取关了。
寂寥闪烁,时而晦暗。
已有许久没有写博客,而今再提笔已是一个从混沌意识走出但还未完全恢复朝气的颓废青年,做点小题感觉小有成就,回想前段时间的比赛自己做出了几道题暂时能给我一些鼓励。自己的代码审计一直是弱项,所以找了些时间专攻审计,在此写上在bugku上代码审计模块做题的心得,题解。
extract变量覆盖:
这道题上网查了查函数:
在使用extract之后可以直接使用变量,构造payload:?shiyan=&flag即可得到flag。
strcmp比较字符串
eregi函数遇到数组会报错,借此绕过此函数即可得到flag,
直接构造payload:?a[]=1
即可得到flag。
urldecode二次编码绕过
前几道题都很基础,这道题通过题目与代码可知需要对:hackDJ这串字符进行二次URL编码,
因为这道题本小白发现一个站:http://web.chacuo.net/charseturlencode
二次编码后构造payload:?id=%2568%2561%2563%256b%2565%2572%2544%254a
刚开始用的其他工具站,没有复杂类型URL编码,此题因为对字母加密,因此应用复杂类型编码。
md5()函数
整理下代码:
分析代码,又md5()函数无法处理数组,可直接构造payload:?username[]=1&password[]=2
数组返回NULL绕过
事实上这个我们之前已经用过两次了
遇到了ereg函数,此函数可用%00截断。
构造payload:?password[]=%00
弱类型整数大小比较绕过
审计代码可知,需要传入一个 password 的值 不是数字 又得大于 1336,==为弱类型比较。
当场构造payload:?password=1337!
sha()函数比较绕过
sha1()函数无法处理数组,直接构造如下payload:
?name[]=1&password[]=2
数组payload在bugku这几道题可真是通用。
md5加密相等绕过
审计代码:
两个md5加密相等的值为240610708和QNKCDZO,
这里需要将a赋值为240610708直接得到flag,
payload:?a=240610708
十六进制与数字比较
需要number==temp是才可以输出flag ,然后我们可以对password赋值,
根据题目提示,直接将password赋值为number的十六进制,(0x表示16进制)
payload:?password=0xdeadc0de
变量覆盖
???登不上去
ereg正则%00截断
这道题很有意思,思路我写在代码备注上:
代码如下:
<?php
$flag = "xxx";
if (isset ($_GET['password']))
{
if (ereg ("^[a-zA-Z0-9]+$", $_GET['password']) === FALSE)//此处可看出%00截断漏洞
{
echo '
You password must be alphanumeric
';
}
else if (strlen($_GET['password']) < 8 && $_GET['password'] > 9999999)//此处可用数组绕过,在PHP中数组永远比整数大
{
if (strpos ($_GET['password'], '-') !== FALSE) //strpos — 查找字符串首次出现的位置//strpos可用数组绕过,下一题会讲到。
{
die('Flag: ' . $flag);
}
else
{
echo('
- have not been found
');
}
}
else
{
echo '
Invalid password
';
}
}
?>
至此,我们分析代码构造payload:?password[]=1%00
strpos数组绕过
百度一下,strpos函数可用数组绕过,
此题中,ereg函数用%00截断,strpos数组绕过,
可得payload:?ctf[]=1%00
数字验证正则绕过
改天再看
简单的waf
???登不上去
做了这些题后,算是对代码审计的基础巩固了下,翻了翻自己写的wp,很潦草。
bugku许久不登录现在这个站已经卡的不得了了,但没办法,里面的题真的很不错。
以此姑且做一篇博客,已是黄昏,渴望一场雪。虽然现在不过是中原的十一月中旬。
接下来可能会较多的做题写一些wp,积累经验,真心真意带好下一届学弟学妹。