WEB 漏洞-二次,加解密,DNS, 堆叠等注入
前言
加解密,二次,DNSlog 注入,堆叠查询注入
注入原理,演示案例,实际应用(中转注入)
演示案例
sqlilabs-less21-cookie&加解密注入(实际案例)
-
为什么要加密进行注入?
答:代码中对cookee进行base64_decode解码,解码之后带入数据库中。所以我们在注入语句要按照它的加密方式进行加密,然后再提交。
-
进行抓包,我们可以看到数据包中uname的值是被加密的
-
把%3D改成=号,Decode as base64,利用编码插件得出结果。
-
注入类型为cookie,我们先构造好注入代码admin’ and 1=1,再进行加密后进行注入操作
-
发现没有回显,我们在这里使用上节课的报错注入方式,我们先将对应注入语句进行base64加密,接着进行注入(这里以获取数据库版本号进行演示,其他信息的获取是类似的)
sqlilabs-less24-post 登陆框&二次注入(实际案例)
-
与之前注入的区别:
- 无法通过扫描工具或者代码自己手工测试出来的,二次注入一般在审计代码过程中发现的!
- 从前端或者黑盒测试无法看到
-
二次注入原理,主要分为两步:
-
第一步:插入恶意数据
第一次进行数据库插入数据的时候,仅仅对其中的特殊字符进行了转义,在写入数据库的时候还是保留了原来的数据,但是数据本身包含恶意内容。
-
第二步:引用恶意数据
在将数据存入到了数据库中之后,开发者就认为数据是可信的。在下一次需要进行查询的时候,直接从数据库中取出了恶意数据,没有进行进一步的检验和处理,这样就会造成SQL的二次注入。
-
-
演示过程:
-
首先进行用户的注册(插入恶意数据)
-
查看数据库,注册成功!
-
成功登录进去,这时候要求我们进行密码的修改,在这里我们将密码修改成xxxxxx(引用恶意数据)
-
成功修改,我们再次查看数据库,发现被改密码的是dhakkan,二次注入到此成功!
-
我们对源码再次进行研究,来进一步明白二次注入的思路所在
-
小知识点:如果账号密码长度被限制了,应该如何处理?
- 如果在前端有限制,我们可以在前端修改代码(按f12进行size值修改即可)
- 如果在后端有限制,数据库里面的数据刚开始就设定长度的情况下,我们是无法修改其长度的。
-
sqlilabs-less9-load_file&dnslog 带外注入(实际案例)
-
条件:高权限,文件读取操作
-
解决了盲注不能回显数据,效率低的问题
-
原理介绍:
-
通过这个登录注册网站获取到对应 Identifier和API Token
-
进行对应语句的输入,在这里我以获取版本为例子
-
在对应网站,我们就可以看到版本信息
-
-
工具使用
-
在这个网站中下载压缩包,解压在python2文件中
-
根据github上的要求对配置文件进行修改,打开配置文件config.py修改
-
创建一个bat文件(内容为:cmd.exe),双击打开后进入命令行,输入命令 python dnslogSql.py 启动
-
接着对应的规则进行注入即可
Usage: dnslogSql.py [options] -u http://10.1.1.9/sqli-labs/Less-9/?id=1' and ({})--+ 如果没有单引号干扰,可以去掉id后面的分号 如过没有其他符号干扰,可以去掉后面的--+ Options: --version show program's version number and exit -h, --help show this help message and exit -n TASKNAME, --name=TASKNAME task name -t THREAD_COUNT, --thread=THREAD_COUNT thread_count -u URL, --url=URL target include injection -i INF, --inf=INF Testing target and Try to get information --dbs get database -D DB database name --tables get table -T TABLE table name --columns get column -C COLUMN column name --dump get data
-
-
Sqlmap Base64编码注入
-
使用工具中tamper目录下自带的插件,详情点击这个网站 https://www.bbsmax.com/A/A2dmVVQBze/
-
在没有插件和插件不能满足我们需求的时候,我们该怎么办?
-
我们可以进行二次开发,对语言没有限制,在这里我们使用php代码为例(file_get_contents详解),代码如下
//test.php <?php $url='http://xxxx/job_bystjb/yjs_byszjs.asp?id='; $payload=base64_encode($_GET['x']); echo $payload; $urls=$url.$payload; file_get_contents($urls); echo $urls; ?>
-
打开sqlmap执行这个语句:python sqlmap.py “http://127.0.0.1/test.php?x=” -v 3
-
-
堆叠查询注入
Stacked injections(堆叠注入)从名词的含义就可以看到应该是一堆 sql 语句(多条)一起执行。而在真实的运用中也是这样的, 我们知道在 mysql 中, 主要是命令行中, 每一条语句结尾加; 表示语句结束。这样我们就想到了是不是可以多句一起使用。这个叫做 stacked injection。
-
局限性:并不是每一个环境下都可以执行,可能受到API或者数据库引擎的不支持的限制,当然了权限不足也可以解释为什么攻击者无法修改数据或者调用一些数据。
-
作用:当我们注入的时候需要管理员的账号密码,而账号是加密的,我们无法对其进行加解密,这时候我们就可以使用堆叠注入进行插入数据,用户密码是我们自定义的,可以正常解密登录!
-
mysql命令行堆叠查询
-
案例演示(sqliabs Less-38)
-
我们要输入的注入语句为
http://127.0.0.1/sqlilabs/Less-38/?id=1';insert into users(id,username,password) values ('38','less38','hello')--+
-
我们进行注入后网页返回如下
-
再次查看数据库,发现增加一条记录,这也是我们注入的语句
-
涉及资源
http://ceye.io/
https://github.com/ADOOO/DnslogSqlinj
最后感谢小迪师傅的视频!!
笔记来源视频:点击这里