长亭百川云 - 文章详情

web安全入门到入狱-Pyhackme靶场

minzhizhou

76

2024-07-06

各位看官老爷们,不知不觉距离上一篇文章又过了将近一个月了,我感觉再不发点文章,粉丝都要离我而去了。

今天给大家介绍一下我自己写的一个基于Flask框架开发的漏洞靶场,这对web安全入门非常有帮助。为什么这么说呢?原因有二

  1. **代码易读性:**Flask是基于python语言的,我相信大家能很容易读懂代码逻辑。而web漏洞原理大多数情况下是不受编程语言限制的,即python web、Go web、Java web都会存在这些web漏洞。当然每种编程语言也有自己特定的漏洞,比如SSTI漏洞仅限于Python,而很多反序列化漏洞是Java的专属,这些只有在特定编程语言里触发的漏洞我并没有将其归类到web漏洞中。如果让一个不懂web安全的人直接上来阅读Java代码可能会直接让人失去学习动力,而简单易懂的python代码可以很好的帮助初学者从代码层面理解漏洞本质。

  2. **针对漏洞设计了真实业务场景:**该项目几乎涵盖了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。今天的内容就先分享到这里,感谢各位看官老爷的阅读。

相关推荐
关注或联系我们
添加百川云公众号,移动管理云安全产品
咨询热线:
4000-327-707
百川公众号
百川公众号
百川云客服
百川云客服

Copyright ©2024 北京长亭科技有限公司
icon
京ICP备 2024055124号-2