BugkuCTF(代码审计) WriteUp

代码审计部分

extract变量覆盖

题目

<?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() 函数从数组中把变量导入到当前的符号表中。
对于数组中的每个元素,键名用于变量名,键值用于变量值。

在这里没有对重名情况进行处理,会导致变量覆盖,所以可以构造payload: ?shiyan=&flag=

strcmp比较字符串

题目

<?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函数比较字符串的本质是将两个变量转换为ascii,然后进行减法运算。在PHP5.3版本之后使用这个函数比较array跟sring会返回0。

所以可以构造payload: ?a[]=1

urldecode二次编码绕过

题目

<?php
if(eregi("hackerDJ",$_GET[id])) {
    echo("not allowed!");
    exit();
}
$_GET[id] = urldecode($_GET[id]);
if($_GET[id] == "hackerDJ"){
    echo "Access granted!";
    echo "flag";
}
?>

①int eregi(string pattern, string string, [array regs]);
eregi()函数在一个字符串搜索指定的模式的字符串,搜索不区分大小写。eregi()可以检查有效性字符串,如密码。如果匹配成功返回true,否则返回false。
eregi()函数漏洞:字符串对比解析,当ereg读取字符串string时%00后面的字符串不会被解析。
②urldecode()可构成二次编码漏洞

这里可以对hackerDJ进行二次编码,只选其中一个字母就行,可以构造:?id=hackerD%254A得flag

md5()函数

题目

<?php
error_reporting(0);
$flag = 'flag{test}';
if (isset($_GET['username']) and 
  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值