我想知道是否有人可以帮助我。我只是为了练习而对netgear r6250固件进行逆向工程。我已经设法使用binwalk解压缩固件,并且在根目录中有www目录。查看html代码,我注意到表单引用了cgi文件。但是检查整个文件系统,我似乎找不到任何cgi文件。我读过这篇博客文章,提到在某些netgear路由器中,我引用:


apply.cgi实际上不是脚本,而是在HTTP服务器中调用的功能


所以,我相信cgi文件可能嵌入在我解压缩的固件版本中/ usr / sbin中的http二进制文件中。我不知道是否确实如此。

有人可以向我指出正确的方向,以便知道在哪里可以找到cgi文件,或者它们是否确实嵌入在httpd二进制文件中吗?毫无疑问,我们将对您的帮助表示赞赏。结果:


下图显示了etc目录中的文件列表:


如果您发现有两个符号链接,由于缺少链接文件而都悬而未决。因此,这使我相信在启动时会在内存中创建cgi文件(可能还有其他文件)。更糟糕的是,由于没有安装带有IP的NIC设备并运行它,因此无法使用Firmadyne来仿真固件,并且我已经在使用Firmadyne来仿真另一种netgear固件(尽管是旧的)。在对Firmadyne的创建者的所有辩护中,他们提到,如果发生这种情况,那就是bug并加以报告,我还没有做过。最重要的是,我无法仿真固件来证明(或拒绝证明)文件可能是在运行时创建的。无论如何,我现在会继续研究。

评论

二进制文件中是否有.cgi名称?

@IgorSkochinsky我会仔细检查。我正在使用radare2进行反汇编,因此对它和ARM汇编(对x86更为熟悉)都是新手,因此将再次尝试。似乎二进制文件中的符号已被删除,但是我相信您是在告诉您寻找“ .cgi”字符串,以便进行检查和更新。谢谢

@IgorSkochinsky是的,您是对的,我在httpd二进制文件上运行了字符串,并在其中找到了cgi文件名,谢谢您的帮助。

是的,所以我在符号上也错了,它确实也有符号

陈述我们要讨论的固件版本是公平的。您是说R6250-V1.0.4.26_10.1.23.zip吗? grep -RPho'[^“] + \。cgi'| sort -u给了我162个名为“ .cgi”的文件的独特提及,而整个rootfs中只存在一个genie.cgi。一堆字符串。虽然不是Apache,但看起来更像是自制软件。你猜怎么着,/ www内的HTML文件中也提到了一大堆.cgi名称,所以你很幸运。 >

#1 楼

尽管您没有在问题中提供必要的详细信息,但我还是决定通过Netgear网站上的R6250-V1.0.4.26_10.1.23.zip进行尝试。我不知道这与您当前正在寻找的目标有多近,但是环境看起来从表面上看起来非常相似(尤其是/etc的内容)。已下载的.chk中的.zip文件:

$ extract-firmware.sh R6250-V1.0.4.26_10.1.23.chk 
Firmware Mod Kit (extract) 0.99, (c)2011-2013 Craig Heffner, Jeremy Collake

Scanning firmware...

Scan Time:     2018-06-13 17:23:43
Target File:   /home/user/netgear/R6250-V1.0.4.26_10.1.23.chk
MD5 Checksum:  fbb0ddc095cbca7abebe90a19a1b39b7
Signatures:    344

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
58            0x3A            TRX firmware header, little endian, image size: 19345408 bytes, CRC32: 0xE9FDE7D3, flags: 0x0, version: 1, header size: 28 bytes, loader offset: 0x1C, linux kernel offset: 0x23F01C, rootfs offset: 0x0
86            0x56            LZMA compressed data, properties: 0x5D, dictionary size: 65536 bytes, uncompressed size: 5467936 bytes
2355286       0x23F056        Squashfs filesystem, little endian, version 4.0, compression:xz, size: 16983563 bytes, 1244 inodes, blocksize: 131072 bytes, created: 2018-04-02 13:08:38

Extracting 2355286 bytes of  header image at offset 0
Extracting squashfs file system at offset 2355286
Extracting squashfs files...
Firmware extraction successful!
Firmware parts can be found in '/home/user/netgear/fmk/*'


然后,我开始使用标准Linux工具探索fmk/rootfs的内容。例如,整个rootfs中仅存在一个.cgi文件。路由器Web界面的内部形式。

然后我尝试进一步过滤列表(在grep -R \.cgi www内部):

$ find -name '*.cgi'
./www/cgi-bin/genie.cgi


那里在结果列表中有一些离群值,但结果仍然有用。事实证明,我本可以使用.cgi,但实际上我正在按顺序浏览fmk/rootfs/wwwfind -name httpd/bin,并在最后一个中找到了一个名为/usr/bin的二进制文件。给了我更多的线索,并明确证明这不是Nginx或Apache。使用/usr/sbin,我还可以验证引号:


httpd并不是真正的脚本,而是在HTTP服务器中调用的函数。 br />似乎成立。

使用strings httpd,我弄清了依赖项(摘录):在需要时出现。

最后但并非最不重要的一点是,我将ELF文件fmk/rootfs/usr/sbin加载到IDA Pro 7.1中,使用Shift + F12转到“字符串”子视图,并开始查找strings httpd|grep \.cgi名称。您提到的apply.cgi不存在(通过在readelf -d httpdhttpd上使用.cgi进行验证)。因此,我需要选择另一个CGI作为示例。

我选择了apply.cgi,这是在IDA View中使用Alt + T自上而下搜索文本strings时出现的第一个名称之一A.

列出包含httpd的字符串的交叉引用(x): grep -R apply\.cgi fmk/rootfs/www),当遵循这些交叉引用时,事实证明它是解析HTTP请求并将请求处理到任意数量的硬编码userlogin.cgi.cgi“文件名”的中央“宏功能”。 (注意:请确保还要查找对包含userlogin.cgi的字符串的引用。)所有其他sub_F110“文件”都直接由庞大的1.3 MiB .text:0000F110二进制文件处理。

评论


感谢您对逆向工程过程的详细说明。正如@IgorSkochinsky指出的那样,我遵循了与您发现cgi文件确实嵌入在Web服务器中的路径类似的方法。但是,我注意到的唯一区别是我们的信息之间的区别是,我发现的Web服务器是一个称为goahead Web服务器(embedthis.com/goahead)。大多数情况下,由于我缺乏所分析固件的详细信息,我们的信息有所不同。再次感谢您的协助。

–user1803784
19年11月18日在14:23

#2 楼

如果没有,请检查Web服务器的配置文件。假设它是一个普通的Web服务器(例如Apache或Nginx),则所需的所有内容都将位于httpd.conf / nginx.conf或它们加载的文件之一中。这样会很慢www,但您会找到引用该名称的任何内容。

评论


我已经检查过配置文件了,但不幸的是它们不是:( ..我也已经在整个文件系统中搜索了扩展名为cgi的文件。我将用我的屏幕快照编辑帖子。感谢您的建议。

–user1803784
17年5月17日在22:02

使用grep不仅可以查看文件名,而且可以查看文件内部-这很慢,但是它可能会导致您指向这些CGI的任何文件

–罗恩·鲍斯(Ron Bowes)
17年5月17日在22:26

我已经做到了,显示的对cgi文件的引用文件与我在原始问题中的www目录中所引用的文件相同。我只需要继续寻找兄弟

–user1803784
17年5月17日在22:42

是否有可能在另一个文件系统上?

–罗恩·鲍斯(Ron Bowes)
17年5月18日在3:47

我在二进制文件上运行了字符串,并在输出中找到了cgi文件名,因此我相信它们的代码在二进制文件中,也许httpd进行了strcmp调用并做了必要的代码。我在讲话时正在看它。

–user1803784
17年5月18日在3:50