基于insert update delete的注入

inset注入原理:
所谓inset注入就是指我们前端注册的信息会被后台通过insert操作插入到数据库里边去,若此时后台没有做出相应的处理就会构成insert注入。


insert注入方法:
insert用法例如:

insert into member(username,pw,sex.phonenum,email,address) values('xxxxx',111111,1,1,1,1,);

以上是Insert的完整语句,而我们输入的用户名对应的就是上面‘xxxxx’这里,这里我们可以使用 or 这个逻辑运算符,例如用下面的语句代替xxxxx:

x' or updatexml(1,concat(0x7e,version()),0) or '

第一个or的意思是对第一个插入的值进行运算,在运算的过程中就会执行updatexml()这个函数,所以我们就可以在这里插入我们构造的sql语句。
效果图:
在这里插入图片描述


update注入:
update注入和上面insert注入一样,只不过update在修改信息那里注入,而insert在注册那里注入,除此之外还有一个小问题,update 的修改信息那里需要全部填满,如果没有填满的话,他不会返回任何信息。
效果图:在这里插入图片描述


delete注入原理:
对于后台来说,delete就是把留言对应的 id 传到了后台,然后后台就把该 id 对应的数据给删除了,如图:
在这里插入图片描述
我删除的留言对应的 id 是59。
我们现在再来看看它后台的源码:
在这里插入图片描述
在这里我们可以看到,这个 id 是直接被拼接到query里面去的。

delete注入方法:
id 是一个数字,所以可以不用单引号进行闭合,我们可以这样写:
1 or updatexml(1,concat(0x7e,version()),1)
注意!!!在这里需要注意一个问题!,因为我们的参数是在URL里面提交的,所以我们需要将它转化成URL的形式,而我们的工具bp上面也有,如图:
在这里插入图片描述
最后得到的效果图:
在这里插入图片描述


以上是三种不同于select查询语句的sql注入方法,现在说一下它们之间的区别:
insert update 和delete这三个是一个操作,而select是一个查询语句,是可以直接查询到所需要的信息,而操作只能够通过报错返回信息的方式查询到我们所需的信息,还有一个不同点就是select是可以使用union的,因为它是一个完整的语句,而insert update和delete不行,这三个是一个操作。

猜你喜欢

转载自blog.csdn.net/qq_43814486/article/details/89035992