apply.cgi实际上不是脚本,而是在HTTP服务器中调用的功能
所以,我相信cgi文件可能嵌入在我解压缩的固件版本中/ usr / sbin中的http二进制文件中。我不知道是否确实如此。
有人可以向我指出正确的方向,以便知道在哪里可以找到cgi文件,或者它们是否确实嵌入在httpd二进制文件中吗?毫无疑问,我们将对您的帮助表示赞赏。结果:
下图显示了etc目录中的文件列表:
如果您发现有两个符号链接,由于缺少链接文件而都悬而未决。因此,这使我相信在启动时会在内存中创建cgi文件(可能还有其他文件)。更糟糕的是,由于没有安装带有IP的NIC设备并运行它,因此无法使用Firmadyne来仿真固件,并且我已经在使用Firmadyne来仿真另一种netgear固件(尽管是旧的)。在对Firmadyne的创建者的所有辩护中,他们提到,如果发生这种情况,那就是bug并加以报告,我还没有做过。最重要的是,我无法仿真固件来证明(或拒绝证明)文件可能是在运行时创建的。无论如何,我现在会继续研究。
#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/www
,find -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 httpd
和httpd
上使用.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
评论
二进制文件中是否有.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名称,所以你很幸运。 >