我正在研究漏洞利用一个多月了,现在我遇到了一个问题,无法继续进行下去。

这是漏洞利用程序的链接:

https://gist.github .com / doorbash / f454c698f192a0e5d1bf4da9c6869b67

https://www.exploit-db.com/exploits/39739

描述:

不幸饼干是一个严重的漏洞,它使入侵者可以远程控制Internet路由器并使用它攻击家庭和企业网络。在请求中添加了一些魔术cookie,您可以绕开任何身份验证,并从任何开放端口以admin身份浏览配置界面。通过将Cxxx=yyy cookie发送到路由器Web界面yyy将保存在内存地址xxx * 0x28 + Offset中。如果找到Authentication Enable/Disable boolean addressoffset,我们可以将该固件的数据添加到漏洞利用目标列表中,并通过发送来绕过身份验证正确的cookie。

我如何分析固件:

我首先分析的固件是TP-Link 8901G V3 3.0.1 Buil d 100901 Rel.23594。在此处下载并运行binwalk -e V3 3.0.1 Build 100901 Rel.23594,然后通过选择mipsb作为cpu体系结构并选择0x80020000作为基地址,使用IDA在提取的目录中打开最大的文件。

如果您搜索不需要使用Alt + T键的字符串您会在意识到li $ gp,YYYYY指令的代码的第一行找到sb XXXX($ gp)
。身份验证地址将通过添加XXXX和YYYYY来定位,在这种情况下为0x803E1829

现在我们必须发现Cookie: CNNNN=MMM;如何更改内存内容:您会发现以下内容:



转到红色突出显示的子过程。



现在将数字0x6b28视为A = 0x6B28

现在来回向上:



现在转到顶部子过程:


您会发现:



现在B = 0xA44C = 0x1887CD = 0x8041877C

MAGIC_NUMBER = 0x16B88(我不知道为什么,但是它能工作)

现在OFFSET = A - B + C + D - MAGIC_NUMBER = 0x80420554

现在打电话util.py中的info(calc(0x8041877C,0x1887c,0xa44,0x6B28,0x16b88),0x803E1829)info(0x80420554,0x803E1829)我附加的输出是,107367749,13,这是我们在漏洞利用程序中此固件所需的数据。

过程非常相似(并且在TP-Link中也不同,也更容易W8961ND V3 120830在这里下载



AuthenticationAddress = 0x803605B4
A = 0x6B28
B = 0x0 (move    $a0, $s1)
C = 0x17E38
D = 0x804234C8
MAGIC_NUMBER = 0x16B88
OFFSET = A-B+C+D-MAGIC_NUMBER = 0x8042B2A0


我们在util.py中称为info(0x8042B2A0,0x803605B4),输出为,107353414,36,该信号已在真实设备和可以工作。

问题是:TD_W961ND_V3_140305的问题是

在此处下载该固件具有“不需要”和“ soapacation”文本,但IDA找不到这些字符串的指向地址我找不到原因。
根据这里的修改和错误修复是:


添加安全机制。
已修复问题路由器的时间无法从PC成功同步。
被禁止从WAN访问固件升级页面。
解决了路由器无法上载rom-0(备份配置)的问题。
解决了登录界面无法在Chrome和Firefox中正确保存密码的问题
解决了设置虚拟服务器后无法使用“ IP:Port”访问CPE的问题。
禁止通过http:// wan / lan ip /或http访问设备: // wan / lan ip / xxx.htm。
解决了其他错误和问题。

我不确定安全机制(#1)是否是造成此问题的原因。

我还尝试使用binwalk熵比较100901、120830和140305:

binwalk -E -J 120830 140305 100901

100901:



120830:



140305:



我知道140305出了点问题(左侧的异常波形),但是没有发现任何发现。

更新1:这是我的IDA中的内存地址0x800D53BC的样子: br />

#1 楼

根据TP-LINK,不幸的cookie仅在固件版本TD-W8961ND_V3_150707中得到修复。因此,TD_W961ND_V3_140305也容易受到攻击。

由于它是二进制文件,因此您可能无法分析处理soapaction字符串的代码部分,但这是我在固件140305中发现的内容: br />

更新!

您可以在0x801a015a上找到“不需要”字符串。由于某些原因,它是mips16代码,仅在命令表中作为pswauthen命令处理程序被引用。因此,必须在处理程序的开头将代码表示形式更改为带有alt+g的mips16,然后按c



评论


请参阅问题中的更新1。谢谢。

–doorbash
16年5月4日在10:43

我不知道为什么在您的情况下IDA找不到ASCII,但是您可以使用“ a”(创建ASCII)创建字符串,也可以创建一个简单的脚本来完成此工作。

– ebux
16年5月4日在11:28

谢谢,“不需要”字符串呢?知道为什么没有指向地址吗?

–doorbash
16年5月4日在20:04

请参阅我的答案中的更新。

– ebux
16年5月24日在7:40

不幸的是,我看到了它无法做您在更新中所做的事情。 IDA 6.8仍然显示垃圾,但是做得很好,当我再次对其进行处理并设法做到这一点时,我将其设置为最佳答案,感谢您的宝贵时间。您获得了哪个版本的IDA?

–doorbash
16年5月24日在8:51