Skip to content

Latest commit

 

History

History
43 lines (29 loc) · 2.97 KB

README-zh.md

File metadata and controls

43 lines (29 loc) · 2.97 KB

Web CGI Exploits

License README README

这是我前几年写的和Web CGI相关的各种exp的集合。

原理

通常情况下,web的应用架构是这样分层的:

  1. web应用程序
  2. web框架
  3. 脚本语言解释器
  4. web容器(服务器)
  5. web前端反向代理(通常是nginx等等.)
  • 4 & 5 有可能是同一个东西,甚至有些时候3 & 4也可能是同一个东西。

可以把上面的内容想象成一个数据管道,每一个分层做一些处理和解析。请求和返回就在这么一来一回两个管道中生存和传递。每一层和下一层如何沟通通讯?相对而言比较复杂,通常会有一些标准,包括内存共享,socket通讯等等。不同语言有不同的实现。在34分层之间的通讯模式,通常这种被叫做CGI,fastcgi和python的wsgi都是常见的标准协议。 但是由于web容器和脚本语言的位置不同,因此在对通讯的使用和信任上并不完全一致。会有一些错误和误解存在。这也就给了我们很多机会,利用这里面的功能去挖掘漏洞,实现我们想要实现的功能。例如远程代码执行,端口转发等等。

Exploits

PHP

  • Fastcgi

    参考文章《PHP FastCGI 的远程利用》

    1. fcgi_exp.go:当fastcgi端口对外,或者配合SSRF漏洞时候,可以利用此exp进行远程代码执行.
    2. fcgi_jailbreak.php:对一些基于php自身配置形成沙盒的环境,可以利用此脚本进行越狱.
  • Apache Mod_php

    mod_php和其他cgi不太一致的地方在于,他是以模块形式加载在apache进程中的,因此他可以操作进程中的相关资源。而apache的工作模式又通常是fork一些worker进程,会带入主进程的一些文件句柄可供操作。利用这些可以做一些很不错的trick。具体可以参考曾经的文章:《PHP端口复用的利用》

    1. mod_php_port_reuse.php:复用你的当前80端口链接,生成一个交互式的shell,可以绕过一些防火墙.
    2. mod_php_port_proxy.pymod_php_port_reuse.php 共用,可以直接复用当前80端口链接,进行端口转发通讯.

Python

Python 通常来说主要使用的就是wsgi模式做统一接口。但是在具体实现上有uwsgigunicornscgimod_pythonfastcgi等多种。但是最常见的还是uwsgigunicorn这两个。其中uwsgi由于支持功能较多,通过协议直接传参,因此可以被利用。