Web 漏洞训练平台
实验目的
- 了解常见 Web 漏洞训练平台;
- 了解 常见 Web 漏洞的基本原理;
- 掌握 OWASP Top 10 及常见 Web 高危漏洞的漏洞检测、漏洞利用和漏洞修复方法;
实验环境
- WebGoat / Juice shop
- kali 2021.2
实验要求
WebGoat环境准备
-
在kali上装docker建议看看这个,黄大的实验准备,免得像我一样因为课程之前下了其他版本的docker而死活搞不定compose up
Linux谁都能参一脚搞得不同发行版之间的包乱糟糟的,以前都是听人吐槽,谁知道有天落自己头上了
-
查看docker状态sudo systemctl status docker
-
安装docker与docker-compose apt-get update && apt get install docker.io python3-pip pip3 install docker-compose
-
新建工作目录并切换至工作目录mkdir workspace && cd workspace/
-
开启docker服务 systemctl start docker
-
下载课程所需漏洞练习环境 git clone https://github.com/c4pr1c3/ctf-games.git --recursive
-
切换到相应目录下cd ctf-games/
-
单独更新子模块 git submodule init && git submodule update
-
启动 webgoat 系列服务 cd owasp/webgoat/ && docker-compose up -d
友情提示,之前要是像我一样是傻乎乎的不管啥版本号不版本的就随便乱装了docker,可以用sudo apt-get remove docker docker-engine docker.io卸载docker再重装……据我重装的信息显示,随便搞的和好好整的这两者之间差了150MB左右
再友情提示,别用阿里云的源 (¬_¬ ) 中科大或者清华的都行,不然你会在compose up的时候卡在3d725b7d6111这个包上死活下不了就是不停retry
- 查看当前容器状态是否正常 docker ps,确保是healthy
http://127.0.0.1:8087/WebGoat/login for webgoat 7.1
http://127.0.0.1:8088/WebGoat/login for webgoat 8
sudo lsof -i 4 -P -n -L [| portcode_like_8080]查看当前端口占用情况[或特定端口占用情况]
关于firefox原生代理管理不能走到burpsuite上的问题,在后面会有讲解。谁知道搞个环境就花了我几个小时呢…真的是能踩的坑都踩完了
实验过程
WebGoat 8.0
General
HTTP Basics
- 提示还是挺明显的,问题是这是POST还是GET报文以及magic number,F12查看报文,发现是POST,数字则直接在前端搜索一下magic就好了
点击"Go!",提示你已经解决了这个问题
看到这里我直接PTSD,所以这就是一个没有积分榜的CTF平台是吗
Authentication Flaws
Secure Passwords
- 这就是一个在线密码强度测试器,输一个足够复杂的密码就可以了
Cross-Site Scripting(XSS)
Cross Site Scripting
-
第二页题目翻译:打开一个新的标签页,试试看cookie一个域是不是一样的,你可以在新的标签页下,使用JavaScript:alert(document.cookie);替换地址栏中的内容
- 回车后发现完全没有任何改变,说明是正确的,输入yes即可
-
第七页题目翻译:哪些字段更容易遭受攻击?
- 信用卡处输入""(注意带引号,否则不成功);而在3位访问码那里就没效果
-
第十页题目翻译:在start.mvc#lesson/ 的基础上找后续路径
- 在前端源代码里面用route关键词一个个找,start.mvc#test
做到这我差不多回过味了,这个其实不是CTF,更像是一个教学平台,教你哪些地方的漏洞多容易被攻击
- 第十一页:通过上一题的路径获得函数的正确路径,也就是phoneHome函数并运行,通过F12获得代码的运行结果,输入输入框http://127.0.0.1:8088/WebGoat/start.mvc#test/%3Cscript%3Ewebgoat.customjs.phoneHome()
- 第12页答题即可,不多赘述了
Cross Site Scripting(stored)
还是注意看题,评论里有提示让我们用phoneHome函数,照图上输入会评论一个空白的评论,这时F12查看返回的数据,就能获得正确的数据了,将得到的数据submit即可
WebGoat 7.1
General
HTTP Basic
- 输入框输入guest点击GO!,发现输入框里的内容反序变成倒序的内容
- 输入框内为tseug,再次点击GO!,成功
说实话不是很清楚这道题想干嘛
Access Control Flaws
Using an Access Control Matrix
- 题目翻译:失败的基于角色的访问控制方案可能允许用户执行他/她所分配的角色不允许的访问,或者以某种方式允许权限升级到未授权的角色。
- 多换俩人随便用public试试,框上方会有提示这人的身份是什么,看到Larry具有Account manager权限,试一试就行了
Stage 1:Bypass Business Layer Access Control
- 题目翻译:作为普通员工“tom”,利用弱访问控制来使用“职员列表”页面中的“删除”功能。验证可以删除汤姆的个人资料。
- 自己尝试哪个用户登录的时候能找到删除按钮,我自己试出来Jerry作为hr是可以的
- 用burpsuite拦截下来操作,发现最重要的东西其实是这个删除简历操作标识action=DeleteProfile,drop这个操作,再以tom的身份登录,执行view的时候拦截操作,把最后一句换成action=DeleteProfiletom就能删掉自己了
Stage 3:Breaking Data LayerAccess Control
- 题目翻译:作为普通员工“tom”,利用弱访问控制来查看其他员工的个人资料。
- 还是用burpsuite对viewprofile操作按钮进行抓包分析可知通过修改employee_id值便可以实现对其他人简历的访问,我自己在以tom的身份登录之后,在返回员工列表的时候拦截操作,将id改成101就能得到通过的小绿标;尝试过不少次,发现权限确实只与id值有关,普通员工tom通过修改id值(比如经理moe的id值,101)可以越级访问hr,manager以及admin的简历。
Authentication Flaws
Password Strength
- 在所给网站测试破解密码的时间,输入结果,但是吧,首先它给的网站太老了,会被引导跳转到另外一个网站去,所以这个结果就出了点问题,比如输入123456,它的反馈是"立刻",我哪知道立刻是多久啊……试着填了0进去,但是不对,其他的答案也是,我估计是因为webgoat 7.1构建的时间比较古早了,或者最近网站更新太勤快了,这题作废
Forgot Password
- 直接看题目要求,说现在你的用户名是webgoat,最爱的颜色是红色,要找出另外一个用户的答案,直接暴力尝试,试到绿色的时候就成功了
Multi Level Login2
- 题目翻译:已知Joe的身份(Joe有一个有效的webgoat金融账户),作为Jane登录。
- 用Joe登录系统,填写完Tan#1之后,使用代理拦截HTTP请求,修改hidden_user的值为Jane再转发就可以了
Multi Level Login1
- 题目翻译:用户名密码都知道了,第一个tan也知道,但是第一个tan被用过了,不管怎样想办法黑进去吧
- 用Jane和tarzan登陆后,要求你输入的tan是第三个,但问题不大,就输入tan1的值15648,提交时用burpsuite拦截下来,将tan的次数换成1就可以了
Code Quality
Discover Clues in the HTML
- 提示的很明显了,直接F12网页源代码搜一下sign就找到注释的用户名密码admin adminpw,提交就成功
到这里webgoat就差不多了,有时间再做吧……
Juice Shop
- 切换到相应目录 cd workspace/ctf-games/owasp/juice-shop
- 启动juice-shop系列服务 docker-compose up -d
- 查看当前容器状态 docker ps
one star part
Score Board
- 找到隐藏的计分板页面,点击网站的选项卡,注意观察url的格式变化,推测出score board访问的url后缀为score-board,直接http://127.0.0.1:3000/#/score-board完事,正式开始
悄悄看了一眼网上大佬的解决方案,据说可以从源码中找到score-board的路径,但是我没找到
Confidential Document
- 在about us页面发现一个鬼迷鬼眼的链接,直接点击是不行的,因为你会真的跳转到他们"无聊的法律说明"去;用F12审查元素,发现文件存储路径ftp/,访问该路径,就可以发现并下载acquisitions.md机密文件
注意/ftp这个路径,后面要考(bushi
Bully Chatbot
- 真的是题如其名,不断发送coupon code霸凌它(指chatbot)以此获得优惠券
多一句嘴,太有意思了hhhhhh
Bonus Payload
DOM XSS
two star part
Admin Section
- 要我们绕过登陆验证,以管理员身份登陆商店,而且说比计分板藏得更深,那就还是查源代码的套路,关键词admin,确实找到了相关的路径,但是你直接输入是不行的,会显示你没有权限,那应该就是SQL注入的套路了
- 在用户名一栏敲个’,密码随便,发现抛出了一个异常,居然还给了我一个引发错误的奖励,也就是一星的Error Handling
- 用burpsuit抓取一下服务器的返回,在proxy栏下的http history里面分析后端的报错信息。分析可知在用户名处输入万用金句' or 1=1 --即可使后端的SQL表达式变为"SELECT * FROM Users WHERe email = '' or 1 =1 -- AND password = ...
Five-Star Feedback
- 删除顾客的五星评价,前提是已经登陆了administration账户
- 在administration页面(也就是上图)第一个五星评价旁边点一下垃圾桶标志即可成功删除,属于是顺道拿分了,就不多做截图了
Zero Stars
- 尝试提交零星评价,但是点进customer feedback发现最低允许提交的评价为1星
- 用burpsuite拦截一下评分操作,把rating改成0就行了
Weird Crypto
- 让你在页面内提交一个不安全的密码算法,这给我整不会了,还是在评论的那一个页面,随便输一个sha-1试一试,不行,换个des,也不行,反正试了不少个,最后试了一个md5成功了
Forgotten Developer Backup && Forgotten Sales Backup
- 要求访问http://127.0.0.1:3000/ftp/路径下不被允许文件格式的备份文件coupons_2013.md.bak和package.json.bak,通过加入后缀%2500.md用%2500暴力截断后缀名,绕过限制。
Easter Egg
- 要你找到他们藏起来的复活节彩蛋
- 通过上一个实验发现在/ftp下有一个eastere.gg的不知名文件,盲猜和复活节有关系,通过%2500,得到一段加密字符串: L2d1ci9xcmlmL25lci9mYi9zaGFhbC9ndXJsL3V2cS9uYS9ybmZncmUvcnR0L2p2Z3V2YS9ndXIvcm5mZ3JlL3J0dA== 那看到双等号肯定就是base64了嘛
- 解码得到: /gur/qrif/ner/fb/shaal/gurl/uvq/na/rnfgre/rtt/jvguva/gur/rnfgre/rtt 但是直接访问是错的,上网搜了一下题解得知需用ROT13解密,最后得到解码的地址:/the/devs/are/so/funny/they/hid/an/easter/egg/within/the/easter/egg
遇到的问题
- 在参照视频使用burpsuite时特别要注意,直接用firefox的原生代理服务配置是不行的,burpsuite中不会出现有关webgoat的相关记录,原因不明,解决方法是安装插件,例如foxyproxy
- 当然还有第二个解决办法,来自一篇博客,通过修改firefox的设置来关闭忽略本地地址代理的设置
就写到这吧……要是哪天心血来潮再说
参考链接
安装docker遇到问题时或许有用
还不换kali源?
往届作业
历史最全 WebGoat 8.0 通关攻略
国外博主的Juice shop做题博客