日志样式

由Roarctf


前端先解析第一个cl为68,就会把下面的“num=1GET/calc.php?num=1 HTTP/1.1”都作为凯发k8国际手机恳求的内容。可是后端会解析第二个cl,也便是说后端只解析“num=1” 后边的恳求体就作为下次恳求的恳求头。这样就会引发私运。

CL-TE

便是当收到存在两个恳求头的恳求包时,前端代理服务器只处理Content-Length这一恳求头,而后端服务器会疏忽掉Content-Length,处理Transfer-Encoding这一恳求头。

Content-Length:123
Transfer-Encoding: chunked

这儿的chunked对恳求内容进行分块编码,并且直到有rn的时分才完毕。

TE-CL

所谓TE-CL,便是当收到存在两个恳求头的恳求包时,前端代理服务器处理Transfer-Encoding这一恳求头,而后端服务器处理Content-Length恳求头。

在calc的题目中:

 ?php
error_reporting;
if){ 
 show_source;
 }else{ 
 $str =$_GET[ num  
 $blacklist= [   ,  t ,  r ,  n , ,  ,  ` ,  [ ,  ] , $ , \ , ^  
 foreach { 
 if) { 
 die( what are you want to do?  
 } 
 } 
 eval( echo .$str. 
? 

这儿后端对特殊符号做了一些过滤,并且除了这个过滤,还有waf阻拦字符串的输入。然后就想使用http私运来绕过。

由于这儿是get恳求,而content-length是在post才会有用,所以这儿跟cl其实关系不大,可是使用起来也不会报错。

这儿我最开端便是想用cl和chunked结合起来去绕过。



这儿的cl设置多少都无所谓,只需设置了chunked,并且最后由rn那么就能成功履行,假如没有rn那么就会一向waiting。

所以我想着能不能从头结构一个恳求头来试试:


这儿第一个恳求头那必定得是keep-alive,然后设置content-length为5。意图是让tcp可以继续呼应,并且这儿服务器会由于cl为5只辨认num=1,后边的一大串就被组织到了下一轮的恳求里。


提到这儿,感觉这道题其实没怎么使用到http私运,首要仍是用分块传输chunked方法来绕过waf。可是究竟也是经过这个点学习了http私运的常识,所以就记录下来。

假如各位有看到不对的当地,还请指正!

 


本文作者:星盟安全团队