我认为对于安全测试人员而言,收集有关Web应用程序的工作方式以及最终使用哪种语言的信息至关重要。

我知道URL扩展,HTTP标头,会话cookie,HTML注释和样式-表格可能会显示一些信息,但仍然很难且不能保证。

所以我想知道:有没有办法确定网站背后的技术和框架?

评论

尝试www.builtwith.com

我的tomcat服务器返回“ CERN httpd”只是为了惹人厌

@HagenvonEitzen如果HTML是一种编程语言,它将被命名为HTPL而不是HTML。

我认为对于安全测试人员来说,收集有关Web应用程序如何工作以及它所使用的语言的信息是至关重要的。我认为,即使安全测试人员也无法弄清楚该网站所使用的语言,这会使它变得更多。安全,因为那时没人会尝试尝试哪种漏洞。 (是的,偶尔会有一些模糊的安全有效用例。)

@MasonWheeler:弄清楚网站内置的语言只会决定不尝试使用哪些漏洞。那不会使网站更安全。

#1 楼

无法100%确定您是否无权访问服务器,因此仅是猜测。以下是一些线索:



文件扩展名:login.php最有可能是PHP脚本。

HTTP标头:它们可能会泄漏有关服务器上运行的语言以及版本等其他详细信息:X-Powered-By: PHP/7.0.0表示该页面由PHP呈现。

HTTP参数污染:如果您设法猜测正在运行的服务器,则可以

语言限制:最大帖子数据,GET和POST数据中的最大数量变量等。如果网站管理员保留默认值,这可能会很有用。

具体输入:例如,PHP有一些复活节彩蛋。

错误:触发错误也可能会泄漏该语言。例如,Warning: Division by zero in /var/www/html/index.php on line 3是PHP。

文件上传:如果正在服务器端修改文件,则库可能会添加元数据。例如,大多数站点会调整用户头像的大小,并且检查EXIF数据会泄漏CREATOR: gd-jpeg v1.0 (using IJG JPEG v90), default quality,这可能有助于猜测使用哪种语言。

漏洞利用:读取备份文件或在服务器上执行任意代码。

开源:该网站可能是开源的,并且可以在Internet上找到。

关于页面:网站管理员可能已经在“常见问题”或“关于”页面中感谢语言社区。

工作页面:开发团队可能正在招聘,他们可能已详细说明了他们正在使用的技术。

社会工程学:问网站管理员! ,您可以在在线个人资料(GitHub,LinkedIn,Twitter等)上查看其公开存储库或技能。


您可能还想知道该网站是否使用框架或CMS,罪过ce这将提供有关所使用语言的信息:



URL:目录和页面特定于某些CMS。例如,如果某些资源位于/目录中,则意味着已使用WordPress。

会话cookie:名称和格式。

CSRF令牌:名称和格式。

呈现的HTML:例如:meta标签顺序,注释。您应该始终尝试使用多种来源来验证您的猜测。

评论


您忘了提到Java中的一些示例,这些示例通常将cookie JSESSIONID用于其会话管理。登录URL也会背叛技术,例如弹出默认URL。这些示例是针对Java的,但其他一些确实如此

–沃尔夫特
16-3-11在15:25



请注意:http标头表示它们由php驱动,并不意味着该站点实际上是。尽管此示例更多地是关于服务器平台的,但我知道有一个家伙会让他的nginx服务器在每次请求时都返回Server:Microsoft-IIS / 5.0,以便他诱骗攻击者对服务器使用错误的攻击。 “太简单了!” 〜攻击者。你是对的! (这只是表明您不能信任标题)

– d0nut
16-3-11在15:40



另一个好方法是检查源代码,以查看是否有使用特定于语言的模板引擎的明显迹象。

– mowwwalker
16年3月11日在20:08

您忘记了最简单的方法之一-查看作业页面。 :)

–熊佳亚诺夫
16 Mar 11 '16 at 20:40

如果有一个名为“ __VIEWSTATE”的隐藏字段,和/或按钮显示“ href = javascript:__ doPostBack”,则可能是asp.net。在我的脑海中,我想不出其他平台上可比的“签名”,但是等等。

–杰伊
16年3月14日在4:07

#2 楼

要猜测编程语言,您可以按照以下详述的三个步骤进行操作:

步骤1-在站点本身上搜索证据

手动...



在底部的站点页面上搜索类似的短语: -> ...

在网站上进行搜索是否可以参加任何可以从技术角度谈论网站的会议

...或在帮助下工具的实现


读取浏览器下载的HTML代码
在开发人员工具栏中启动->,并研究浏览器与服务器之间的交换。

搜索一些已知的隐藏页面:

->

如果您获得200,则该站点可能正在运行(免费,付费等)可用软件。


第2步-在网络上搜索证据

向搜索引擎询问前端错误

您可以查找网站产生的一些错误。



在搜索引擎中键入的一些关键字:


错误500网站:the-site.com
例外网站:the-site.com
<曾经发生过的事情>网站:the-site.com
=>您可以简单地用各种Web技术产生的一些已知错误消息替换“ ”。



向搜索引擎询问后端错误

您甚至可以猜测后端使用的技术:


ORA-12170 site:the-site.com
=>如果找到的话例如,该网站的后端部分可能使用Oracle。

向网站竞争对手询问搜索引擎


查找在网站行业中流行的技术
/>查找竞争对手使用的技术
与其他竞争对手查找站点的比较。这些比较可能涉及正在使用的技术

技术调查站点

这些网站可以为您定位的网站提供出色的信息。他们可能已经为您完成了部分工作。


http://w3techs.com/sites
=>输入您要定位的网站的网址并查看检测到了哪些技术(客户端或服务器端)。请注意,该站点必须在1M Alexa排名中名列前茅。
http://stackshare.io/search/q= <关键字>
=> <关键字>可以是公司名称,网站名称等任何内容

步骤3-分析结果

您在步骤1中找到的证据可能是错误的,因为网站所有者可以更改它们。试图找出这些证据之间的矛盾。消除矛盾的证据。

将步骤2中的证据合并到各种来源和您的来源之间。再次消除矛盾的证据。

将所有发现恢复为下表所示。

+-------------+-----------+------------------+    ...   +----------+-------+--------+
| EVIDENCES   |  ON SITE  |  Search Engine 1              SOURCE n   SCORE   PCT (%)
+-------------+------------------------------+    ...   +----------+-------+--------+
|    PHP 7    |     X     |       X          |                X    |   3   |  300/n
+-------------+------------------------------+    ...   +----------+-------+--------+
|  Wordpress  |           |       X          |                X    |   2   |  200/n
+-------------+------------------------------+    ...   +----------+-------+--------+
     ...
+-------------+------------------------------+    ...   +----------+-------+--------+
|  EVIDENCE m |           |                  |                     |       | (100*SCORE)/n
+-------------+------------------------------+    ...   +----------+-------+--------+


最后,您将可以说“我对XX%的站点对该站点运行在YY(EVIDENCE i)充满信心”。

评论


这似乎是一个有用的逐步指南,但是将任意置信度得分表示为百分比可能不是一个好主意。即使服务器获得完美的分数,也很可能是精心组装的蜜罐,因此您不应百分百确信自己不是。

– Janse 8月
19年6月3日在9:01

@AugustJanse应该如何显示任意置信度得分?

–史蒂芬(Stephan)
19年6月3日在20:58

诸如“我断定该网站在YY上以XX的置信度得分运行”之类的东西?问题在于该百分比看起来有点像概率。

– Janse 8月
19年4月4日在6:42

#3 楼

这很简单。添加适用于Chrome和Firefox的Wapplyzer扩展程序。

它讲述了编程语言,服务器,分析工具或网站所基于的CMS和框架。尝试一下,您会喜欢的。

评论


看起来不错..但是它可靠且准确吗?

–风暴
16 Mar 11 '16 at 16:10

是的,它非常准确。我在过去4年甚至在自己开发的网站上都在使用它。它总是准确的。

– Manish Kumar
16 Mar 11 '16 at 18:03

我认为它不算准确。我们故意伪造发送的标头以返回IIS。即使我们不使用Wordpress,也要有一个wp-admin.php。还有其他几个蜂蜜罐。我们的网站实际上是一个返回静态内容的Node.js应用程序。

–培根·布拉德
16 Mar 11 '16 at 18:09



@Ahmed通过扫描页面上的HTML,标题,URL和JavaScript变量来工作。它仅与用于检测课程的规则集一样好,但是我发现它几乎总是正确的。 (但是,当然,可以将任何网页设置为假装正在运行的网页不是。)

–user2428118
16-3-12的12:00

社会工程学:询问如何识别用于在StackExchange上提供网页服务的软件,并等待人们知道其网站的运行方式。谢谢@BradMetcalf ...

–弧
16 Mar 13 '16 at 9:36

#4 楼

除了Wappalizer浏览器扩展之外,还有几个站点可以检测给定网站提供哪些技术:


http://builtwith.com/ /onlinewebtool.com/cmsdetector.php-用于CMS检测

http://guess.scritch.org/-检测CMS,网络框架


#5 楼

答案是您永远无法“放心”。尽管在99.9%的情况下,获得高度投票的答案会在网站背后找到框架的“诉说”,但这是不确定的。 (html,CSS和JavaScript),在您和代码本身之间放置一个Web服务器(nginx,Apache等),并可能有一个负载平衡器和一个CDN。因为您没有直接互动,所以无法确定。

如果网站正在通过wp-uploads提供内容/可以肯定地说它正在运行Wordpress,但还不能确定。也许该站点使用的是Wordpress,但是当其迁移到其他站点时,wp-uploads /路径会保留,以避免断开链接和书签。

#6 楼

有时候你会知道,有时候你不会。

如果HTML是在客户端生成的,则可以通过在Web浏览器中查看源代码来轻松分辨出哪种语言。这些语言包括:ruby on rails,javascript,java等。在客户端,源是对用户开放的,并且必须诚实地知道它是哪种技术。在服务器端生成的代码,您可能不知道是哪种编程语言生成的。这些语言包括:PHP,C ++和许多其他语言。在服务器端,您可以通过多种方式猜测它是哪种语言,该技术也可以通过多种方式隐藏自身。想要隐藏服务器端技术。选择另一个问题中列出的一种技术来尝试识别语言。例如,文件的* .php扩展名。现在,配置您的Web服务器以从扩展名为* .php的文件执行C代码。您的用户将无法查看源代码(由于通过图灵完整性,两种语言均具有相同的能力来产生相同的输出),但是他们将被误认为您正在运行PHP。有人想混淆服务器端技术的选择?因为CGI语言具有各种漏洞,如果最终用户知道您使用的是哪种语言,则更容易确定目标。误导用户所使用的服务器端技术是一种非常合理的安全措施。

评论


我没有投票,但是这个答案忽略了确定服务器端语言和技术的众多技术。

–user13750
16年3月13日在5:11

首先,Ruby on Rails和Java完全能够完全在服务器端生成HTML。

–斯科特·希尔森(Scott Hillson)
16-3-18的3:33