1.整形注入
例题:
点开网址后出现以上环境
按其要求输入结果如上图
尝试后发现
使用union联合查询一步步找到所需信息数据
解出flag
需要注意的是:
上述语句的结构,可以将information-schema.schemata/tables/columns看作所要查询的范围,而where后的语句作为上一步语句查询获取的信息又使得此步查询更加准确。
此时schema-name与table-schema呼应
table-name与table-name呼应
2.字符型注入
本质上与整形注入相同
区别:
select * from member where id=$id整数型sql语句
select * from member where id='$id' 字符型sql语句
与之前不同的是,$id 上多加了一个引号 ' ' ,因此,如过在向之前一样输入 1 or 1=1,后台就会变成:
select * from member where id='1 or 1=1'
很明显这样肯定会数据报错,因此如何过滤引号是关键 ,例如可以输入 ' or 1=1 # 其中,井号键表示注释一行:
select * from member where id=' ' or 1=1 # '
这样查询又为永真
例题:
基本操作相同但为了防止命令被当做字符串需对单引号的作用进行消除
3.报错注入
例题:
原理:在SQL注入攻击过程中,服务器开启了错误回显,页面会返回错误信息,利用报错函数获取数据库数据。
返回的错误回显中含有数据库信息
初次尝试,发现显示结果不全,推测此题对回显长度有限制
利用mid函数提取剩余flag
4.布尔盲注
布尔型盲注,页面不返回查询信息的数据,只能通过页面返回信息的真假条件判断是否存在注入。
例题:
题目链接:http://challenge-2a93a46eca0419e8.sandbox.ctfhub.com:10800
使用脚本
得到flag
5.时间盲注
注:
在SQL注入攻击过程中,服务器关闭了错误回显,单纯通过服务器返回内容的变化来判断是否存在SQL注入 。
可以用benchmark,sleep等造成延时效果的函数。
如果benkchmark和sleep关键字被过滤了,可以让两个非常大的数据表做笛卡尔积产生大量的计算从而产生时间延迟;
或者利用复杂的正则表达式去匹配一个超长字符串来产生时间延迟。
例题:
题目链接:http://challenge-38c5776b5c19cb38.sandbox.ctfhub.com:10800
利用脚本计算
可直接获取flag