1、《鸟哥的私房菜(服务器架设篇)》30%

2、《黑客与画家》完!

3、《史蒂夫·乔布斯传完!

4、《黑客大曝光:Web应用程序安全(原书第三版)》30%

More...

0x00 背景

这个估计很多同学看了不屑,认为是烂大街的东西了:

.htaccess文件构成的PHP后门

那么我来个新的吧:.user.ini。它比.htaccess用的更广,不管是nginx/apache/IIS,只要是以fastcgi运行的php都可以用这个方法。我的nginx服务器全部是fpm/fastcgi,我的IIS php5.3以上的全部用的fastcgi/cgi,我win下的apache上也用的fcgi,可谓很广,不像.htaccess有局限性。

0x01 .user.ini

那么什么是.user.ini?

这得从php.ini说起了。php.ini是php默认的配置文件,其中包括了很多php的配置,这些配置中,又分为几种:PHP_INI_SYSTEM、PHP_INI_PERDIR、PHP_INI_ALL、PHP_INI_USER。 在此可以查看:http://php.net/manual/zh/ini.list.php 这几种模式有什么区别?看看官方的解释:

clip_image001

其中就提到了,模式为PHP_INI_USER的配置项,可以在ini_set()函数中设置、注册表中设置,再就是.user.ini中设置。这里就提到了.user.ini,那么这是个什么配置文件?那么官方文档在这里又解释了:

除了主 php.ini 之外,PHP 还会在每个目录下扫描 INI 文件,从被执行的 PHP 文件所在目录开始一直上升到 web 根目录($_SERVER['DOCUMENT_ROOT'] 所指定的)。如果被执行的 PHP 文件在 web 根目录之外,则只扫描该目录。

在 .user.ini 风格的 INI 文件中只有具有 PHP_INI_PERDIR 和 PHP_INI_USER 模式的 INI 设置可被识别。

这里就很清楚了,.user.ini实际上就是一个可以由用户“自定义”的php.ini,我们能够自定义的设置是模式为“PHP_INI_PERDIR 、 PHP_INI_USER”的设置。(上面表格中没有提到的PHP_INI_PERDIR也可以在.user.ini中设置)

实际上,除了PHP_INI_SYSTEM以外的模式(包括PHP_INI_ALL)都是可以通过.user.ini来设置的。

而且,和php.ini不同的是,.user.ini是一个能被动态加载的ini文件。也就是说我修改了.user.ini后,不需要重启服务器中间件,只需要等待user_ini.cache_ttl所设置的时间(默认为300秒),即可被重新加载。

然后我们看到php.ini中的配置项,可惜我沮丧地发现,只要稍微敏感的配置项,都是PHP_INI_SYSTEM模式的(甚至是php.ini only的),包括disable_functions、extension_dir、enable_dl等。 不过,我们可以很容易地借助.user.ini文件来构造一个“后门”。

Php配置项中有两个比较有意思的项(下图第一、四个):

clip_image002

auto_append_file、auto_prepend_file,点开看看什么意思:

clip_image003

指定一个文件,自动包含在要执行的文件前,类似于在文件前调用了require()函数。而auto_append_file类似,只是在文件后面包含。使用方法很简单,直接写在.user.ini中:

auto_prepend_file=01.gif

01.gif是要包含的文件。

所以,我们可以借助.user.ini轻松让所有php文件都“自动”包含某个文件,而这个文件可以是一个正常php文件,也可以是一个包含一句话的webshell。

测试一下,我分别在IIS6.0+Fastcgi+PHP5.3和nginx+fpm+php5.3上测试。 目录下有.user.ini,和包含webshell的01.gif,和正常php文件echo.php:

clip_image004

clip_image005

访问echo.php即可看到后门:

clip_image006

Nginx下同样:

clip_image007

clip_image008

那么,我们可以猥琐地想一下,在哪些情况下可以用到这个姿势? 比如,某网站限制不允许上传.php文件,你便可以上传一个.user.ini,再上传一个图片马,包含起来进行getshell。不过前提是含有.user.ini的文件夹下需要有正常的php文件,否则也不能包含了。 再比如,你只是想隐藏个后门,这个方式是最方便的。

0x02 参考文献:

· http://php.net/manual/zh/ini.list.php

· http://php.net/manual/zh/configuration.changes.modes.php

· http://php.net/manual/zh/configuration.file.per-user.php

· http://php.net/manual/zh/configuration.changes.php

1.前言

在渗透测试和安全扫描工作中,发现越来越多站点部署了应用防护系统或异常流量监控系统,其中包括:WEB应用防火墙(软件WAF、硬件WAF、云WAF)、入侵检测系统、入侵防御系统、访问监控系统等。很多防护系统不仅可实时检测攻击和拦截,并且具备自动阻断功能。当系统检测到某些IP在特定时间段内产生大量攻击行为时会开启阻断功能,阻断该IP在一定时间内的任何访问。

常见应用防护系统和异常流量监控系统的阻断策略主要有以下几种:

- 单IP访问频率

- 单IP+URL访问频率

- 单IP+COOKIE特定时间段内攻击次数

- 单IP造成可疑或攻击行为频率

- 单IP特定时间段内触发HTTP404状态次数

- 识别扫描器暴力扫描行为(扫描器指纹)

2. 分布式漏洞扫描

2.1分布式漏洞扫描基本思路

通过自开发的“代理分发程序”,将扫描器发送的大量测试请求以自轮询的方式分发给成千上万台HTTP代理服务器或webshell http proxy。通过该方法把扫描器的大量测试请求平均负载到多台中间代理服务器上,这样防护系统通过判断访问频率和攻击频率的方式都无法触发阻断策略,可达到自动化扫描的目的。同时,通过在中间加一层BURP的过滤,可将各个扫描器的特殊指纹擦除,防护系统更加难以判断攻击行为。

分布式漏洞扫描的整体框架图如下:

clip_image001[1]

2.2常见扫描器及漏洞检测工具

漏洞扫描器根据功能和特点分为多种类型,主要总结为以下几类:

#全能应用漏洞扫描器

- AcunetixWeb Vulnerability Scanner

- IBMAppscan

- HPWebInspect

- Netsparker

- Nussus

- W3af

- BurpSuite

- N-Stalker

#特定漏洞工具

- Sqlmap

- Havij

- Pangolin

- Safe3

#目录猜解工具

- DirBuster

- wwwscan

- wscan

2.3扫描器指纹擦除

利用BURP擦除漏洞扫描器指纹

利用BURP的请求修订功能可将数据流中的扫描器指纹信息进行擦除,排除明显的扫描行为特征。

开启Burp,进入“Proxy——>Options”中的“Match and Replace”功能将扫描器指纹信息消除,扫描器指纹信息大多包含Http头部字段、http参数值、COOKIE特殊参数等如下图:

clip_image002

clip_image002[1]

以下总结部分常见应用漏洞扫描器的指纹:

AcunetixWeb Vulnerability Scanner指纹特征

特征一:

请求的HTTP头部字段包含以下几种自定义字段名:

Acunetix-Aspect

Acunetix-Aspect-Password

Acunetix-Aspect-Queries

特征二:

请求的参数值中包含字符串特征:

acunetix_wvs_security_test

特征三:

请求的URI地址包含字符串特征:

/acunetix-wvs-test-for-some-inexistent-file

特征四:

请求的COOKIE参数名包含字符串特征:

acunetixCookie

HPWebInspect指纹特征

特征一:

请求的HTTP头部字段包含以下几种自定义字段名:

X-WIPP

X-RequestManager-Memo

X-Request-Memo

X-Scan-Memo

特征二:

请求COOKIE参数名包含特征:

CustomCookie

Netsparker指纹特征

特征一:

请求中的参数值包含字符串:

netsparker

2.4HTTP代理分发程序

HTTP代理分发程序用于将来自漏洞扫描器的大量测试请求和流量平均的引流到多个代理IP地址或者webshell的代理IP,通过将大量的扫描流量分散到大量代理IP上,可规避防护及监控系统的阻断策略,从而顺利实施扫描测试。

抓取大量代理服务器IP地址,并提取出针对目标站点可访问的代理地址形成“有效代理列表”。分发程序从“有效代理列表”中依次提取代理地址,每发送一个测试请求即切换代理IP,并进行轮询分发。

3. 总结

利用大量的开放匿名代理IP可实现很多功能,突破各种基于统计的防护设施.例如:

突破撞库防护;

突破暴力破解防护;

突破地址猜解防护;

突破指纹猜解防护;

等等

引用黑防的一句恒久远永流传的话——在攻与防的对立统一中寻求突破。欢迎交流攻防战术。

在使用托管代码调用非托管代码时,发生“对PInvoke函数“UseTwiHikVisionDllTest!UseTwiHikVisionDllTest.TwiHikVision::GetFirstPic”的调用导致堆栈不对称。原因可能是托管的PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配。”

解决方法:

添加属性: CallingConvention=CallingConvention.Cdecl

如:

[DllImport("AspriseOCR.dll", EntryPoint = "OCRpart", CallingConvention = CallingConvention.Cdecl)]
static extern IntPtr OCRpart(string file, int type, int startX, int startY, int width, int height);

http://hackingdemystified.com/ios-course/