【原创】记一次班级群的QQ钓鱼网站分析
本帖最后由 Time丨Brand 于 2020-8-23 18:09 编辑# 记一次班级群的QQ钓鱼网站分析
## 前言
### 本人萌新一枚,在本版第二次发帖,可能有点错误之处,还请各位大佬多多关照。
## 基本信息
| 基本信息 | 描述 |
| ------------------------------------ | ---------------------------------------- |
| 钓鱼网站来源 | 学校班级QQ群,上钩鱼儿发的腾讯在线文档 |
| 钓鱼网站短链(跳转至不同的二级域名) | https://s.yam.com/dad8d |
| 钓鱼网站防红链接 | http://nvkp5.zgzmw.net/AcQuxM/loguce.ppt |
| 钓鱼网站真实链接 | http://yun34.hxzmdq.com/ / http://fa9.hxzmdq.com/ |
| 服务器IP地址 | 143.92.45.190 |
## 钓鱼文案截图
### 故意放一张模糊图片,还加个注
(如出现问题以上图片看不清楚请复制网址到浏览器登陆邮箱查询)这操作,也是醉了。。。
## 钓鱼网站分析
### 钓鱼存库链接抓取
1. 登录到主站,随机输入合理位数的QQ及密码
2. 打开Fiddler抓包(控制台调试,被js强制无限中断),点击钓鱼网站登录按钮。
3. 找到存库Post请求链接,可以看到,钓鱼基本操作——鱼儿得手,跳到QQ邮箱官网。
4. 经测试,如果数据库已有记录,会返回数据记录,所以,相同ID及密码第二次登录,结果如下图。【可能钓鱼源码作者忘记删掉调试代码了。- -】
## 服务器端口扫描
结果如图:
1. 首先,访问8888号端口,发现宝塔服务器面板入口,从结果中的873端口可知是 rsync服务,初步猜测可能使用了宝塔插件 宝塔数据同步工具 基于rsync开发的数据同步工具,可能不止一个服务器。
2. 888号端口应该是phpmyadmin,默认入口无法访问,入口可能加了16个随机字符。
3. 网站扫描发现几个有用的信息:
| 描述 | 地址 |
| ---------------- | --------------------------------- |
| 钓鱼网站安装地址 | http://yun34.hxzmdq.com/install/ |
| 钓鱼网站后台地址 | http://yun34.hxzmdq.com/wocaonima/ |
| 钓鱼网站安装地址 | http://fa9.hxzmdq.com/install/ |
| 钓鱼网站后台地址 | http://fa9.hxzmdq.com/wocaonima/ |
## 钓鱼源码搜索
根据钓鱼网站安装地址中的QQ信息,搜索到相关源码,经验证,目录结构一致,可见出自同一作者。可惜源码均已加密,经搜索发现使用免费的【找源码】加密,根据本论坛大佬,解密得到所有源文件。接着看了看源码,本人才学疏浅,没发现可利用的漏洞。(PHP解密:zym加密 带乱码调试过程 https://www.52pojie.cn/thread-693641-1-1.html)
## 数据库创建代码
```
DROP TABLE IF EXISTS `{DBQZ}_config`;</explode>
create table `{DBQZ}_config` (
`k` varchar(32) NOT NULL,
`v` text NULL,
PRIMARY KEY(`k`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;</explode>
INSERT INTO `{DBQZ}_config` (`k`, `v`) VALUES
('cache', ''),
('version', '100'),
('admin_user', 'admin'),
('admin_pwd', '21232f297a57a5a743894a0e4a801fc3'),
('style', '1'),
('sitename', '空间钓鱼管理中心'),
('title', ' '),
('description', ' '),
('kfqq', '123456'),
('kaurl', 'http://www.baidu.com'),
('logo', 'assets/images/amback.jpg'),
('qqjump', '0'),
('txprotect', '1'),
('txprotect_domain', 'www.baidu.com'),
('syskey', '1544422'),
('fxnet', '3'),
('cron', '123456');</explode>
DROP TABLE IF EXISTS `{DBQZ}_url`;</explode>
create table `{DBQZ}_url` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`yurl` varchar(150) NOT NULL,
`url` varchar(500) NOT NULL,
`tznet` int(11) NOT NULL DEFAULT '0',
`nexttime` datetime NOT NULL,
`addtime` datetime NOT NULL,
`status` int(2) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAMDEFAULT CHARSET=utf8 AUTO_INCREMENT=0 ;</explode>
DROP TABLE IF EXISTS `{DBQZ}_list`;</explode>
CREATE TABLE IF NOT EXISTS `{DBQZ}_list` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`kind` tinyint(1) NOT NULL DEFAULT '1',
`siteid` int(11) NOT NULL DEFAULT '1',
`user` varchar(50) DEFAULT NULL,
`pwd` varchar(50) DEFAULT NULL,
`ip` varchar(32) DEFAULT NULL,
`city` varchar(32) DEFAULT NULL,
`date` datetime DEFAULT NULL,
`hash` varchar(32) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAMDEFAULT CHARSET=utf8 AUTO_INCREMENT=0 ;
```
## 网站后台Cookie - admin_token 生成源码
```
<?php
$user='admin';
$pass='admin';
$password_hash = '!@#%!s!'; /* 这是默认的,不知有没有改 */
$SYS_KEY = '1544422'; /* 这是默认的,不知有没有改 */
$session=md5($user.$pass.$password_hash);
$token=authcode("{$user}\t{$session}", 'ENCODE', $SYS_KEY);
echo $token;
setcookie("admin_token", $token, time() + 604800);
function authcode($string, $operation = 'DECODE', $key = '', $expiry = 0) {
$ckey_length = 4;
$key = md5($key ? $key : ENCRYPT_KEY);
$keya = md5(substr($key, 0, 16));
$keyb = md5(substr($key, 16, 16));
$keyc = $ckey_length ? ($operation == 'DECODE' ? substr($string, 0, $ckey_length): substr(md5(microtime()), -$ckey_length)) : '';
$cryptkey = $keya.md5($keya.$keyc);
$key_length = strlen($cryptkey);
$string = $operation == 'DECODE' ? base64_decode(substr($string, $ckey_length)) : sprintf('%010d', $expiry ? $expiry + time() : 0).substr(md5($string.$keyb), 0, 16).$string;
$string_length = strlen($string);
$result = '';
$box = range(0, 255);
$rndkey = array();
for($i = 0; $i <= 255; $i++) {
$rndkey[$i] = ord($cryptkey[$i % $key_length]);
}
for($j = $i = 0; $i < 256; $i++) {
$j = ($j + $box[$i] + $rndkey[$i]) % 256;
$tmp = $box[$i];
$box[$i] = $box[$j];
$box[$j] = $tmp;
}
for($a = $j = $i = 0; $i < $string_length; $i++) {
$a = ($a + 1) % 256;
$j = ($j + $box[$a]) % 256;
$tmp = $box[$a];
$box[$a] = $box[$j];
$box[$j] = $tmp;
$result .= chr(ord($string[$i]) ^ ($box[($box[$a] + $box[$j]) % 256]));
}
if($operation == 'DECODE') {
if((substr($result, 0, 10) == 0 || substr($result, 0, 10) - time() > 0) && substr($result, 10, 16) == substr(md5(substr($result, 26).$keyb), 0, 16)) {
return substr($result, 26);
} else {
return '';
}
} else {
return $keyc.str_replace('=', '', base64_encode($result));
}
}
?>
```
## 未完待续...
1. 本此分析,发现黑产们,可能通过rsync服务,实现了数据的实时迁移,就算进入后台,清空数据库,损失也可能很小。
2. 钓鱼网站尝试利用腾讯链接报红漏洞,阻止链接报红。
3. 钓鱼主链接采用动态短网址,随时更换跳转目的地址,并且,目的地址采用动态二级域名,防止链接报毒或失效。
至此分析不下去了,望大佬继续跟进。
## 相似解密源码下载
## 防范建议
1. 班群在线文档有链接要警惕!
2. 看见主域名非(qq.com/...)的,或者奇怪的二级域名和主域名一定不要随意打开
3. 在QQ自带浏览器,获取手机内浏览器输入QQ账号密码前,要再三确认主域名!!!类似(qq.com.qqq.com/...,qq.com.q9.com/...)都是假的!!!
以前是僵尸号加群发群公告,现在换了套路改成腾讯文档了。在楼主之前,我也曾分析过几个这样的钓鱼网站,域名大多数是借用别人的信息或者假冒的信息注册的,IP大多数是香港的主机。这种钓鱼也就骗骗一般的计算机小白,懂行的基本上都是看域名不对劲直接关闭网页。 我也遇到过班群有人用这个钓鱼,一看见那个wocaonima的目录名我就知道是同一个源码,一样停在数据库密码那了,最后没办法只能CC了一段时间没啥用写了个多线程注册机折腾了下发现群里也没人上当就不了了之了 这个就是盗用他人信息的钓鱼吗? 看起来很大佬 sjq829 发表于 2020-8-21 23:27
这个就是盗用他人信息的钓鱼吗?
嗯,面向学生,盗取QQ账号密码,进一步实施可能的诈骗、发违法广告、非法获取个人信息等一系列行为 现在QQ 只要不在常用地登陆就会提示风险,黑产还有啥用卖数据吗 感谢分享!
感谢楼主分享,分析得很详细,要是再给力点让恶人得到恶报就完美了。{:301_1001:} 不错的经验,支持一下。 感谢分享!