1.Nginx源码分析 - HTTP模块篇 - HTTP Request解析过程
2.中间件安全之Nginx渗透
3.body_filter_by_lua中对ngx.arg[1]截取过长导致文件下载速度会一直下降?
Nginx源码分析 - HTTP模块篇 - HTTP Request解析过程
深入解析Nginx HTTP模块的HTTP Request解析过程,从ngx_http_wait_request_handler函数开始,直至解析完成。解析流程如下:
首先,Nginx通过ngx_http_wait_request_handler等待HTTP请求数据,设计亮点在于其能连续等待TCP管道中的源码编辑器如何做关卡数据,直至触发read事件,且在未读取数据时自动清理buf内存,有效防止内存暴涨。
接下来,ngx_http_process_request_line与ngx_http_read_request_header共同解析请求行与头部信息。其中,ngx_http_read_request_header使用系统的recv函数循环接收数据,通过回调函数os/ngx_recv完成。
随后,mvc中model源码ngx_http_process_request_headers负责解析HTTP头部数据,如Host与Accept-Language等。
ngx_http_process_request设定了read和write的回调函数ngx_http_request_handler,通过状态机判断事件类型,调用HTTP模块的filter链,包括header和body链两部分。filter链中,ngx_http_request_handler根据事件状态调用相应的回调函数。
解析过程中,ngx_http_run_posted_requests用于处理子请求,将请求链内容合并到主请求上,尽管此过程可能会稍降性能,因为需要重新走一遍write的回调函数ngx_http_core_run_phases。
最后,苹果内部工具 源码解析过程的核心在于ngx_http_handler函数,该函数主要用于设置write事件回调函数,即ngx_http_core_run_phases。
至此,完整的HTTP Request解析流程在Nginx的HTTP模块中得以清晰展现。
中间件安全之Nginx渗透
默认情况下,网站主目录在html文件中,但使用小皮搭建时,根目录被重新设置。在nginx\conf\nginx.conf文件中查看目录结构。
在Linux环境下,执行版本查看。
文件解析漏洞发生在Nginx中php配置不当。与Nginx版本无关,android 树莓派源码但在高版本php中,security.limit_extensions引入使漏洞难以成功利用。已上传恶意1.jpg文件,访问/1.jpg/xxx.php,路径修复cgi.fix_pathinfo=1后,Nginx将其解析为php文件传给php-cgi程序,但程序将其解析为1.jpg并执行。
使用Win7和phpstudy搭建复现环境,下载安装即可。切换版本为IP为...。
创建1.jpg文件,网站访问该文件,修改访问URI。成功解析文件。m821 源码
Nginx的处理程序与FastCGI处理程序不同,导致漏洞。Nginx拿到URI为/1.jpg/xxx.php后,认为是php文件转交给PHP FastCGI处理程序,但FastCGI程序识别不存在,按照规则删去最后的路径,将/1.jpg当作要执行的文件,成功解析。
cgi.fix_pathinfo为php选项,默认开启为1,修理路径,对路径URI进行处理。当php遇到文件路径为/1.jpg/xxx.php/ss.时,删除最后的/ss.,判断/1.jpg/xxx.php是否存在,若存在则将路径当作/1.jpg/xxx.php/ss.文件,若不存在继续删除路径。
目录遍历漏洞是由于Nginx配置问题导致的,与解析漏洞环境相同。在网站根目录下创建文件夹test,访问该文件夹回显。修改nginx.conf配置文件,访问即可。将autoindex off改为autoindex on。
空字节代码执行漏洞发生在使用PHP-FastCGI执行php时,URL中遇到%空字节,与FastCGI处理不一致,可在非php文件中嵌入php代码。影响版本一般需配合文件上传进行。复现环境信息,开启Nginx,网站目录下添加1.jpg文件,访问该文件,抓包添加%,发送请求。
CRLF注入漏洞的成因是Nginx将传入的url解码,对其中的%0a%0d替换成换行符,导致后面的数据注入至头部。环境设置https跳转,修改nginx.conf文件,构造url访问,抓包发送,恶意利用。
文件名逻辑漏洞(CVE--)允许绕过访问限制、代码执行。漏洞原理是非法字符空格和截止符导致Nginx解析URI时的有限状态机混乱。影响版本为nginx 0.8. – 1.5.6。创建1.jpg文件上传,抓包添加空格,访问文件,发送修改后的url。
整数溢出漏洞(CVE--)存在于Nginx的range filter中,通过特殊构造的HTTP头恶意请求引发。影响程度低,危害程度低,影响范围为Nginx 0.5.6 – 1..2。
解析漏洞总结,介绍三个解析漏洞及其复现操作和参考。
body_filter_by_lua中对ngx.arg[1]截取过长导致文件下载速度会一直下降?
最近在测试中发现通过nginx下载文件时的速度显著低于理论预期。起初怀疑是公网带宽限制,但检查公网出口流量监控后发现并非如此。内网使用wget测试也未达到理论速度。在本地搭建openresty后发现下载速度正常,这提示线上配置可能对速度有影响。线上配置记录响应body的日志,而本地为简单的静态资源访问。测试结果如下:使用最简单配置,下载2G文件耗时秒,平均速度MB/s。添加body_filter_by_lua后,下载速度从MB/s急剧下降至1MB/s,平均速度降至1.MB/s,耗时分钟秒。将ngx.arg[1]截取长度从改为后,下载速度有所提升,耗时2分钟秒,平均速度.9MB/s。对比测试显示,body_filter_by_lua配置显著影响文件下载速度,但具体原因仍待探索。