点击上方“CSDN”,选择“置顶公众号”

关键时刻,第一时间送达!

去年夏天我开始学习信息安全与黑客技术。在过去的一年中,我通过参加各种战争游戏、夺旗以及渗透测试模拟,不断提高我的黑客技术,还学习了很多关于“如何让计算机偏离其预期行为”的新技术。

长话短说,我的经验总是局限于模拟环境,而且我认为自己是个有道德的白帽黑客,所以我从未入侵过别人的业务,一次都没有。

直到现在。本文讲述了我入侵一台托管了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

译者:弯月,编辑:言则

————— 推荐阅读 —————

点击图片即可阅读

如何在 7 分钟内黑掉 40 家网站?相关推荐

  1. 如何在7分钟内黑掉40家网站?

    晚上在Hackernoon上看到这篇网站安全的文章,翻译一下,分享给大家. 作者:Georgios Konstantopoulos 翻译有删节和修改 我的一个朋友告诉我,他的网站上发现了一个XSS漏洞 ...

  2. 利用SAP 0day,四分钟内黑掉华尔街

    本文讲的是利用SAP 0day,四分钟内黑掉华尔街,2017年5月20日,由唯品会信息安全部主办,唯品会安全应急响应中心承办的"因唯安全,所以信赖--深度揭秘唯品会信息安全建设实践 2017 ...

  3. github创建静态页面_如何在10分钟内使用GitHub Pages创建免费的静态站点

    github创建静态页面 Static sites have become all the rage, and with good reason – they are blazingly fast a ...

  4. 如何在 20 分钟内给你的 K8s PaaS 上线一个新功能?

    作者 | 孙健波(天元) 来源|阿里巴巴云原生公众号 上个月,KubeVela 正式发布了, 作为一款简单易用且高度可扩展的应用管理平台与核心引擎,可以说是广大平台工程师用来构建自己的云原生 PaaS ...

  5. 服务器创建多个dhcp服务_如何在15分钟内创建无服务器服务

    服务器创建多个dhcp服务 by Charlee Li 通过李李 如何在15分钟内创建无服务器服务 (How to create a serverless service in 15 minutes) ...

  6. 如何在10分钟内构建交互式HTML5广告

    本文出生地传送门→→→→→如何在10分钟内构建交互式HTML5广告---静华网-一个有气质的网站 随着Flash的消亡,交互式广告的责任被传递给了HTML5.在这里,我们将学习如何在短短10分钟内建立 ...

  7. 如何在1分钟内CSDN收益1000万,走上人生巅峰?!

    事情的起因源于前几日CSDN专栏作者群中有位同志自曝收益:426584.46元(不用数了42万+,未证实是否属实),瞬间刷屏. 那么作为一位普通的技术分享者,是否有机会利用开源项目短时间内赢取白富美. ...

  8. 以太坊区块链同步_以太坊69:如何在10分钟内建立完全同步的区块链节点

    以太坊区块链同步 by Lukas Lukac 卢卡斯·卢卡奇(Lukas Lukac) Ethereu M 69:如何在10分钟内建立完全同步的区块链节点 (Ethereum 69: how to ...

  9. es6 ... 添加属性_如何在10分钟内免费将HTTPS添加到您的网站,以及为什么您现在不止需要这样做......

    es6 ... 添加属性 by Ayo Isaiah 通过Ayo Isaiah 如何在10分钟内免费将HTTPS添加到您的网站,以及为什么现在比以往更需要这样做 (How to add HTTPS t ...

  10. javascript创建类_如何在10分钟内使用JavaScript创建费用管理器

    javascript创建类 by Per Harald Borgen 通过Per Harald Borgen 如何在10分钟内使用JavaScript创建费用管理器 (How to create an ...

最新文章

  1. Java代码块总结(速读版)
  2. 谈谈IT界8大恐怖预言!
  3. ORACLE+RAC+ASM环境下添加redo日志组
  4. Spring和JSF集成:国际化和本地化
  5. Java ObjectOutputStream writeDouble()方法与示例
  6. Web前端期末大作业--响应式电竞博客网页设计(HTML+CSS+JavaScript)实现
  7. Kubernetes理论02
  8. 基于虚拟账号的邮件系统之×××
  9. 高通总裁安蒙在“GSMA Thrive”中分享了哪些关键信息?
  10. Java成神之路——String长度限制
  11. c++ opencv添加logo_Python+Opencv+Tkinter指纹识别与人脸识别的门禁兼考勤(二)
  12. 评分模型前奏:启发式评分模型开发
  13. sql查询禁用缓存_如何在SQL Server 2017中启用和禁用身份缓存
  14. vue-cli入门之项目结构分析
  15. 使用ffmpeg快速生成视频截图
  16. UML用例图分析——铁路售票系统
  17. 英语不好的程序员怎么样才能自己读英文官方文档?
  18. 逻辑思维训练和推理思维训练
  19. 米的换算单位和公式_小学数学单位换算公式(附练习题)
  20. cad打印本计算机未配置,为什么CAD点打印的时候就会警告提示无法使用此绘图仪配置?有什么解决办法?...

热门文章

  1. cas和saml_结合使用SAML安全令牌和Microsoft Web Services增强功能
  2. Halcon批量读取图片 读取指定文件夹下图片
  3. 知识产权管理系统 开源_当前的知识产权格局如何影响开源
  4. 计算机网络软件组成,计算机网络软件的组成
  5. 什么是EDM营销?EDM营销的优点是什么?
  6. 3ds Max Taper、Twist和Bend的运用——点心的制作
  7. 树莓派上3g模块的使用
  8. 根据拼音首字母进行过滤的combobox
  9. 曲线运动与万有引力公式_万有引力的本质【2019版】
  10. 11gR2 RAC vip和network资源的依赖性与频繁failover