SWPUCTF 2021 新生赛 部分赛题复现
作者:互联网
jicao
这是一道php代码审计的题,比较简单,但也学到了一个json格式的知识,题目代码如下:
<?php
highlight_file('index.php');
include("flag.php");
$id=$_POST['id'];
$json=json_decode($_GET['json'],true);
if ($id=="wllmNB"&&$json['x']=="wllm")
{echo $flag;}
?>
分析源码可知,要求我们传入两个参数,一个用get方式传入json,一个用post方式传入id。传入id很简单,直接id=wllmNB就好了,下面我们介绍一下json和json_decode这个函数
我感觉json它的书写格式和python中的字典差不多,如json = '{"a":1,"b":2,"c":3,"d":4,"e":5}',它是一种类似于对应的关系
<?php
$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
var_dump(json_decode($json));
var_dump(json_decode($json, true));
?>
以上程序会运行出:
object(stdClass)#1 (5) {
["a"] => int(1)
["b"] => int(2)
["c"] => int(3)
["d"] => int(4)
["e"] => int(5)
}
array(5) {
["a"] => int(1)
["b"] => int(2)
["c"] => int(3)
["d"] => int(4)
["e"] => int(5)
}
由此可以猜测,题目中的
$json=json_decode($_GET['json'],true);
if ($id=="wllmNB"&&$json['x']=="wllm")
这两行的意思就是传入的json的值是x:wllm,由此我们得到payload如下:
执行即得到flag:
easy_md5
<?php
highlight_file(__FILE__);
include 'flag2.php';
if (isset($_GET['name']) && isset($_POST['password'])){
$name = $_GET['name'];
$password = $_POST['password'];
if ($name != $password && md5($name) == md5($password)){
echo $flag;
}
else {
echo "wrong!";
}
}
else {
echo 'wrong!';
}
?>
这是一道md5弱类型比较,有两种解决办法
md5弱类型比较
0e绕过
弱比较会把0exxxx当做科学计数法,不管后面的值为任何东西,0的任何次幂都为0
只要两个变量经过md5加密之后前两位都变成0e就可以成功绕过,以下一些字符串的md5值前两位是0e
QNKCDZO
240610708
s878926199a
s155964671a
s21587387a
可以用前两个,payload如下:
数组绕过
md5()函数计算的是一个字符串的哈希值,对于数组则返回false
所以我们也可以这样传:
两种方法都可以得到flag
标签:SWPUCTF,int,赛题,json,2021,0e,传入,id,md5 来源: https://www.cnblogs.com/Athena-ydy/p/16417563.html