由%5c爆库漏洞研究的绝对路径,相对路径和虚拟目录

本文探讨了IE浏览器特性对URL路径的影响,特别是如何处理斜杠符号以确保正确访问Web资源。文章还介绍了如何利用编码技巧避免路径转换问题,并讨论了在IIS服务器环境下,相对路径与绝对路径的区别及其应用。

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

通常情况下,数据库连接文件中的server.mappath()方法,可以正常获得物理路径,但是在浏览器中的连接被修改提交后,网页的相对路径就发生了变化,重而使得路径报错,报出数据库信息.

ie特性,在浏览器中提交的连接地址中包含\浏览器会自动把 \ 转换为 /,重而访问到正确的连接地址。但是对于/小小的编码转换,就可避免ie的自动转化 %5是\的十六进制编码,当iis服务器收到用户提交的信息并作出解析时,会将%5c还原成\于是在iis服务器中,用户提交的网址的相对路径就变成了"asp\test.asp"或"asp\conn.asp"... 

 

网站服务器中,"相对路径"就是指相对于Web根目录的目录路径。例如D:\Web\在根目录建立 一个名为asp的目录,asp就是相对于D:\Web的一级子目录。对应到网站连接上来看的话,D:\Web\对应的就是"http://localhost"而"asp"就是相对于“http://localhost”的一级目录。因此,在web服务中访问asp目录是,只需要在浏览器中输入相对路径http://localhost/asp即可

 

所谓的绝对路径就是在服务器磁盘 中的真实路径,这里aso目录的绝对路径就是D :\Web\asp\是一个二级目录

 

在iis中还有一个特殊的目录路径----'虚拟目录".每个Web服务器可以重多个目录发布,Web服务器可以有一个宿主目录和任意数量的其他发布目录,其他发布目录就被成虚拟目录,上面的例子Web服务的根目录为D:\Web\通过iis虚拟目录功能,可以发布一个论坛服务,论坛程序可以位于任意路径,如在E:\bbs.通过iis虚拟目录设置,人能把bbs转化为Web目录下,直接用http:..localhost/bbs/进行访问

使用虚拟目录时,此目录指向一个绝对地址的物理路径。在iis中,在iis中,为了辨别当前访问的是否问虚拟目录,通常可以查询每个目录是否指向一个物理路径,而进行查询判断时,是以连接中\作为符号标记的。也就是说,当iis获取某个目录时,如果碰到 \ 符号,则将  \ 之后的路径作为目录的绝对路径,而忽略 \ 之前       绝对路径信息.

 

 

conn.asp数据库连接文件中,Data Source=server.MapPath("ccf.mdb")

server.MapPath()方法的作用就是把相对路径转换为物理上的绝对路径,进行数据读写。获取数据库文件的路径时,读取的路径为Web根目录+相对目录+指定的路径。

 

 

<think>我们有一段URL编码的数据,需要逐步解码。URL编码的规则是%后跟两位十六进制数表示一个字符。我们可以使用编程语言或者手动替换来解码,但这里数据较长且嵌套,手动替换容易出错,建议使用编程方式。 观察数据,发现有多层编码:最外层是%7B...%7D,对应{"...}",而内部还有嵌套的编码,比如%22对应双引号,%3A对应冒号,%2C对应逗号,%5C对应反斜杠(但这里可能是转义的双引号),%7B对应左花括号,%7D对应右花括号等。 由于数据是字符串形式,且内部有多次编码的迹象(例如,在已经编码的字符串内部又出现编码),我们需要进行多次解码直到得到可读的JSON。 步骤: 1. 首先,对给出的整个字符串进行一次URL解码,得到第一层字符串。 2. 观察解码后的字符串,如果内部还有URL编码的字符(如%22,%7B等),则可能需要再次解码,直到没有URL编码的字符。 但是注意:在JSON字符串中,双引号会被转义为\",而在URL编码中,双引号是%22。在解码过程中,我们可能会遇到转义符(反斜杠)的情况,比如\",这实际上是JSON字符串中的合法转义,不需要再进行URL解码。 因此,我们只需要进行一次URL解码,然后尝试解析为JSON对象。在JSON对象中,某些字段的值可能仍然是字符串形式的JSON,这时我们需要再次解析。 具体到给定的字符串: 原始字符串:%7B%22msgType%22%3A%223%22%2C%22msg%22%3A%22%7B%5C%22code%5C%22%3A4%2C%5C%22isBle%5C%22%3Afalse%2C%5C%22softBusData%5C%22%3A%7B%5C%22data%5C%22%3A%7B%5C%22transactionId%5C%22%3A%5C%22hgjhgkjhfkjhlkjhd%5C%22%2C%5C%22fields%5C%22%3A%5B%7B%5C%22field%5C%22%3A%5C%22904%5C%22%2C%5C%22cmd%5C%22%3A%5C%22logType%3D0%5C%22%7D%2C%7B%5C%22field%5C%22%3A%5C%22903%5C%22%2C%5C%22cmd%5C%22%3A%5C%22day%3D0%5C%22%7D%5D%2C%5C%22taskState%5C%22%3A10%2C%5C%22followDevices%5C%22%3A%5B%5D%2C%5C%22debugStartTime%5C%22%3A1751437907955%2C%5C%22debugPlanEndTime%5C%22%3A1751438507955%2C%5C%22debugEndTime%5C%22%3A0%2C%5C%22createTime%5C%22%3A1751437907955%2C%5C%22updateTime%5C%22%3A1751437907955%2C%5C%22deviceIndex%5C%22%3A0%7D%2C%5C%22taskType%5C%22%3A%5C%22CommunicateRada%5C%22%7D%7D%22%7D 我们使用一次URL解码,将%XX替换为对应的字符。 解码过程(使用Python示例): import urllib.parse decoded_str = urllib.parse.unquote(encoded_str) 解码后,我们得到: { "msgType": "3", "msg": "{\"code\":4,\"isBle\":false,\"softBusData\":{\"data\":{\"transactionId\":\"hgjhgkjhfkjhlkjhd\",\"fields\":[{\"field\":\"904\",\"cmd\":\"logType=0\"},{\"field\":\"903\",\"cmd\":\"day=0\"}],\"taskState\":10,\"followDevices\":[],\"debugStartTime\":1751437907955,\"debugPlanEndTime\":1751438507955,\"debugEndTime\":0,\"createTime\":1751437907955,\"updateTime\":1751437907955,\"deviceIndex\":0},\"taskType\":\"CommunicateRada\"}}" } 注意,msg字段的值是一个字符串,这个字符串是一个JSON格式的字符串(包含转义的双引号)。因此,我们需要将msg字段的值再解析一次JSON。 所以,完整解码后应该是: { "msgType": "3", "msg": { "code": 4, "isBle": false, "softBusData": { "data": { "transactionId": "hgjhgkjhfkjhlkjhd", "fields": [ { "field": "904", "cmd": "logType=0" }, { "field": "903", "cmd": "day=0" } ], "taskState": 10, "followDevices": [], "debugStartTime": 1751437907955, "debugPlanEndTime": 1751438507955, "debugEndTime": 0, "createTime": 1751437907955, "updateTime": 1751437907955, "deviceIndex": 0 }, "taskType": "CommunicateRada" } } } 现在,我们将按照这个步骤进行解码,并输出最终的JSON结构。 由于问题要求恢复数据,我们直接给出解码后的JSON字符串。 注意:我们不需要执行代码,而是描述解码过程结果。但为了准确,这里用代码思路解释。 最终,我们输出解码后的JSON字符串(美化格式)。</think>### URL编码数据恢复结果 经过URL解码后,原始数据恢复如下(已格式化): ```json { "msgType": "3", "msg": { "code": 4, "isBle": false, "softBusData": { "data": { "transactionId": "hgjhgkjhfkjhlkjhd", "fields": [ { "field": "904", "cmd": "logType=0" }, { "field": "903", "cmd": "day=0" } ], "taskState": 10, "followDevices": [], "debugStartTime": 1751437907955, "debugPlanEndTime": 1751438507955, "debugEndTime": 0, "createTime": 1751437907955, "updateTime": 1751437907955, "deviceIndex": 0 }, "taskType": "CommunicateRada" } } } ``` ### 关键解码说明: 1. **核心解码映射**: - `%7B` → `{`(左花括号) - `%22` → `"`(双引号) - `%3A` → `:`(冒号) - `%2C` → `,`(逗号) - `%5C%22` → `\"`(转义双引号) - `%5B` → `[`(左方括号) - `%5D` → `]`(右方括号) 2. **数据结构分析**: - 包含设备调试任务信息(`taskType: "CommunicateRada"`) - 时间戳均为毫秒级(如`1751437907955`对应**2025-07-01 07:31:47 UTC**) - 包含两个配置字段: - 字段904:日志类型设置(`logType=0`) - 字段903:天数设置(`day=0`) 3. **特殊解码处理**: - 嵌套JSON中的转义双引号`%5C%22`需双重解码 - 空数组`%5B%5D`直接解码为`[]`
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值