成理信安协会第一届信安大挑战WEB题千反田很好奇WP
Posted riv3r1and
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了成理信安协会第一届信安大挑战WEB题千反田很好奇WP相关的知识,希望对你有一定的参考价值。
就是试了个小坏嘛,不要打我
Step1
打开题目,映入眼帘的是这个:
肯定知道题目是被藏起来了,所以正常情况下就开始翻cookie啦,用burp抓啦,之类的。但是我在index.php里设置了302跳转,跳转去了start.php,你怎么刷新start.php发现不了index.php的。我在源码里提示
其实就是提醒大家开着控制台查看网络或者开着burp等着抓包。很容易发现
这个被跳转的index。
Step2
那么如何访问被跳转的网页呢?burp修改就可以。
然后转到Render,查看加载出的页面。
明显是一道反序列化问题,其中考察了wakeup魔术方法绕过漏洞与一道代码审计题。
代码审计的逻辑基本是,不能输入数字,但是要和3722304989相等。这个数字肯定有特殊性,打开程序员模式计算器,输入这个数字,发现
十六进制下竟然是DDDDDDDD,没有一个数字。所以就是十六进制绕过。
给出反序列化脚本:
<?php
class CDUTSEC
{
public $chitanda;
public $eru;
}
$tr = new CDUTSEC();
$tr->chitanda="yesIamOKtoOVERCOMEallofthesepuzzles";
$tr->eru=0xDDDDDDDD;
echo urlencode(serialize($tr));
绕过wakeup的方法很简单,把序列化字符串对应成员个数的数字改大即可
改大。
拿到“真正”的主页
Step3
我承认我有点恶趣味了(滑稽
有点搞心态,实际上这里真的没有太恶心,burp抓下包
在响应头看到这一项(专门写的跟真的一样
简单base64,得到puzzle is in puzzle! 提示去访问puzzle.php
这里有个非预期,我本地不分大小写都可以访问,但部署之后必须为Puzzle.php首字母大写才行(悲 由于种种原因,没有再通知这个问题
第一个考点,看似简单,实际上下划线被我ban掉了。下划线怎么替代?很简单,在php中用.或者+都可。
之后我们得到源码。
<?php
$query = urldecode($_SERVER["QUERY_STRING"]);
$puzzle_start = $_GET[‘puzzle_start‘];
$a = $_GET[‘a‘];
$b = $_GET[‘b‘];
$c = $_GET[‘c‘];
$d = $_GET[‘d‘];
$file_name = $_GET[‘file_name‘];
$content = file_get_contents("php://input");
$filename = "upload/" . $file_name;
if (strpos($query, ‘_‘) !== False)
die("嘿嘿,‘_‘是不被允许的哟~");
if ($puzzle_start == 1) {
show_source(__FILE__);
}
if ($a != $b && md5($a) == md5($b)) {
echo "通过第一个难题!不错!";
if ($c !== $d && sha1($c) === sha1($d)) {
echo "通过第二个难题!继续!";
if (preg_match(‘/cat|system|passthru|exec|shell_exec|POST|<?ph.|.?>|flags/is‘, $content))
die("看我最后挡不挡的住你吧!");
if (file_put_contents($filename, $content))
die("上传成功!");
} else die("别气馁!");
} else die(" 再试试!");
?>
其实就是两个简单的绕过加上一个看着难实际上有很大空子的一句话写入。
第一个比较:两变量弱类型比较不等,md5编码后弱类型比较相等,利用php弱类型比较中0exxx在比较的时候会将其视作为科学计数法,所以无论0e后面是什么,0的多少次方还是0(0e后面的必须是数字)从而通过验证。(具体看协会这篇文章https://cdutsec.gitee.io/blog/2020/04/06/php-weakphp/
第二个比较:两变量强类型比较不等,md5编码后强类型比较相等。这里就不能用弱类型的骚操作绕了,这里传入数组导致函数报错来绕过。
最后一个看似丧心病狂的正则,其实就是想让你不要写入直接读取flag的php语句了。就算用"",${IFS}等绕过空格等命令检测,写入php中可发挥不了作用。这里涉及四个点:?>标签其实不需要也可以;<?php的替换;GET形式的一句话马;GET形式的一句话马不能用菜刀蚁剑连接。
另外,当需要post变量的时候,可能会发现网页说的哪里不对劲是我ban掉了右键和f12工作台。其实也没啥,就是用burp。
最终payload:
好了,万事俱备,最后get传参:
结束。
其实就是简单web知识点的缝合怪罢了。
以上是关于成理信安协会第一届信安大挑战WEB题千反田很好奇WP的主要内容,如果未能解决你的问题,请参考以下文章