这是漏洞利用程序的链接:
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 address
和offset
,我们可以将该固件的数据添加到漏洞利用目标列表中,并通过发送来绕过身份验证正确的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 = 0xA44
,C = 0x1887C
和D = 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