[SWPUCTF 2021 新生赛]jicao

1
2
3
category: web
tools:
about: 代码审计

题目要求审计:

1
2
3
4
5
6
7
8
<?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;}
?>

首先

⭐id是从post请求的id参数获取来的

⭐json是从get请求中的json参数获取来的,并且会经过json_decode后才传入json

看到if语句:

id==”wllmNB” 且 json[‘x’]==”wllm”则会打印flag

因此需要构造:

⭐1,post请求中的id==”wllmNB”

⭐2,get请求中的json[‘x’]==”wllm”,意为:json的一个键值x的值是wllm,其他键值不影响

如何做到呢?

1,可以利用hackbar:

get请求是用户发出的,因此将“,get请求中的json[‘x’]==”wllm“ 这个需求放到链接栏

1
2
根据json对象的字符串表示形式,应该传入  ?json={ "x": "wllm" }

将**post请求中的id==”wllmNB”**这个要求放到 post data 栏里

1
id=wllmNB

image-20230812234001786

tips:


JSON的值:
3.1 JSON的构成: ws 值
3.2值可以是对象、数组、数字、字符串或者三个字面值(false、null、true)中的一个。值中的字面值中的英文必须使用小写。
3.2.1对象由花括号括起来的逗号分割的成员构成,成员是字符串键和上文所述的值由逗号分割的键值对组成,如:

1
{"name": "John Doe", "age": 18, "address": {"country" : "china", "zip-code": "10000"}}

2,利用burp suite

image-20230813001512139

点击后会换到post请求

访问目标地址获取请求:image-20230813001757032

然后回去,复制上去

添加下面的值:image-20230813001939417