标签:SWPUCTF int 赛题 json 2021 0e 传入 id md5
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
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。