加解密注入
即get或者post的参数采用了base64等加密方式将数据进行加密,在通过参数传递给服务器
即:如果想要对这个网站,再ID处进行注入,需要先编写sql注入语句,然后在进行base64编码
案例:sql-libs–21
为cookie注入
ookie注入的原理是:就是修改cookie的值进行注入
♦cookie注入其原理也和平时的注入一样,只不过注入参数换成了cookie
♦要进行cookie注入,我们首先就要修改cookie,这里就需要使用到Javascript语言了。另外cookie注入的形成有两个必须条件:
条件1是:程序对get和post方式提交的数据进行了过滤,但未对cookie提交的数据库进行过滤。
条件2是:在条件1的基础上还需要程序对提交数据获取方式是直接request(“xxx”)的方式,未指明使用request对象的具体方法进行获取,也就是说用request这个方法的时候获取的参数可以是是在URL后面的参数也可以是cookie里面的参数这里没有做筛选,之后的原理就像我们的sql注入一样了。
cookie注入原理详解(一)
cookie注入的三种方法(靶场实例绕过WAF)
将注入的sql语句经过base64加密之后放入cookie
其他操作与普通注入相同
**
二次注入
**
二次注入可以理解为,构造恶意数据存储在数据库后,恶意数据被读取并进入到了SQL查询语句所导致的注入。恶意数据插入到数据库时被处理的数据又被还原并存储在数据库中,当Web程序调用存储在数据库中的恶意数据并执行SQL查询时,就发生了SQL二次注入。
二次注入一般从源代码得知 手动 黑盒 工具等一般无法发现
二次注入可分为两步:
第一步:插入恶意数据
进行数据库插入数据时,对其中的特殊字符进行了转义处理,在写入数据库的时候又保留了原来的数据。
第二步:引用恶意数据
开发者默认存入数据库的数据都是安全的,在进行查询时,直接从数据库中取出恶意数据,没有进行进一步的检验处理。
利用注册用户等插入语句,将恶意代码插入数据库中,再执行查询等语句,将恶意代码与sql语句进行拼接执行,从而达到注入的目的。
案例:sqli-libs–24
思路
已知有一个用户admin,可以根据二次注入的思想,我们可以创建一个admin’#的用户,之后可以进行更改密码等操作,那原来的SQL语句可能为
update password=$new where username=$name and .....
将admin’#带进去
update password=$new where username=admin' and .....
这样就会将后面的都注释掉,而我们更改用户的密码也变成了更改了admin用户的密码
创建相似的user
修改密码后
创建的dhakkan’#用户没有改变密码 dhakkan用户修改了密码
查看php源码
$sql = "UPDATE users SET PASSWORD='$pass' where username='$username' and password='$curr_pass' ";
可以使用上一章的报错注入
进行update报错注入
如果存在命名长度限制
前端
可以自己修改
后端
无法破
*DNSlog带外注入*
解决盲注回显效率低的问题
(存在盲注无法回显的情况)
dnslog注入也可以称之为dns带外查询,是一种注入姿势,可以通过查询相应的dns解析记录,来获取我们想要的数据。
带外注入是为了解决一些注入没有回显,也不能进行时间盲注的情况。
通常用在哪些地方
1.SQL注入中的盲注
在sql注入时为布尔盲注、时间盲注,注入的效率低且线程高容易被waf拦截,又或者是目标站点没有回显
2.无回显的命令执行
我们在读取文件、执行命令注入等操作时无法明显的确认是否利用成功
3.无回显的SSRF
中转注入
如果,网站URL的注入点是经过编码的,不能直接结合sqlmap进行漏洞利用,所以本地搭建一个网站,写一个php脚本编码文件,就可以结合sqlmap工具进行测试。
因为,注入点经过复杂编码之后,就不能直接结合sqlmap进行漏洞攻击了。或者sqlmap自己编写tamper脚本进行攻击
<?php
$url='http://www.xxx.com/?id=';
$playload=base64_decode($_GET['x']);
$urls=$url.$playload;
file_get_contents($urls);
?>
(如果网站注入点为base64编码可以如此,若为其他,可以修改base64_decode)