
虽然知道什么是 URL编码 ,之前也学习过 SSRF漏洞 ,但是对 SSRF漏洞 中要进行一次URL编码或者两次URL编码甚是疑惑。 相信很多如我一般初学的小伙伴也有此疑惑。因此,特意学习探讨,于此总结。
首先认认真真的了解URL编码。
URL编码是一种将URL中的特殊字符转换为可安全传输和处理的字符序列的过程。它的主要目的是确保 URL 中的特殊字符不会与 URL 本身的语义产生冲突,同时还可以避免在网络传输和处理过程中引发错误。
#会被编码为%23,&会被编码为%26。/会被编码为%2F,?会被编码为%3F。中国会被编码为%E4%B8%AD%E5%9B%BD(UTF-8编码)。url编码由%+字符十六进制编码构成。例如:
字符 | 十六进制 | url编码 |
|---|---|---|
a | 61 | %61 |
# | 23 | %23 |
/ | 2f | %2f |
% | 25 | % |
SSRF(Server-Side Request Forgery,服务器端请求伪造)是一种由攻击者通过欺骗服务器发起伪造的请求的网络安全漏洞。
SSRF的原理基于服务器未对用户输入进行充分验证和过滤。攻击者通过向服务器发送特制的请求,来引导服务器访问攻击者指定的目标地址,从而实现攻击的目的。 下面是SSRF攻击的一般原理:
有四点需要注意:
有几次编码就要有几次解码,这样才能获得正确的信息。 所以在解决url编码问题时,需要思考的问题就是一共进行了几次编码。 所以当使用工具构造payload时需要进行一次url编码,而使用浏览器就不需要,因为浏览器会默认编码一次。

在浏览器直接搜索%,会将其编码成%25。
当然,不对%编码也可以搜索的,但是在以下情况就会出错:

实际想搜索的是%25,url编码后是%2525,如果使用hackbar工具发送请求且不对%编码(即删掉一个25),就会变成搜索%,而不是%25。


再比如搜索#号,不对其url编码就会跳到百度首页,这是因为#在url中是锚点。所以相当于搜索空字符,就会跳到百度首页。
在多数的SSRF中,是要对payload进行多次编码的。(不考虑应用程序单独的url解码)
因此,需要编码两次。手动编码一次,浏览器编码一次。如果使用工具,则需要进行两次手动编码。
这是一个简单的SSRF漏洞靶场,会向内网其他服务器进行sql注入。


直接看payload:
--浏览器
http://172.72.23.23:80?id=1'+and+1=2+union+select+1,2,3,4+%23
--工具
http%3A%2F%2F172.72.23.23%3A80%3Fid%3D1%27%2Band%2B1%3D2%2Bunion%2Bselect%2B1%2C2%2C3%2C4%2B%2523

如有错误,欢迎大佬指正!!!