尽管如今服务器后端技术选择丰富多样,但 PHP + MySQL 的组合仍然占据相当大的比重。
我搭建了一个特意设计为不安全的 PHP 网站,专门用于练习针对 PHP 应用的攻击技术。
即便你是刚入门的新手,也能通过我提供的教程,亲身体验攻击 PHP 网站的过程与乐趣。
这个实验环境模拟的是一个简单的留言板应用,不要上传奇怪的东西啊。
需要说明的是,这类漏洞在现今正规的 Web 系统中已较为少见,更多见于内部使用的系统或诈骗系统,但众所周知,世界是一个草台班子,开发者出于各种原因(如相信攻击者无法接触到这个系统或接触者无攻击能力)省略了安全措施。(就是你,麦当劳后台)
如果你想检验自己的基础攻防能力,不妨先不看解析,亲自上手试试看。
http://non-safe-php.zzyweb.site/index.php(对此站点的攻击不用承担任何类型的责任,本文的完全声明见文未)
好了,相信你已经攻击完了,让我们一起看看解析吧。
先在这里列出关键词,如果你能够看懂这些关键词并能够实现相应的攻击,那你可以直接关闭这个文章了,无需让我的垃圾文章浪费你的时间。
这些关键词是:SQL注入、暴力破解、平级越权、垂直越权
1,网站初印象
咦,这个网站没有https诶,虽然你可能不能利用这个弱点,但也暴露出一个信息,那就是这个网站没有像样的安全措施(主流浏览器要求一些加密算法或权限需要强制https),这对攻击者来说通常是一个好消息。

网站的风格也印证了你的猜想:

2,SQL注入
你看到了用户登录和注册,作为一个合格的攻击者,首先应该想到的是SQL注入。
如果你还不清楚什么是SQL注入,请看这个图:

那么如何最快的注入这个演示的PHP系统呢?很简单,只需要把用户名写成这个:
‘ OR ‘1’=’1′ — 密码随便填写就好了,点击登录后你发现自己就有了管理员admin的权限。
这是怎么实现的,让我们看一下正常登录与攻击登录的区别:

其中单引号(')闭合了用户名字段,加入了OR '1'='1'使条件永远为真,再使用--注释掉了后续的密码验证,这样以来系统返回第一个用户(通常是管理员),你也完成了绕开登录和获得管理员权限两项攻击,是不是很有意思?让我们继续。
进阶尝试:首页的搜索框其实也可以“大有可为”,尝试设计SQL攻击数据库从中获得更敏感的数据。
3,暴力破解
这个没什么说的,没有登录限制和人机验证就立刻上暴力破解,记得找一个好一点的字典库,享受你悠闲的下午吧!(现实系统中几乎没有这种好事)
脚本示例brute_force.py

4,平级越权攻击
攻击流程:用户A注册账户并发布留言(攻击者获得留言ID)——用户B注册另一个账户——用户B直接访问:delete_message.php?id=用户A的留言ID来删除用户A的留言

为什么会这样呢?原来系统只会检查用户是否登录,而没用验证用户是否有权限操作相应的数据。(很低级的一个错误了)
5,垂直越权
通过猜测或阅读系统代码,最终获得管理员功能api相关的链接:
admin.php?action=delete_user&user_id=1
直接访问,你就删掉了管理员!
这又是怎么回事?

原来管理员的功能并没有权限验证,有的系统仅仅是在前端对普通用户隐藏了功能按钮,更有甚者使用api链接中role的明文来验证权限,如只需将URL中的”login”改为”register”或“admin”就获得了权限。
6,其他攻击
除了上述比较简单的攻击,这个系统也可以被用来演示:
XSS跨站脚本攻击:在显示帖子内容时,没有对用户输入进行HTML转义,允许执行恶意脚本。
文件上传攻击(有点危险,最终删除了)
弱哈希彩虹表攻击(PS:我这个系统的密码用了明文存储,弱哈希的效果是类似的)
会话固定攻击:用户登录后没有重新生成session ID,攻击者可以固定会话ID进行攻击
内容性质与免责声明
- 仅限教育与研究目的:本博客提供的所有技术信息、工具介绍、漏洞分析及概念验证代码均旨在用于合法的安全研究、教育学习和授权测试。我们的目标是提高公众的网络安全意识,帮助组织和个人更好地保护自己。
- 禁止恶意使用:严禁将本博客的任何内容用于任何非法或恶意目的,包括但不限于:
- 未经授权的系统访问(黑客攻击)。
- 制作或传播恶意软件(木马、勒索软件等)。
- 发起网络攻击(DDoS攻击、网络钓鱼等)。
- 侵犯他人隐私或窃取数据。
- “按原样”提供:本博客的内容“按原样”提供,不附带任何明示或暗示的担保。您在实践任何技术时需自行承担全部风险。对于因使用或无法使用博客内容而导致的任何直接或间接损失,本博客及作者概不负责。