一、加密注入
1.原理
前端提交的有些数据是加密之后,到了后台再解密,然后再进行数据库查询等相关操作的,而攻击者也可以将注入语句按照相同的加密手段,加密之后再进行注入,从而能够访问未授权的数据、篡改数据库内容等。(补:其实在正常情况下,加密数据应该是被解密后在安全、可控的环境下进行操作。但如果应用程序对加密数据的验证、解密过程存在缺陷,攻击者就可以将构造的恶意代码以相同加密形式发送,进而进行注入)
eg:在一个有缺陷的加密数据查询系统中,攻击者将包含SQL注入命令的加密数据发送,系统解密后直接用于数据库查询,就可能会导致数据泄露。
2.注入过程:
加密数据 ——(分析出其加密手段后)解密——加上payload(payload(有效载荷)是指攻击者精心构造的一段输入数据)后在以相同的方式加密——发送——服务端解密——执行相关命令
补:①常用加密手段为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的所有信息了!!!
而这个过程就是进行二次注入的过程!
以上为个人在学习时的总结,如有错误,欢迎大家前来评论指正哦!!!