高防服务器

CRLF注入

概念

CRLF注入漏洞,是因为Web应用没有对用户输入做严格验证,导致攻击者可以输入一些恶意字符。攻击者一旦向请求行或首部中的字段注入恶意的CRLF,就能注入一些首部字段或报文主体,并在响应中输出,所以又称为HTTP响应拆分漏洞(HTTP Response Splitting),简称HRS。

漏洞出现场景

PHP CRLF

PHP版本需要在4.2.1~5.1.2之间 CVE-2002-1783

  • 检测url:http://x.x.x.x:8080/crlf.php?… crlf=True
  • 响应头如果包含crlf=True 就存在crlf注入

NGINX错误配置模拟复现

nginx配置

server {     listen 8080;     root /usr/share/nginx/html;     index index.html;     server_name _;     location /crlf {         return 302 https://$host$uri;     } }
  • 检测url:http://x.x.x.x:9080/crlf/%0d%…

nginx和php是用Location: http://baidu.com这种方式来进行302跳转,所以我们能控制的内容就是Location:后面的XXX某个网址,通过Set-Cookie我们就给访问者设置了一个固定SESSION,如果某应用刚好可以受这个参数控制,那将会有重大影响,否则,该漏洞的危害比较小。。当然,HRS并不仅限于会话固定,通过注入两个CRLF就能造成一个无视浏览器Filter的反射型XSS

HTTP/1.1 302 Moved Temporarily
Date: Fri, 27 Jun 2014 17:52:17 GMT
Content-Type: text/html
Content-Length: 154
Connection: close
Location: http://www.sina.com.cn
Set-cookie: JSPSESSID=wooyu

python和nodejs实际上都是修改请求头,似乎对渗透没什么用

Python urllib CRLF

Python的crlf实际是上用来修改请求头
Python 2.x版本至2.7.16版本中的urllib2
Python 3.x版本至3.7.2版本中的urllib

  • 检测url:http://x.x.x.x.:8080?a=1 HTTP/1.1rnCRLF-injection: True”

Nodejs CRLF

nodejs的crlf实际上也是修改请求头
2018 年有研究者发现,当Node.js使用 http.get 向特定路径发出HTTP请求时,发出的请求实际上被定向到了不一样的路径!深入研究一下,发现这个问题是由Node.js将HTTP请求写入路径时,对Unicode字符的有损编码引起的。当结果字符串被编码为 latin1 写入路径时,这些字符将分别被截断为 “r”(%0d)和 “n”(%0a):

Buffer.from(‘http://47.101.57.72:4000/u{010D}u{010A}/WHOAMI’, ‘latin1’).toString()
‘http://47.101.57.72:4000/rn/WHOAMI’

这个bug已经在Node.js10中被修复,如果请求路径包含非Ascii字符,则会抛出错误。但是对于 Node.js v8 或更低版本,仍然存在该问题

  • 检测url:http://x.x.x.x:8080/u0120HTTP/1.1u010Du010ASet-Cookie:u0120PHPSESSID=whoamiu010Du010Atest:

参考资料

https://blog.csdn.net/u014029…
https://blog.csdn.net/weixin_…
https://blog.csdn.net/huangyo…
https://cloud.tencent.com/dev…
https://blog.csdn.net/rpsate/…
https://blog.csdn.net/weixin_…

[温馨提示:高防服务器能助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。]

[图文来源于网络,不代表本站立场,如有侵权,请联系高防服务器网删除]