5

emlog5.3.1后台暴力破解

 1 year ago
source link: https://xdlbw.github.io/2022/05/12/emlog5-3-1%E5%90%8E%E5%8F%B0%E6%9A%B4%E5%8A%9B%E7%A0%B4%E8%A7%A3/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

emlog5.3.1后台暴力破解

2022-05-12
1.6k- 6m- 3

Emlog博客系统默认后台登陆地址为http://域名/admin/login.php。后台登陆时,错误情况下,验证码未刷新,导致可暴力破解登陆管理员账号。虽然属于低危漏洞,但是在emlog5.3.1和6.0测试版本均存在,不容忽视。

在admin文件夹下的global.php中有这么一段

if ($action == 'login') {
   $username = isset($_POST['user']) ? addslashes(trim($_POST['user'])) : '';
   $password = isset($_POST['pw']) ? addslashes(trim($_POST['pw'])) : '';
   $ispersis = isset($_POST['ispersis']) ? intval($_POST['ispersis']) : false;
   $img_code = Option::get('login_code') == 'y' && isset($_POST['imgcode']) ? addslashes(trim(strtoupper($_POST['imgcode']))) : '';

    $loginAuthRet = LoginAuth::checkUser($username, $password, $img_code);
    
   if ($loginAuthRet === true) {
      LoginAuth::setAuthCookie($username, $ispersis);
      emDirect("./");
   } else{
      LoginAuth::loginPage($loginAuthRet);
   }
}

当登陆失败的时候,并没有销毁session,验证码没有刷新,可重复使用,导致能够暴力破解。

phpstudy搭建网站

这是网站源码的压缩包:emlog5.3.1.zip,提取码是rox1

我们下载之后就可以开始搭建了

首先将下载的压缩包解压到小皮的网站根目录下,以我的为例,即D:\phpstudy_pro\WWW。可以把解压之后的文件夹重命名,这样好记且有便于后续的操作,我把它改成了emlog。之后进入小皮的网站模块,点击创建网站,域名改为重命名之后的名字(没改的话就将域名设为你根目录下的名字)。这边一定要注意的是PHP版本,由于PHP7已经不支持mysql扩展了,但是支持mysqli和pdo_mysql,而我用的是mysql且网站要求配置的也是mysql,所以php版本就不能选的太高,不然后续网站搭不起来。所以这边创建网站就直接选低版本的php即可,当然如果没注意到这点,后续也可以在网站管理模块将php版本调低(我就是这样的,一开始不知道有这个坑)。

image-20220512202019059

这样网站就搭好了,之后点击管理—>打开网站,现在配置MySQL。数据库名设为emlog,这边我是自己创建了一个,因为他说了不会自动创建数据库。之后的mysql用户名和密码就是自己的用户名和密码(如果忘了可以看小皮的数据库模块,里面有记录)。

image-20220512202603086
image-20220512202800456

再来注册一个管理员账户,这边随便设置就行了,此处我把用户名和密码都设成了admin123。之后开始安装就可以了。

image-20220512202726378
image-20220512202818346

Burpsuite抓包

网站搭建完成之后,进入网站首页。点击登录即可进入后台登录界面,我们虽然知道管理员的账号密码(刚创建的),但我们此时为了测试默认是不知道管理员的账号名称以及密码的。在登陆界面随便输个,这边很奇怪啊,我的这个后台登陆界面没有验证码不知道为啥,不过也不影响,因为这里的验证码本来就是形同虚设的。

image-20220512203639119

之后burp抓包

image-20220512203602005

可以看到我们输入的用户名和密码。快捷键 ctrl+I 将包发送到 intruder 模块。进入 positions 模块更改攻击类型为 Cluster bomb,并选择要破解的变量 user 和 pw (注意选择变量的先后顺序,这关乎到后面对应内容的破解)

image-20220512203740628

四种攻击方式

在上述,我们为什么要把攻击类型改为 Cluster bomb 呢?首先我们要了解 burpsuite 的四种攻击类型

1、狙击手模式(Sniper)

Attack No. Position A Position B
0 1 null
1 2 null
2 null 1
3 null 2

添加一个参数,且假设 payload 有两个,那么就会执行两次;
添加两个参数,就会挨个来,第一个参数开始爆破时,第二个不变,如此这样,就会执行四次

我个人理解来看,这是唯一一个多个参数不能同时爆破的攻击类型

2、攻城锤模式(Battering ram)

Attack No. Position A Position B
0 1 1
1 2 2

与sniper模式不同的地方在于,同样情况下,攻击次数减半,且每次两个位置用相同的密码

3、草叉模式(Pitchfork)

Attack No. Position A Position B
0 1 3
1 2 4

可以多组密码本payload,又与攻城锤模式相同的地方在于一一对应

4、集束炸弹模式(Cluster bomb)

Attack No. Position A Position B
0 1 3
1 2 4
2 1 4
3 2 4

跟草叉模式相似的是多个密码本对应多个位置,不同的是不再是一一对应,而是交叉组合(笛卡尔积),每一个密码本里的密码都对应与另一密码本所有密码

所以为什么选择 Cluster bomb 就显而易见了。我们此时并不知道 user 和 pw 的情况,所以我们要让两个变量采用最多的组合方式来进行测试。

继续上述爆破操作,再进入 payload 模块,此时前面所说的顺序性就体现出来了,由于我们先选择的变量是user,所以我们先添加猜测的 user 。如图,这边需要借助字典,但是我没有…其实也不太需要,只是为了测试,所以除了添加正确的之外随便添加一些别的就可以了。

image-20220512204118046

之后添加猜测的 pw,步骤跟上面一样。可见此时Request count已经变了,因为选择的攻击模式使得每个用户名和密码都匹配测试一次

image-20220512204154328

之后可以进入 options 模块选择攻击的线程等(多线程有助于加快破解速度),此处由于我添加的猜测数据很少,可以直接攻击,点击 start attack,得到最终的结果。我们可以根据 status 和 length 两个模块来判断是否成功。此处看到当两个payload都为admin123时,状态和长度都和其他笛卡尔积不同,猜测这就是管理员账户的信息。

image-20220512204312603

尝试登陆成功

image-20220512204500078

漏洞修复建议

1、如果用户登录次数超过设置的阈值,则锁定帐号(有恶意登录锁定帐号的风险)

2、如果某个 IP登录次数超过设置的阈值,则锁定IP

3、增加人机验证机制

4、验证码必须在服务器端进行校验,客户端的一切校验都是不安全的。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK