其他注入手法 1

一、加密注入

1.原理

前端提交的有些数据是加密之后,到了后台再解密,然后再进行数据库查询等相关操作的,而攻击者也可以将注入语句按照相同的加密手段,加密之后再进行注入,从而能够访问未授权的数据、篡改数据库内容等。(补:其实在正常情况下,加密数据应该是被解密后在安全、可控的环境下进行操作。但如果应用程序对加密数据的验证、解密过程存在缺陷,攻击者就可以将构造的恶意代码以相同加密形式发送,进而进行注入)

eg:在一个有缺陷的加密数据查询系统中,攻击者将包含SQL注入命令的加密数据发送,系统解密后直接用于数据库查询,就可能会导致数据泄露。

2.注入过程:

加密数据 ——(分析出其加密手段后)解密——加上payloadpayload(有效载荷)是指攻击者精心构造的一段输入数据)后在以相同的方式加密——发送——服务端解密——执行相关命令

:①常用加密手段为Base编码(一般以两个=结尾的是base64编码)

②若有那种乱码,不知道其加密手段,可以到前端从其js代码中分析加密手段

在加密注入中,js(JavaScript)代码通常用于对注入语句进行加密处理。

比如,在某些Web应用中,前端可能使用js的加密库对用户输入的数据进行加密后再发送到后端。攻击者如果发现了这种加密机制,就会尝试编写js代码来模仿加密过程,将恶意的SQL注入语句加密成与正常数据加密后相似的形式,以此绕过一些安全检测机制,达到注入攻击的效果。

3.实例:

因为加密注入没有适当的靶场进行练习,在这里以搜狐视频为例简述其注入过程

二、堆叠注入

1.原理:

堆叠注入指的是一堆sql语句(多条)一起执行。

在mysql中,主要是命令行中,每一条语句结束加分号(;)表示语句结束。如果我们在结束一个sql语句后继续构造下一条语句,多条语句可以一起使用,去数据库里执行相应的命令,这个就叫做堆叠注入。

其与联合查询区别:
union或者union all执行的语句类型是有限的,可以用来执行查询语句

而堆叠注入可以执行的是任意的语句。
 

2.实例:

以pikachu靶场为例,在bp上抓包进行

在这里以数字型注入(id=1)为例

这可能受到API(函数)或者数据库引擎不支持的限制,进而导致不能进行堆叠注入

但有些是存在堆叠注入的风险的,可以到数据库中编写一句查询语句后,在;后面再添加一个查询语句,观察其是否能执行来判断是否进行了堆叠注入。

实际情况中,堆叠注入并不是每一个环境下都可以执行,如PHP为了防止注入,往往调用数据库的函数是mysqli_query函数,其只能执行一条语句,分号后面的内容将不会被执行,所以说堆叠注入的使用条件十分有限,一旦能够被使用,将对数据安全造成巨大威胁。

eg:

mysql中有些函数(API)是支持堆叠注入的

sqlserver的函数(API)都支持堆叠注入,

oracle的函数(API)都不支持堆叠注入。

3.危害:

eg:可以任意使用修改删除语句,删除数据库、修改数据库、添加数据库用户。

三、二次注入

1.原理:

  第一次进行数据库插入数据的时候,使用了addslashes或者是借助get_magic_quotes_gpc对其中的特殊字符(如单引号等)进行了转义,但在写入数据库的时候还是保留了原来的数据(比如单引号数据,虽然直接注入时失效了,但是数据写入到了数据库,数据库中存的这个数据本身还是脏数据。)在将数据存入到数据库中之后,我们大多会认为数据库中的数据是安全可信的,在下一次进行需要进行查询的时候,直接从数据库中取出了脏数据,没有进行进一步的检验和处理,这样就会造成SQL的二次注入。

eg:在第一次插入数据的时候,数据中带有单引号,直接插入到了数据库中;然后在下一次使用或拼凑的过程中,就形成了二次注入。

2.注入过程:
 

第一步:首次注入(插入恶意数据)
在首次输入数据时,用户输入的数据被存储在数据库中。此时,应用程序可能对用户输入进行了转义或过滤处理,使得首次输入的数据不会立即导致安全问题。

eg:用户注册时输入的用户名和密码被存储到数据库中。
第二步:二次注入(触发并引用恶意数据)
我们一般默认存入数据库的数据都是安全可信的, 当这些已经存储在数据库中的数据在后续操作中被使用,并且没有被再次正确地处理(转义或过滤)时,就可能导致二次注入。

3.实例:

由于我的电脑上并没有相关靶场可以进行二次注入的演示,在这里我以所听课对二次注入的演示为例进行相关说明:

 当我们在进行用户注册时

新注册的用户名为admin'#,密码为123                                                            

然后我们到数据库中查看刚注册的用户数据是否被存入数据库中

现在我们来进行第二步

修改用户admin'#的密码

但我们再次查看数据库中用户的信息时,却发现我们修改的并不是用户admin'#的密码

我们修改了用户admin的密码,然后我们就可以查看并获取用户admin的所有信息了!!!

而这个过程就是进行二次注入的过程!

以上为个人在学习时的总结,如有错误,欢迎大家前来评论指正哦!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值