盲注基础进阶

sql注入的基础方法参考:https://zzreno.github.io/2019/05/14/由sqli-labsLess-5学习各种基础盲注技巧/(https://blog.csdn.net/zz_Caleb/article/details/86813314)
仍以sqli-labs为例,在基础之上对sql注入进行一些技巧介绍,但是基本的盲注方法还是那几种类型,只不过针对有简单防御性的网站进行了一些不一样的payload变换,以便在基础之上提升对sql注入的认识和经验。

一、语句闭合注入

这个技巧在php语句绕过中也很有。
less23,后台查询语句如下:

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

和基础的注入一样是简单的查询语句,区别在于过滤了注释符号#和–+, 那么就用到闭合技巧了。
构造payload:

-1' union select 1,@@datadir,'3

id的引号被闭合,@@datadir的地方就是我们进行查询的地方,下面就可以和基础的注入一样进行了。

二、语句嵌套

还以less23为例吧,虽然不用嵌套也能做出来。
嵌套就是在sql语句中加上sql语句,这里就是把@@datadir这换成sql注入语句。例如:

-1' union select 1,(select group_concat(table_name) from information_schema.tables where table_schema=database()),'3

三、二次排序注入的存储型注入

通俗来说就是可以先把一些信息利用后台数据库语句以注入的方式存储到数据库中,然后再对其进行调用,有时候可以起到很大的作用。
以less24为例,这是一个我们可以进行注册,并且登陆后可以修改密码的环境。
修改密码时的语句为:

 UPDATE users SET passwd="New_Pass" WHERE username ='name' and password='passwd'

首先我们注册一个用户名为admin’#的账号,密码设为123456吧,然后登陆上去。
在这里插入图片描述这里我们就可以改密码了,根据上面的update语句可以知道,在admin’#的账号下改密码,相当于:

UPDATE users SET passwd="New_Pass" WHERE username ='admin'#' and password=''

相当于绕过了admin的原密码输入直接修改了admin的密码,然后就可以用修改得到的admin的密码直接登陆了:
在这里插入图片描述当然,这个例子也用到了语句闭合的技巧。

四、常用变形方法

(1)大小写变换

如or、and、select、union、from等关键词的大小写变换

(2)双写变换。

常用的关键字被过滤时,使用双写绕过,如ununionion、selselectect,oorr等。

(3)添加注释符/**/。

假如有一个登陆界面,username中过滤了()括号,password中过滤了注入关键字updatexml、extractvalue等,而注入点在username中,可以结合注释符进行注入:

1' and extractvalue/*&password=*/(1,concat(0x7e,(database()),0x7e)) or '1

这样就能注释掉password=成功进行注入了。

(4)and、or和&&、||的转换使用。

当and和or被过滤时,可以用&&和||进行替换。以less25为例,payload为:

id=1' || extractvalue(1,concat(0x7e,database()))--+

注入方式就看环境漏洞了,或许报错不能用,那就找延时注入、联合注入、bool注入了。

这些用法都是最基本的,可以结合实际环境进行灵巧变换,或者是针对页面反馈和所学知识经验制定解决方案。

(5)payload编码

对payload进行hex或urlencode编码再使用。

(6)空格的过滤

空格过滤可以用/**/、++、%a0(空格)、%0b(Tab键-垂直)、%09(Tab键-水平)等进行绕过。
当然可能目标环境有很多的过滤,这还需要我们对其进行测试之后再指定出相应的注入方案

五、宽字节注入

宽字节注入主要针对服务器对 ’ 和 \ 的过滤,在注入时很多时候需要在id的值后面加上单引号,一般的过滤就是后台把提交的单引号前面加上 \ 进行转义:\’,从而对注入进行防御。当然也有双引号的情况,方法是一样的。

宽字节注入原理:MySQL使用GBK编码时,会把两个字符看做一个汉字,例如%aa%5c 就是一个汉字(前一个 ascii 码大于 128 才能到汉字的范围)。

所以该注入的主要作用就是除掉过滤单引号的 \ ,一般会有两种方法:

1、%df 吃掉
具体的原因是 urlencode(\’) = %5c%27,我们在%5c%27 前面添加%df,形成%df%5c%27,而上面提到的 mysql 在 GBK 编码方式的时候会将两个字节当做一个汉字,此事%df%5c 就是一个汉字,%27 则作为一个单独的符号在外面,同时也就达到了我们的目的。

2、将 \’ 中的 \ 过滤掉
例如可以构造 %**%5c%5c%27 的情况,后面的%5c 会被前面的%5c给注释掉。这也是 bypass 的一种方法。

六、服务器(两层)架构

两层架构是Tomcat+Apache,利用HPP(HTTP Parameter Pollution)–http 参数污染攻击。
在这里插入图片描述传参会经过两个服务器的解析和过滤,由于先通过Tomcat服务器,所以网页应该是jsp页面,Tomcat服务器也就充当了一个WAF的作用,但是在解析参数上是有漏洞的,例如index.jsp?id=1&id=2,Tomcat解析的是第一个参数id=1,Apache解析的是第二个参数id=2,所以我们可以直接在第二个参数上按照php的常规方法进行注入。这就是http 参数污染攻击的一个应用,HPP 可对服务器和客户端都能够造成一定的威胁。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值