关于insert/update/delete:
Insert:一般在创建和注册页面
Update:一般在修改页面(修改个人信息)
Delete:一般在删除操作(删除消息,留言等)
基于insert/update的SQL注入和select的闭合方式不太一样,我们先分析源码这里以insert为例:insert into 表名 (字段一,字段二) values (值一,值二);为了方便演示,我们以ID表中id字段和name字段插入1,qwe举例:insert into ID (id,name) value (1,qwe)。
基于delete的SQL注入和select的闭合方式一样。
在这类SQL注入时要在value中构造闭合我们以获取当前数据库为例(database())
在注入时我们并不清楚我们的注入点是哪里,类型是什么(int/string)这时就有2中可能,我们以id字段为注入点为例,
①类型为int
insert into ID (id,name) value (1 or 注入句 or,qwe)
==》1 or updatexml(1,concat(‘!’,database()),0) or
②类型为string
insert into ID (id,name) value (‘1’ or 注入句 or‘’,qwe)
==》1’ or updatexml(1,concat(‘!’,database()),0) or’
update,delete和insert语法一样,构造闭合的方法也一样都是在value中构造闭合,这里不在详细介绍
Pikachu靶场:
Insert注入
我们进入靶场点击注册
填入我们构造好的语句,我们先试试int型(1 or updatexml(1,concat(‘!’,database()),0) or)
提示我们注册成功,说明我们的SQL语句并没有当作代码执行,我们再试试string型(1’ or updatexml(1,concat(‘!’,database()),0) or’)
可以看到成功的把当前数据库名称返回到了前端
Update注入
我们先注册一个账号,然后登录进去
我们点击修改信息
看到提交框,我们还是先尝试int型,在尝试string(这里不在演示,我们直接来看string型)
Delete型的
我们先随便提交
可以看到在外面提交的留言下面都出现了删除按钮,但是并没有关于删除操作的输入框,这时候我们就要在burp中抓包修改参数了,我们先抓包
我们发现了传参我们对传参点进行注入(int型 1 or updatexml(1,concat('!',database()),0)),但是这里要注意,我们相当于是直接插入在url栏里的,所以要对符号进行url编码
可以看到成功的把当前数据库名称返回到了前端