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

2、《黑客与画家》完!

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

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

More...

关闭和开启Exchange 2010服务的命令脚本

net stop msexchangeadtopology /y
net stop msexchangefba /y
net stop msftesql-exchange /y
net stop msexchangeis /y
net stop msexchangesa /y
net stop iisadmin /y
net stop w3svc /y

#What does the script do?

net stop msexchangeadtopology /y
#Stops the "Microsoft Exchange Active Directory Topology Service" which will stop the following services

Microsoft Exchange Transport Log Search
Microsoft Exchange Transport
Microsoft Exchange Throttling
Microsoft Exchange Service Host
Microsoft Exchange Search Indexer
Microsoft Exchange RPC Client Access
Microsoft Exchange Replication
Microsoft Exchange Protected Service Host
Microsoft Exchange Mail Submission
Microsoft Exchange Mailbox Replication
Microsoft Exchange Mailbox Assistants
Microsoft Exchange File Distribution
Microsoft Exchange EdgeSync
Microsoft Exchange Anti-spam Update
Microsoft Exchange Address Book

It will also stop POP3, IMAP4 and Unified Messaging if those are enabled.

net stop msexchangefba /y
#stops the "Microsoft Exchange Forms-Based Authentication" service which does not have any dependencies

net stop msftesql-exchange /y
#stops the "Microsoft Search (Exchange)" service which does not have any dependencies

net stop msexchangeis /y
#stops the "Microsoft Exchange Information Store" service which does not have any dependencies

net stop msexchangesa /y
#stops the "Microsoft Exchange System Attendant" service which does not have any dependencies

net stop iisadmin /y
#stops the IIS admin service, which does not have any dependencies.

net stop w3svc /y
#stops the "World Wide Web Publishing" service, which may have any dependencies - on SBS this will also stop the Remote Desktop Gateway service, which could kick you out of the server if you are using the RWW to access the server.

If you are using a third party plug-in, then you may find that there is a dependency on that plug-in which can cause the script to fail. The /y at the end of each command should deal with it, but if you find that the third party service doesn't stop in time, adjust the script to include a delay. (Sleep is part of the Windows Resource Kit tools, if you don't have it installed on the server)

For example, this is a script used with an old version of McAfee Group Shield

net stop "McAfee GroupShield Exchange" /y
sleep 30
net stop msexchangefba /y
net stop msftesql-exchange /y
net stop msexchangeis /y
net stop msexchangesa /y
net stop iisadmin /y
net stop w3svc /y

Starting Exchange with a Script

Finally, you might also want a script to start Exchange again. This can be useful if you apply an update which requires a restart of the Exchange services, but don't need to restart the server. However starting the services is a little more complex as the less number of the services are dependant on other services. Therefore more services have to be started manually. Simply copy and paste it in to a new notepad document and save it as "start-exchange.cmd".

Remember to add POP3 and IMAP services if you are using those

net start "World Wide Web Publishing Service"
net start "Microsoft Exchange System Attendant"
net start "Microsoft Search  (Exchange)"
net start "Microsoft Exchange Information Store"
net start "Microsoft Exchange Unified Messaging"
net start "Microsoft Exchange Transport Log Search"
net start "Microsoft Exchange Transport"
net start "Microsoft Exchange Throttling"
net start "Microsoft Exchange Service Host"
net start "Microsoft Exchange Search Indexer"
net start "Microsoft Exchange RPC Client Access"
net start "Microsoft Exchange Replication"
net start "Microsoft Exchange Protected Service Host"
net start "Microsoft Exchange Mailbox Replication"
net start "Microsoft Exchange Mailbox Assistants"
net start "Microsoft Exchange Mail Submission"
net start "Microsoft Exchange Forms-Based Authentication service"
net start "Microsoft Exchange File Distribution"
net start "Microsoft Exchange EdgeSync"
net start "Microsoft Exchange Anti-spam Update"
net start "Microsoft Exchange Address Book"

http://exchange.sembee.info/2010/shutdown-script.asp

More...

0x00 背景

CRLFInjection很少遇见,这次被我逮住了。我看zone中(http://zone.wooyun.org/content/13323)还有一些同学对于这个漏洞不甚了解,甚至分不清它与CSRF,我详细说一下吧。

CRLF是”回车+换行”(\r\n)的简称。在HTTP协议中,HTTPHeader与HTTPBody是用两个CRLF分隔的,浏览器就是根据这两个CRLF来取出HTTP内容并显示出来。所以,一旦我们能够控制HTTP消息头中的字符,注入一些恶意的换行,这样我们就能注入一些会话Cookie或者HTML代码,所以CRLFInjection又叫HTTPResponseSplitting,简称HRS。

HRS是比XSS危害更大的安全问题,具体是为什么,我们往下看。

对于HRS最简单的利用方式是注入两个\r\n,之后在写入XSS代码,来构造一个xss。

0x01 实例

举个例子,一般网站会在HTTP头中用Location:http://baidu.com这种方式来进行302跳转,所以我们能控制的内容就是Location:后面的XXX某个网址。

所以一个正常的302跳转包是这样:

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

但如果我们输入的是

http://www.sina.com.cn%0aSet-cookie:JSPSESSID%3Dwooyun

注入了一个换行,此时的返回包就会变成这样:

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=wooyun

这个时候这样我们就给访问者设置了一个SESSION,造成一个“会话固定漏洞”。

当然,HRS并不仅限于会话固定,通过注入两个CRLF就能造成一个无视浏览器Filter的反射型XSS。

比如一个网站接受url参数http://test.sina.com.cn/?url=xxx,xxx放在Location后面作为一个跳转。如果我们输入的是

http://test.sina.com.cn/?url=%0d%0a%0d%0a<imgsrc=1onerror=alert(/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: <img src=1 onerror=alert(/xss/)>

之前说了浏览器会根据第一个CRLF把HTTP包分成头和体,然后将体显示出来。于是我们这里这个标签就会显示出来,造成一个XSS。

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可实现很多功能,突破各种基于统计的防护设施.例如:

突破撞库防护;

突破暴力破解防护;

突破地址猜解防护;

突破指纹猜解防护;

等等

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