记一次漏洞挖掘「网络安全」

2023-06-02 0 590

安全可靠漏洞重要信息

从CVE-2019-10999查阅该CVE的此基础重要信息获知,这是两个栈外溢安全可靠漏洞,反击者在已登入的情况下能透过向wireless.htm推送两个INS13ZD的WEPEncryption模块引致栈外溢,从而继续执行任一指示反击. 那时他们借助Shambles Desktop辅助工具确认那个安全可靠漏洞的边线因此继续执行一场栈外溢反击。从Dlink官方网站查阅存有那个安全可靠漏洞的电子设备和版重要信息。他们优先选择DCS-932L的v2.17.01版。浏览相关联BIOS。

Cadours操作过程

具体来说用Shambles Desktop关上BIOS,借助Shambles Desktop的新浪网解包机能将BIOS解包并抽出磁盘,这种BIOS包的文本将会用建模的二百一十三树方式(如图1右图)展现出,方便快捷预测。与此同时Shambles Cloud会对解包重要信息先期预测,确认电子设备,里韦县,晶片构架,电子设备类别等重要信息。如下表所示图左侧的Firmware Info的Hardware Information右图,该电子设备是D-Link的MIPS晶片构架的PDP探头电子设备。

1. 动态预测

记一次漏洞挖掘「网络安全」

具体来说他们透过Shambles Desktop对该BIOS展开动态标识符预测,确认该安全可靠漏洞的标识符边线。

【逐一协助安全可靠自学,大部份

①重要信息安全可靠自学走线

②20份渗入试验图书

③安全可靠攻守357页讲义

④50份安全可靠攻守复试手册

⑤安全可靠蓝队渗入软件包

⑥重要信息安全可靠必不可少书刊

⑦100个安全可靠漏洞实战案例

⑧安全可靠大厂内部视频资源

CVE安全可靠漏洞重要信息中提到该安全可靠漏洞存有于电子设备的web服务器可继续执行文件alphapd中,反击者在请求wireless.htm文件时,在请求模块WEPEncryption当中构造INS13ZD模块可引致栈外溢进而继续执行任一指示。

所以具体来说在文件管理器中搜索“alphapd”关键字,进而寻找相关联的文件展开动态反编译操作,然后在当前反编译窗口搜索“WEPEncryption”关键字,结果返回十几处匹配重要信息 (如图2右图),再结合左侧标识符风险检测窗“ELF Vunerability Info”的检测结果展开预测。

两处重要信息都多次提到sub_43b7c0附近的地址,标识符风险检测中直接指出地址 <sub_43b7c0+1b4> strcpy相关的栈外溢风险。所以<sub_43b7c0+1b4>的可能性比较大,双击<sub_43b7c0+1b4>跳转到 **strcpy(&var30, v2)**处查阅ASM标识符。

记一次漏洞挖掘「网络安全」

ASM代码只能看到该处是两个strcpy调用,按F5快捷键切换到“pseudo view”查阅反汇编标识符。如图3右图,25行把v2的文本拷贝到栈变量&var30的地址。11~19行的反编译标识符逻辑为:“当p0内存地址中不存有WEPEncryption模块的时候,不展开任何有效操作并直接返回,而当p0内存地址中存有WEPEncryption模块的时候,websGetVar返回WEBEncryption的模块文本”。结合CVE重要信息以及函数名websGetVar的含义,推测sub_43b7c0可能是处理网络请求模块WEPEncryption的函数。验证这一猜测,需要证明当针对wireless.htm推送带有WEPEncryption模块的网络请求时,sub_43b7c0会被继续执行,这就需要动态模拟运行BIOS。

记一次漏洞挖掘「网络安全」

2. 动态调试

按照上述动态化预测的结论,他们获知安全可靠漏洞的成因以及可能的指令边线,接下来进入第二阶段的动态验证流程: 借助Shambles Desktop的BIOS仿真模拟“Virtual Machine”(以下简称 “VM”)机能对该BIOS展开动态调试。 进入仿真模拟机能,具体来说他们需要将Shambles Desktop的文件管理模块切换到“云端模式”下,然后在左侧辅助工具栏VM管理辅助工具中点击新建,优先选择alphapd所在的磁盘,建立两个模拟器。然后在文件管理器中选中alphapd所在的磁盘,右键关上两个终端(下文称磁盘终端)。如下表所示右图,BIOS的磁盘被挂载起来了。

记一次漏洞挖掘「网络安全」
记一次漏洞挖掘「网络安全」
/bin/alphapd alphapd: Startup! alphapd: cannot openpidfile#

在新关上的磁盘终端输入:“/bin/alphapd”, 启动alphapd,有错误返回,启动alphapd出错。

在alphapd中搜索相关联的错误重要信息”cannot open pid file”,只有两处引用,一处是在.rodata(字符串在可继续执行文件中的存放区域),另外一处是在标识符段中的引用。优先查阅标识符段,预测该函数,62行处的if语句表明当某文件不存有的时候,会抛出”cannot open pid file”的错误。在62行处点击Tab键,切换到ASM View,从ASM的反编译辅助重要信息推断,那个文件应该是/var/run/alphapd.pid。

记一次漏洞挖掘「网络安全」
记一次漏洞挖掘「网络安全」

手动创建”alphapd.pid”,指示如图8右图。再次运行alphapd,旧错误已经解决,有新的错误。同样的,搜索那个错误,定位到原因是/var/run/nvramd.pid文件不存有。

#mkdir/var/run #touch/var/run/alphapd.pid #/bin/alphapd alphapd: Startup! alphapd: waiting fornvram_daemonalphapd: .alphapd: .alphapd: .alphapd: .alphapd: .alphapd: .alphapd: .alphapd: .alphapd: .alphapd: .alphapd: .alphapd: .alphapd: .alphapd: .alphapd: please executenvram_daemonfirst!#
记一次漏洞挖掘「网络安全」

创建”/var/run/nvramd.pid”文件, 再次运行alphapd。旧错误已经解决,有新的错误出现。

#touch/var/run/nvramd.pid #/bin/alphapd alphapd: Startup! alphapd: Cant getlanipfromsysinfo! alphapd: failed toconvert tobinaryipdataalphapd: Shutdown!

同样搜索相关联的错误,定位原因是nvram_bufget拿不到”IPAddress”(如下表所示右图)。nvram_bufget的机能是读取重要信息。Shambles的模拟环境,支持从配置文件初始化电子设备模块配置。所以他们只需要做正确的配置,先查阅BIOS中是否存有配置文件,不存有的话就需要从可继续执行文件中查询电子设备运行参数。

全局搜索”IPAddress”关键字,有多个文件引用,因为是查找配置文件,所以先排除可继续执行文件、sh文件以及cgi文件,就只剩下RT2860_default_vlan那个文件了,查阅RT2860_default_vlan,发现存有多种模块配置,”IPAddress”也在其中,所以RT2860_default_vlan就是电子设备模块配置文件的概率比较大,能拿来试验一下。这里比较幸运,搜索结果多的时候,需要做的排除工作比较多。

Shambles的模拟环境在/shambles目录下预置了libnvram.so,能从配置文件加载电子设备模块重要信息。把RT2860_default_vlan拷贝到libnvarm.so所在目录,重命名为nvram.ini,再次运行alphapd,因为这次要用libnvram模拟电子设备重要信息,所以运行时需要预加载libnvram.so 。输入指示”LD_PRELOAD=/shambles/libnvram.so /bin/alphapd”,运行结果如下表所示右图,虽然还有一些其他的错误抛出,但是alphapd并没有中断,说明成功启动。

#mkdir-p /shambles/libnvram #cp /etc_ro/Wireless/RT2860AP/RT2860_default_vlan /shambles/nvram.ini #LD_PRELOAD=/shambles/libnvram.so /bin/alphapd nvram_get_buf:IPAddress sem_get: Key: 41370002 sem_get: Key: 41370002 nvram_get_buf: = “2.65.87.200” alphapd: Cant getlanipfromsysinfo! alphapd: Version 2.1.8 running at address 2.65.87.200:80 nvram_get_buf:AccessControlEnable sem_get: Key: 41370002 sem_get: Key: 41370002 nvram_get_buf: = “0” nvram_get_buf: User1 sem_get: Key: 41370002 sem_get: Key: 41370002 nvram_get_buf: = “” nvram_get_buf: User2 sem_get: Key: 41370002 sem_get: Key: 41370002 nvram_get_buf: = “” nvram_get_buf: User3 sem_get: Key: 41370002 sem_get: Key: 41370002 nvram_get_buf: = “” nvram_get_buf: User4 sem_get: Key: 41370002 sem_get: Key: 41370002 nvram_get_buf: = “” nvram_get_buf: User5 sem_get: Key: 41370002 sem_get: Key: 41370002 nvram_get_buf: = “” nvram_get_buf: User6 sem_get: Key: 41370002 sem_get: Key: 41370002 nvram_get_buf: = “” nvram_get_buf: User7 sem_get: Key: 41370002 sem_get: Key: 41370002 nvram_get_buf: = “” nvram_get_buf: User8 sem_get: Key: 41370002 sem_get: Key: 41370002 nvram_get_buf: = “”

一般alphapd默认的web服务端口是80(如图9右图),设置端口转发,访问http://127.0.0.1:80试试。

记一次漏洞挖掘「网络安全」
记一次漏洞挖掘「网络安全」
记一次漏洞挖掘「网络安全」

用浏览器访问下http://127.0.0.1,显示如上图10右图界面,在该电子设备上,默认admin秘密是空。点击登入后看到如上图11右图界面,证明alphapd web服务正常运行。

3. CVE重现

下面结合他们第一节的动态预测结论,来重现该CVE。具体来说验证alphapd能响应针对wireless.htm的请求。验证方法如下表所示: 推送带有WEPEncryption的请求到wireless.htm,如果正常返回重要信息,则说明alphapd响应该网络请求。在电脑本机指示行输入”curl

http://127.0.0.1/wireless.htm?WEPEncryption=FEWFEW”,返回重要信息如下表所示图右图,说明alphapd响应带有WEPEncryption的请求。
记一次漏洞挖掘「网络安全」

然后验证向wireless.htm推送带有WEBEncryption的网络请求,能继续执行到sub_43b7c0+1b4处的strcpy。具体来说以调试模式启动alphapd。在刚才运行alphapd的磁盘终端中按ctrl+c关闭那个进程。然后在Shambles Desktop 的alphapd反编译界面点击调试配置把libnvram.so配置为预加载库。(这么做和他们刚才运行LD_PRELOAD=/shambles/libnvram.so /bin/alphapd是一样的作用)。启动调试,事件日志窗口返回的日志如图13右图。和磁盘终端运行alphapd显示的日志是一样的,证明调试正常启动。

记一次漏洞挖掘「网络安全」
记一次漏洞挖掘「网络安全」

先在下图标注边线打断点(如图断点1右图),推送相关联网络请求,调试进程确实会在断点1停留,证明向wireless.html推送带有WEPEncryption模块的网络请求会继续执行到strcpy。

记一次漏洞挖掘「网络安全」

最后验证当WEPEncryption的模块过长时,会引致栈外溢。

验证方法如下表所示,分别向wireless.html推送正常长度的WEPEncryption的模块请求和INS13ZD度的WEPEncryption的模块请求,网络请求完成后,对比pc寄存器中的重要信息。如下表所示图断点2右图中边线打断点,查阅继续执行jr后,pc寄存器重要信息是否被修改。断点2中的ra存储的是断点1 strcpy的调用函数sub_43b7c0继续执行完成后的跳转地址。jr指令会把ra中的值拷贝到pc寄存器。

找到断点2的操作过程如下表所示:

把光标放置在sub_43b7c0函数return处(如图14右图),按tab键切换到”ASM View”。找到相关联的jr指令边线。就是下图断点2右图的断点2。

记一次漏洞挖掘「网络安全」
记一次漏洞挖掘「网络安全」

试验1:

启动alphapd调试,在电脑本机指示行输入”curl

http://127.0.0.1/wireless.htm?WEPEncryption=ewfwefwefewf”。调试进程会前后停在断点1和断点2,继续执行完成后,pc寄存器中的文本是某条指令地址(如图15右图),且网络请求会正常返回。

试验2:

电脑终端指示行输入”curl

http://127.0.0.1/wireless.htm?WEPEncryption=

ewfwefwefewffeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeefwefwefwefwefwwwwwwwwwwvvvvewfwefwefwefwefwefwefwefweffweeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee”。调试进程会前后停在断点1和断点2,继续执行完成后,pc寄存器中的文本不再是某一条指令地址,而是被修改为某个内存地址(如图16右图),此时继续继续执行,alphapd会崩溃,说明栈已经被破坏。

以上两次试验结果对比说明推送带有WEPEncryption模块的网络请求到,会继续执行strcpy。那个函数会让用户输入变量拷贝到栈内存。进而引致用户输入变量能任一修改栈内存。反击者透过巧妙的WEPEncryption的模块构造,pc寄存器文本能被修改为其他任一指令的地址,进而继续执行任一指示反击。

①重要信息安全可靠自学走线

②20份渗入试验图书

③安全可靠攻守357页讲义

④50份安全可靠攻守复试手册

⑤安全可靠蓝队渗入软件包

⑥重要信息安全可靠必不可少书刊

⑦100个安全可靠漏洞实战案例

⑧安全可靠大厂内部视频资源
记一次漏洞挖掘「网络安全」

至此,CVE-2019-10999在Shambles上重现完成。

记一次漏洞挖掘「网络安全」
记一次漏洞挖掘「网络安全」

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务