各位看官老爷们,不知不觉距离上一篇文章又过了将近一个月了,我感觉再不发点文章,粉丝都要离我而去了。
今天给大家介绍一下我自己写的一个基于Flask框架开发的漏洞靶场,这对web安全入门非常有帮助。为什么这么说呢?原因有二
**代码易读性:**Flask是基于python语言的,我相信大家能很容易读懂代码逻辑。而web漏洞原理大多数情况下是不受编程语言限制的,即python web、Go web、Java web都会存在这些web漏洞。当然每种编程语言也有自己特定的漏洞,比如SSTI漏洞仅限于Python,而很多反序列化漏洞是Java的专属,这些只有在特定编程语言里触发的漏洞我并没有将其归类到web漏洞中。如果让一个不懂web安全的人直接上来阅读Java代码可能会直接让人失去学习动力,而简单易懂的python代码可以很好的帮助初学者从代码层面理解漏洞本质。
**针对漏洞设计了真实业务场景:**该项目几乎涵盖了owsap top 10大部分漏洞,而且针对漏洞设计了真实的业务场景。比如圈内很有名的基于PHP的DVWA,基于Java的webgoat都没有针对漏洞设计业务场景,去打wegoat靶场的时候会感觉很枯燥。
本篇文章内容包括:靶场介绍和靶场部署。而针对于不同漏洞的讲解,我会在后续的文章中持续更新。
一、Pyhackme漏洞清单
1. 身份认证类漏洞(该类漏洞在2021版owasp top 10中排名第7)
1. 用户注册:用户注册提示用户已存在,可进行用户枚举(手机号和邮箱作为用户唯一键值)
2. 用户登陆
2.1 业务系统对登陆失败做了不合理的安全设计,导致账号拒绝服务攻击
2.2 业务系统使用了慢散列函数,导致可以通过观察响应时长来枚举用户
2.3 慢散列函数,导致可以通过观察响应时长(SQL注入(盲注))
3. 用户找回密码:找回密码处host注入,导致账号接管
4. 管理员登陆:管理员后台由于没有做登陆失败验证,在2.2的基础上枚举出管理员账户,然后密码暴力破解
2. SSRF漏洞(该类漏洞在2021版owasp top 10中排名第10)
1. 后台批量导入商品:商品的excel文件先传到存储对象,然后服务端发起请求获取该文件进行导入。请求的URL可控,导致SSRF漏洞。
3. CSRF漏洞 (该类漏洞在2013版owasp top 10中排名第8,从2017版开始已不再top 10清单中)
1. 支付功能:利用他人账号的余额帮自己支付
2. 后台添加账户:添加后台管理员账号
4. SQL注入漏洞(该类漏洞在2021版owasp top10排名第3,2017版之前排名第1)
1. 用户登陆:布尔盲注
2. 订单详情:联合查询注入
5. 条件竞争漏洞(该类漏洞并没有明确在的owasp top10中出现,这是一种较隐蔽的漏洞,但我个人将它归入2021版的“不安全设计”中)
1. 储值卡充值:一张储值卡可以充值多次
6. 数据越权漏洞(该类漏洞在2021版owasp top10排名第一,叫做访问控制缺失,也是近几年被利用最多的漏洞,导致的问题是敏感数据泄露(破坏了数据保密性),或者是未授权对数据进行篡改(破坏了数据完整性))
1. 复购:越权重复购买,消耗他人账户余额
2. 收货人管理
2.1 越权修改收货人信息
2.2 越权查看收货人信息
3. 查看订单:越权查看他人订单信息
4. 越权退款:越权退款,导致买家和卖家纠纷,以及其他恶劣影响
关于数据越权自动化检测可以参考我之前的一篇文章:
数据水平越权检测工具设计
信息安全笔记,公众号:信息安全笔记数据水平越权检测工具设计
二、部署
部署很简单,相信大家都用过docker。从github下载靶场代码,修改配置文件后直接docker-compose up -d即可部署。如果没有用过docker,可以出门左转问baidu,chatgpt
项目地址:https://github.com/f4cknet/pyhackme
下载完之后修改配置文件docker-compose.yaml
version: '3'
services:
web:
build:
context: .
dockerfile: Dockerfile
ports:
- "5000:5000"
volumes:
- C:/Users/zmzsg/Desktop/web靶场开发/pyhackme:/work
depends_on:
- db
- redis
environment:
MYSQL_HOST: db
MYSQL_USER: root
MYSQL_PASSWORD: Pyhackme1024
MYSQL_DATABASE: hackme
REDIS_HOST: redis
ossak:
osssk:
MAIL_SERVER: smtp.163.com
MAIL_PORT: 465
MAIL_USE_SSL: True
MAIL_USERNAME:
MAIL_PASSWORD:
MAIL_DEFAULT_SENDER:
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: Pyhackme1024
MYSQL_DATABASE: hackme
ports:
- "3306:3306"
redis:
image: redis:latest
ports:
- "6379:6379"
项目由3个容器组成,web容器、mysql容器、redis容器。
别的地方可以不用改,比如MYSQL的密码,数据库名称等。仅仅需要修改以下信息:
volumes:
- C:/Users/zmzsg/Desktop/web靶场开发/pyhackme:/work
这里C:/Users/zmzsg/Desktop/web靶场开发/pyhackme改成你自己的项目目录
比如D:/hackstudy/pyhackme
还有一些环境变量需要修改
environment:
MYSQL_HOST: db
MYSQL_USER: root
MYSQL_PASSWORD: Pyhackme1024
MYSQL_DATABASE: hackme
REDIS_HOST: redis
ossak: 自己申请一个阿里云ak和sk
osssk:
MAIL_SERVER: smtp.163.com 要用什么邮箱服务器自己决定,用163则不用改
MAIL_PORT: 465
MAIL_USE_SSL: True
MAIL_USERNAME: 邮箱账号
MAIL_PASSWORD: SMTP临时授权码(不是邮箱密码)
MAIL_DEFAULT_SENDER: 邮箱账号
最主要就是oss所需的ak和sk,因为ssrf要用到。还有邮箱服务器设置,用户找回密码要用到。
完成配置后,执行docker-compose up -d即可
当然,我并没有一些初始化的业务数据,所以你部署完成之后,首页没有任何商品数据。你可以自己手动导入业务数据,步骤如下:
1.访问/admin/register,注册一个管理员账号
2.访问/admin/login,进行管理员身份认证
3.访问/admin/batch_goods ,导入项目目录中的importgoods.csv
之后,你可以看到首页变成这样了
后面我会针对pyhackme各个漏洞写wrirteup,这些内容适合新手或者不懂代码的脚本小子。如果该内容正适合你,不要忘记关注我公众号,同时在gitub中点下star。今天的内容就先分享到这里,感谢各位看官老爷的阅读。