IIS

IIS是Internet Information Services的缩写,意为互联网信息服务,是由微软公司提供的基于运行Microsoft Windows的互联网基本服务。IIS目前只适用于Windows系统,不适用于其他操作系统。
解析漏洞
IIS 6.X
基于文件名

该版本 默认会将 *.asp;.jpg 此种格式的文件名,当成Asp解析,原理是 服务器默认不解析; 号及其后面的内容,相当于截断。

基于文件夹名

该版本 默认会将 *.asp/目录下的所有文件当成Asp解析。

另外,IIS6.x除了会将扩展名为.asp的文件解析为asp之外,还默认会将扩展名为.asa,.cdx,.cer解析为asp,从网站属性->主目录->配置 可以看出,他们都是调用了asp.dll进行的解析。

修复建议

由于微软并不认为这是一个漏洞,也没有推出IIS 6.0的补丁,因此漏洞需要自己修复。

  1. 限制上传目录执行权限,不允许执行脚本
  2. 不允许新建目录。
  3. 上传的文件需经过重命名(时间戳+随机数+.jpg等)

IIS 7.x

安装IIS7.5,

1.控制面板 -> 程序 -> 打开或关闭windows功能。

2.下载php-5.2.6-win32-installer.msi (https://windows.php.net/downloads/releases/archives/)

3.打开msi,一直下一步来到选择web server setup的界面,在这里选择IIS fastcgi,之后一直下一步。

4.打开IIS,管理工具 ->Internet 信息服务(IIS)管理器

5.选择编辑ISAPI或者CGI限制

添加安装的php-cgi.exe路径,描述随意

6.返回第五步的第一个图片位置,点击处理程序映射,添加如下。

7.phpinfo测试

IIS7.x版本 在Fast-CGI运行模式下,在任意文件,例:test.jpg后面加上/.php,会将test.jpg 解析为php文件。

修复建议

配置cgi.fix_pathinfo(php.ini中)为0并重启php-cgi程序
结果如下:

PUT任意文件写入

IIS Server 在 Web 服务扩展中开启了 WebDAV之后,支持多种请求,配合写入权限,可造成任意文件写入。

修复建议

关闭WebDAV 和 写权限

IIS短文件漏洞
Windows 以 8.3 格式生成与 MS-DOS 兼容的(短)文件名,以允许基于 MS-DOS 或 16 位 Windows的程序访问这些文件。在cmd下输入"dir /x"即可看到短文件名的效果。

IIS短文件名产生:

1.当后缀小于4时,短文件名产生需要文件(夹)名前缀字符长度大于等于9位。
2.当后缀大于等于4时,文件名前缀字符长度即使为1,也会产生短文件名。
目前IIS支持短文件名猜测的HTTP方法主要包括:DEBUG、OPTIONS、GET、POST、HEAD、TRACE六种。IIS 8.0之后的版本只能通过OPTIONS和TRACE方法被猜测成功。

复现:

IIS8.0以下版本需要开启ASP.NET支持,IIS大于等于8.0版本,即使没有安装ASP.NET,通过OPTIONS和TRACE方法也可以猜解成功。以下通过开启IIS6.0 ASP.NET后进行复现。

当访问构造的某个存在的短文件名,会返回404:

当访问构造的某个不存在的短文件名,会返回400:

IIS短文件漏洞局限性:

  1. 如果文件名本身太短也是无法猜解的;
  2. 此漏洞只能确定前6个字符,如果后面的字符太长、包含特殊字符,很难猜解;
  3. 如果文件名前6位带空格,8.3格式的短文件名会补进,和真实文件名不匹配;
  4. 如果文件夹名前6位字符带点".",扫描程序会认为是文件而不是文件夹,最终出现误报;
  5. 不支持中文文件名,包括中文文件和中文文件夹。一个中文相当于两个英文字符,故超过4个中文字会产生短文件名,但是IIS不支持中文猜测。

    IIS短文件利用工具:https://github.com/irsdl/IIS-ShortName-Scanner

修复建议

1)从CMD命令关闭NTFS 8.3文件格式的支持
Windows Server 2003:(1代表关闭,0代表开启) 关闭该功能:fsutil behavior set disable8dot3 1

Windows Server 2008 R2:
查询是否开启短文件名功能:fsutil 8dot3name query
关闭该功能:fsutil 8dot3name set 1
不同系统关闭命令稍有区别,该功能默认是开启的.

2)或从修改注册表关闭NTFS 8.3文件格式的支持
快捷键Win+R打开命令窗口,输入regedit打开注册表窗口
找到路径:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem,将其中的 NtfsDisable8dot3NameCreation这一项的值设为 1,1代表不创建短文件名格式

以上两种方式修改完成后,均需要重启系统生效。

Note:此方法只能禁止NTFS8.3格式文件名创建,已经存在的文件的短文件名无法移除,需要重新复制才会消失。例:将web文件夹的内容拷贝到另一个位置,如c:\www到c:\ww,然后删除原文件夹,再重命名c:\ww到c:\www。

HTTP.SYS远程代码执行(MS15-034)
影响范围:Windows 7、Windows Server 2008 R2、Windows 8、Windows Server 2012、Windows 8.1 和 Windows Server 2012 R2

复现:
在Windows7上 安装IIS7.5

1.访问。

2.编辑请求头,增加Range: bytes=0-18446744073709551615字段,若返回码状态为416 Requested Range Not Satisfiable,则存在HTTP.SYS远程代码执行漏洞

漏洞有点鸡肋,配合其他漏洞使用还是可以用用的,具体使用可转至MSF中。

修复建议

安装修复补丁(KB3042553)

Apache

Apache是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩充,将Perl/Python等解释器编译到服务器中。

解析漏洞
未知扩展名解析漏洞

Apache的解析漏洞依赖于一个特性:Apache默认一个文件可以有多个以点分割的后缀,当最右边的后缀无法识别(不在默认一个文件可以有多个以点分割的后缀,当最右边的后缀无法识别(不在mime.types文件),则继续向左识别,直到识别到合法后缀才进行解析

复现:这里使用phpstudy进行复现。
下载地址:http://phpstudy.php.cn/phpstudy/phpStudy(PHP5.2).zip
访问phpinfo.php.xxx

实战中可以上传rar,owf等文件进行利用,如果上传phpinfo.php.jpg,即使文件名中有.php,也会直接解析为jpg。因为Apache认识.jpg,停止继续向左识别。

AddHandler导致的解析漏洞

如果运维人员给.php后缀增加了处理器:

AddHandler application/x-httpd-php .php
那么,在有多个后缀的情况下,只要一个文件名中含有.php后缀,即被识别成PHP文件,没必要是最后一个后缀。利用这个特性,将会造成一个可以绕过上传白名单的解析漏洞。
复现:

即使最右边的文件格式是在mime.types文件内,只要文件名中出现.php,就直接被解析为php。

Apache HTTPD 换行解析漏洞
影响范围:2.4.0~2.4.29版本
环境:phpstudy2014 Apache + PHP5.4n
此漏洞形成的根本原因,在于,正则表达式中, 正则表达式中,正则表达式中不仅匹配字符串结尾位置,也可以匹配\n 或 \r
在解析PHP时,1.php\x0A将被按照PHP后缀进行解析,导致绕过一些服务器的安全策略。

<FilesMatch \.php$>SetHandler application/x-httpd-php
</FilesMatch>

测试代码:

<html><body><form action="" method="post" enctype="multipart/form-data"><input type="file" name="file" /><input type="text" name="name" /><input type="submit" value="上传文件" /></form></body>
</html><?php
if(isset($_FILES['file'])) {$name = basename($_POST['name']);$ext = pathinfo($name,PATHINFO_EXTENSION);if(in_array($ext, ['php', 'php3', 'php4', 'php5', 'phtml', 'pht'])) {exit('bad file'); }
echo "ok"; move_uploaded_file($_FILES['file']['tmp_name'], './' . $name);
}?>


点击Go后,效果如下:

相同代码在Linux下进行测试,可以正常写入。

访问:


限制:获取文件名时不能用$_FILES[‘file’][‘name’],因为它会自动把换行去掉。

修复建议 :

  1. 升级到最新版本
  2. 或将上传的文件重命名为为时间戳+随机数+.jpg的格式并禁用上传文件目录执行脚本权限。

Nginx配置文件错误导致的解析漏洞

对于任意文件名,在后面添加/xxx.php(xxx为任意字符)后,即可将文件作为php解析。

例:info.jpg后面加上/xxx.php,会将info.jpg 以php解析。

这里使用phpstudy2014 ,Nginx + PHP5.3n进行复现(以下复现若无特别说明均采用此环境)

结果:

该漏洞是Nginx配置所导致,与Nginx版本无关,下面是常见的漏洞配置。

当攻击者访问/info.jpg/xxx.php时, Nginx将查看URL,看到它以.php结尾,并将路径传递给PHP fastcgi处理程序。

Nginx传给php的路径为c:/WWW/info.jpg/xxx.php, 在phpinfo中可以查看_SERVER[“ORIG_SCRIPT_FILENAME”]得到。

PHP根据URL映射,在服务器上寻找xxx.php文件,但是xxx.php不存在,又由于cgi.fix_pathinfo默认是开启的,因此PHP会继续检查路径中存在的文件,并将多余的部分当作 PATH_INFO。接着PHP在文件系统中找到.jpg文件,而后以PHP的形式执行.jpg的内容,并将/xxx.php存储在 PATH_INFO 后丢弃,因此我们在phpinfo中的$_SERVER[‘PATH_INFO’]看的到值为空。

Note: php的一个选项:cgi.fix_pathinfo,该选项默认开启,值为1,用于修理路径, 例如:当php遇到文件路径"/info.jpg/xxx.php/lxh.sec"时,若"/info.jpg/xxx.php/lxh.sec"不存在,则会去掉最后的"/lxh.sec",然后判断"/info.jpg/xxx.php"是否存在, 若存在则将/info.jpg/xxx.php当作文件/info.jpg/xxx.php/lxh.sec,若/info.jpg/xxx.php仍不存在,则继续去掉xxx.php,依此类推。

修复建议

1.配置cgi.fix_pathinfo(php.ini中)为0并重启php-cgi程序。
2.或如果需要使用到cgi.fix_pathinfo这个特性(例如:Wordpress),那么可以禁止上传目录的执行脚本权限。或将上传存储的内容与网站分离,即站库分离。
3.或高版本PHP提供了security.limit_extensions这个配置参数,设置security.limit_extensions = .php
Nginx 空字节任意代码执行漏洞

影响版本:Nginx 0.5*, 0.6*,0.7 <= 0.7.65,0.8 <= 0.8.37
Windows环境 Nginx 0.7.65+php 5.3.2
在nginx-0.7.65/html/目录下创建info.jpg,内容为<?php phpinfo();?>,
访问info.jpg,并抓包,修改为info.jpg…php,在Hex选修卡中将jpg后面的.,更改为00.

Note:该漏洞不受cgi.fix_pathinfo影响,当其为0时,依旧解析。

Nginx 文件名逻辑漏洞(CVE-2013-4547)

影响版本:Nginx 0.8.41 ~ 1.4.3 / 1.5.0 ~ 1.5.7
使用Vulhub的docker进行复现。
访问http://your-ip:8080/ 上传文件

访问http://your-ip:8080/uploadfiles/info.jpg, 并抓包,修改为info.jpg…php, 在Hex选修卡中将jpg后面的两个点2e改成20,00 点击Go,如下。

Note:该漏洞不受cgi.fix_pathinfo影响,当其为0时,依旧解析,在Windows上有所限制。

修复建议

  1. 设置security.limit_extensions = .php
  2. 或升级Nginx

Nginx 配置错误导致的安全问题

CRLF注入
查看Nginx文档,可以发现有三个表示uri的变量:

1.uri2.uri 2.uri2.document_uri
3.$request_uri

1和2表示的是解码以后的请求路径,不带参数;3表示的是完整的URI(没有解码)
Nginx会将1,2进行解码,导致传入%0a%0d即可引入换行符,造成CRLF注入漏洞。

错误配置:

访问:
http://127.0.0.1/%0aX-XSS-Protection:%200%0a%0d%0a%0d%3Cimg%20src=1%20οnerrοr=alert(/xss/)%3E
将返回包的Location端口设置为小于80,使得浏览器不进行跳转,执行XSS。

结果:

修复建议

目录穿越
Nginx在配置别名(Alias)的时候,如果忘记加/,将造成一个目录穿越漏洞。
错误的配置文件示例(原本的目的是为了让用户访问到C:/WWW/home/目录下的文件):

location /files {autoindex on;alias c:/WWW/home/;}?>

结果:

修复建议

只需要保证location和alias的值都有后缀/或都没有/这个后缀。

目录遍历
当Nginx配置文件中,autoindex 的值为on时,将造成一个目录遍历漏洞。

结果:

修复建议

将autoindex 的值为置为off。

add_header被覆盖
Nginx的配置文件分为Server、Location等一些配置块,并且存在包含关系,子块会继承父块的一些选项,比如add_header

如下配置中,整站(父块中)添加了CSP头:

正常情况下访问:

当访问 /test2时,XSS被触发。因/test2的location中添加了X-Content-Type-Options头,导致父块中的add_header全部失效。

Tomcat

Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用 服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache服务器,可利用它响应HTML( 标准通用标记语言下的一个 应用)页面的访问请求。实际上Tomcat是Apache服务器的扩展,但运行时它是独立运行的,所以当运行tomcat 时,它实际上作为一个与Apache独立的进程单独运行的。

Tomcat 任意文件写入(CVE-2017-12615)

环境:Tomcat/8.0.30

漏洞本质是Tomcat配置文件/conf/web.xml 配置了可写(readonly=false),导致我们可以往服务器写文件:

增加完配置之后,记得重启Tomcat,效果如下:

当readonly=true时,效果如下:

修复建议

将readonly=true,默认为true。

Tomcat 远程代码执行(CVE-2019-0232)

影响范围:9.0.0.M1 ~ 9.0.17, 8.5.0 ~ 8.5.39 , 7.0.0 ~ 7.0.93
影响系统:Windows
测试环境:
Apache Tomcat v8.5.39 J
DK 1.8.0_144

修改配置:

web.xml


content.xml

在Tomcat\webapps\ROOT\WEB-INF新建cgi目录,并创建lxhsec.bat文件,内容任意。

访问http://127.0.0.1:8080/cgi-bin/lxhsec.bat?&dir

执行命令http://127.0.0.1:8080/cgi-bin/lxhsec.bat?&C:/WINDOWS/system32/net+user

Note:net命令的路径要写全,直接写net user,Tomcat控制台会提示net不是内部命令,也不是可运行的程序,另 必须使用+号连接,使用空格,%2B都会执 行失败,控制台报错

Tomcat + 弱口令 && 后台getshell漏洞

环境:Apache Tomcat/7.0.94

在conf/tomcat-users.xml文件中配置用户的权限:

<tomcat-users><role rolename="manager-gui"/><role rolename="manager-script"/><role rolename="manager-jmx"/><role rolename="manager-status"/><role rolename="admin-gui"/><role rolename="admin-script"/><user username="tomcat" password="tomcat" roles="manager-gui,manager-script,manager-jmx,manager-status,admin-gui,admin-script" />
</tomcat-users>

正常安装的情况下,tomcat7.0.94中默认没有任何用户,且manager页面只允许本地IP访问。只有管理员手工修改了这些属性的情况下,才可以进行攻击。

访问 http://127.0.0.1:8080/manager/html ,输入弱密码tomcat:tomcat,登陆后台。

部署后,访问 http://127.0.0.1:8080/war包名/包名内文件名, 如下。

修复建议

  1. 若无必要,取消manager/html功能。

  2. 若要使用,manager页面应只允许本地IP访问
    Tomcat manager App 暴力破解
    环境:Apache Tomcat/7.0.94
    访问:http://127.0.0.1:8080/manager/html, 输入密码,抓包,如下。

    刚才输入的账号密码在HTTP字段中的Authorization中,规则为Base64Encode(user:passwd)

    修复建议

  3. 若无必要,取消manager/html功能。

  4. 若要使用,manager页面应只允许本地IP访问

JBoss

jBoss是一个基于J2EE的开发源代码的应用服务器。JBoss代码遵循LGPL许可,可以在任何商业应用中免费使用。JBoss是一个管理EJB的容器和服务器,支持EJB1.1、EJB 2.0和EJB3的规范。但JBoss核心服务不包括支持servlet/JSP的WEB容器,一般与Tomcat或Jetty绑定使用。

默认端口:8080,9990

Windows下Jboss安装:

  1. 下载 http://jbossas.jboss.org/downloads/
  2. 解压,我这里解压后的目录为:C:\jboss-6.1.0.Final
  3. 新建环境变量:
    JBOSS_HOME 值为:C:\jboss-6.1.0.Final
    在path中加入:;%JBOSS_HOME%\bin;
  4. 打开C:\jboss-6.1.0.Final\bin 双击run.bat。出现info消息,即配置成功

    Note:注意JDK版本要在1.6~1.7之间,1.8版本jBoss运行打开 JMX Console会出现500错误。

    jboss默认部署路径:C:\jboss-6.1.0.Final\server\default\deploy\ROOT.war
    设置外网访问:

打开C:\jboss-6.1.0.Final\server\default\deploy\jbossweb.sar\server.xml

将address="${jboss.bind.address}" 设置为address=“0.0.0.0” ,并重启JBoss

JBoss 5.x/6.x 反序列化漏洞(CVE-2017-12149)
访问 /invoker/readonly 返回500,说明页面存在,此页面存在反序列化漏洞。

利用工具:https://github.com/joaomatosf/JavaDeserH2HC
我们选择一个Gadget:ReverseShellCommonsCollectionsHashMap,编译并生成序列化数据:
生成ReverseShellCommonsCollectionsHashMap.class

javac -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap.java

利用工具:https://github.com/joaomatosf/JavaDeserH2HC
我们选择一个Gadget:ReverseShellCommonsCollectionsHashMap,编译并生成序列化数据:
生成ReverseShellCommonsCollectionsHashMap.class

javac -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap.java

生成ReverseShellCommonsCollectionsHashMap.ser

javac -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap.java

利用:

curl http://192.168.31.205:8080/invoker/readonly --data-binary @ReverseShellCommonsCollectionsHashMap.ser


或者

java反序列化终极测试工具

JBoss JMXInvokerServlet 反序列化漏洞

访问 /invoker/JMXInvokerServlet
返回如下,说明接口开放,此接口存在反序列化漏洞。

这里直接利用CVE-2017-12149生成的ser,发送到/invoker/JMXInvokerServlet接口中。

如下:

JBoss EJBInvokerServlet 反序列化漏洞

访问 /invoker/EJBInvokerServlet
返回如下,说明接口开放,此接口存在反序列化漏洞

这里直接利用CVE-2017-12149生成的ser,发送到/invoker/EJBInvokerServlet接口中。

如下:

修复建议

  1. 不需要 http-invoker.sar 组件的用户可直接删除此组件。路径为:C:\jboss-6.1.0.Final\server\default\deploy\http-invoker.sar,删除后访问404.

参考链接 :
Web中间件常见安全漏洞总结
作者:lyxhh
链接:http://www.lxhsec.com/2019/03/04/middleware/
https://mp.weixin.qq.com/s/pxKTWKUZA-7rKV0YiJ7sJg

Web中间件常见安全漏洞总结相关推荐

  1. Web中间件常见安全漏洞

    第一章:IIS IIS 6 解析漏洞 IIS 7 解析漏洞 PUT任意文件写入 IIS短文件漏洞 HTTP.SYS远程代码执行 (MS15-034) RCE-CVE-2017-7269 第二章:Apa ...

  2. 常见的web中间件java框架漏洞总结

    对近期的web中间件漏洞进行了解.因此我对常见的web中间件漏洞进行了收集以及整理.(本篇文章将持续更新) 文章目录 一.IIS IIS6.x IIS7.x 二.Apache Apache HTTPD ...

  3. 中间件常见安全漏洞(转载)

    前言: 转载于公众号 Bypass 点击这里查看原文 第一章:IIS IIS 6 解析漏洞 IIS 7 解析漏洞 PUT任意文件写入 IIS短文件漏洞 HTTP.SYS远程代码执行 (MS15-034 ...

  4. Web中间件常见漏洞总结

    一.IIS中间组件: 1.PUT漏洞 2.短文件名猜解 3.远程代码执行 4.解析漏洞 二.Apache中间组件: 1.解析漏洞 2.目录遍历 三.Nginx中间组件: 1.文件解析 2.目录遍历 3 ...

  5. Web系统常见安全漏洞介绍及解决方案-sql注入

    先看一下目录 一.常见漏洞类型 二.SQL注入 1.SQL 注入危险性.可能原因 2.场景重现 3.sql盲注 4.检测⽅法 5.防护⽅案 三.使用ORM框架 一.常见漏洞类型 关于web安全测试,目 ...

  6. Web系统常见安全漏洞介绍及解决方案-XSS攻击

    漏洞档案 XSS简介 XSS分类介绍 XSS 的威力和危害 XSS防御措施 HttpOnly 输入检查 输出检查 小结 XSS简介 跨站脚本攻击(Cross Site Script),为了和众所周知的 ...

  7. web 应用常见安全漏洞一览

    1. SQL 注入 SQL 注入就是通过给 web 应用接口传入一些特殊字符,达到欺骗服务器执行恶意的 SQL 命令. SQL 注入漏洞属于后端的范畴,但前端也可做体验上的优化. 原因 当使用外部不可 ...

  8. 常见web中间件及其漏洞

    目录 Web中间件 常见的Web中间件: Php中间件漏洞 Apache: Nginx: IIS漏洞 JAVA中间件漏洞 Tomcat: WebLogic: Web中间件 一类能够为一种或多种应用程序 ...

  9. WEB应用常见15种安全漏洞一览

    摘要: 安全第一! 原文:web 应用常见安全漏洞一览 作者:深予之 (@senntyou) Fundebug遵循创意共享3.0许可证转载,版权归原作者所有. 1. SQL 注入 SQL 注入就是通过 ...

最新文章

  1. Java NIO使用及原理分析
  2. 5W-Lora电台的远距离传输优势
  3. LeetCode 16. 最接近的三数之和(固定左端+滑动窗口)
  4. 天桥调参师秘籍:一份深度学习超参微调技术指南
  5. xshell终端中文乱码解决
  6. Linux内核用户权限的实现,Linux内核设计与实现(6)---系统调用
  7. 想“跟”在后面?不是那么简单的事情
  8. Frequentist 观点和 Bayesian 观点
  9. Linux中yum不能用的原因
  10. 用友U9 SOA Ready (转载)
  11. vb6 控件未注册问题解决
  12. Filter过滤器实现登录权限拦截
  13. 36氪独家|京东零售宣布多位高管新任命,POP平台部门成整合重点
  14. 十六进制表示法(二进制/十六进制/十进制之间的转换)
  15. linux修改内核logo,Linux内核开发-修改开机Logo
  16. outlook企业邮箱服务器怎么填,Outlook客户端怎么配置企业邮箱
  17. linux 下文件防篡改,Rsync+inotify实现文件防篡改
  18. linux权限750什么意思,chmod 777是什么意思?为您解释chmod 777及切勿使用chmod 777的原因...
  19. vs2015设置c语言,VS2015的使用
  20. opengl 画椭圆_如何用彩铅画一朵牡丹?彩铅牡丹花的画法步骤,彩铅花卉画入门教程...

热门文章

  1. 数据分析:星巴克店铺分布有何规律?
  2. vue 怎么设置 项目ico_vue项目如何优雅地设置favicon.ico
  3. 什么时候用到全排列_初学讲义之高中数学二十一:排列组合和二项式定理
  4. 一汽奔腾b7o价位_全新奔腾B70正式上市,前脸被吐槽酷似某豪华品牌
  5. android 文件系统,创建单个文件大小有2G限制
  6. 为什么无法建立过程性能模型?
  7. baidu google 下拉框 的简单实现
  8. Qt--音乐播放器 V2.0_vortex_新浪博客
  9. Spring Boot 揭秘与实战(二) 数据缓存篇 - Guava Cache
  10. PHP项目:如何用PHP高并发检索数据库?