【htpwdScan 是一个HTTP暴力破解、撞库测试工具。】

article/2025/9/27 6:41:10

htpwdScan 1.0

htpwdScan 是一个HTTP暴力破解、撞库测试工具。
安装
要求 python3.6 +

pip3 install requirements.txt

特性
支持常见的认证模式:Basic/Digest/NTLM 等
支持对 GET / POST 参数进行暴力破解,支持使用占位符选定参数或参数的一部分
支持批量校验和导入HTTP代理,通过大量IP低频撞库,绕过IP策略
支持导入互联网上泄露的社工库,对接口发起撞库
支持编写python函数对参数进行预处理,解决密码策略较苛刻的破解场景,如 Microsoft OWA
支持字典文件中的占位符替换
支持优先固定密码,遍历用户名,以降低账号被锁定概率
支持导入超大字典文件
使用示例
Basic / Digest / NTLM 破解
可以分别设置用户名、密码字典,也可以设置包含用户名密码的单个字典

htpwdScan.py -u https://jigsaw.w3.org/HTTP/Basic/ --auth user.txt passwd.txthtpwdScan.py -u https://jigsaw.w3.org/HTTP/Basic/ --auth tests/leaked_db.txthtpwdScan.py -u https://jigsaw.w3.org/HTTP/Digest/ --auth user.txt passwd.txt --pass-firsthtpwdScan.py -u https://mail.owa-domain.com/ews --auth user.txt pass.txt --pass-first

如果目标支持多种认证方式,会提示选择认证方式。 请注意,如果目标是Microsoft OWA,一般需要选择NTLM

![–pass-first 参数用于优先固定密码,循环遍历用户名,降低账号被锁定的概率。!![在这里插入图片描述](https://img-blog.csdnimg.cn/b6365edfcc354e888d07f20635ca912d.png#pic_center在这里插入图片描述

参数二次处理

程序支持参数二次处理:计算hash、大小写转换、拼接、引用其他参数值等。

用法:一般模式下,使用函数名包围字典文件名。 在撞库模式下,使用函数名包围参数名

htpwdScan.py -u https://jigsaw.w3.org/HTTP/Basic/ --auth user.txt md5(passwd.txt)

执行上面的例子,可以观察到密码已经是md5 hash。

在更复杂的场景中,可以使用函数为2拼、3拼用户名组合生成复杂密码,

如用户名为 Li JieJie,生成 LJJ@123456 LiJJ@2021 Jiejie@2021 jiejie.123456。参考:如何自定义函数


GET参数破解

GET参数的破解非常简单,例如:破解目标 http://demo.com/get_brute?key=123 中的 key 参数

htpwdScan.py -u http://demo.com/get_brute?key=123 -d key=passwd.txt --get --fail FAIL

通过 -d 来导入字典: 参数名=字典路径
通过 --get 显式指定使用GET方法,默认为POST
通过 --fail 标记一个失败的请求,正文中的标记字符串。当这个字符串没有出现时,则表明破解成功了
如果字典填充的是参数中的一部分,可使用占位选定(使用3个$符号前后包围即可)。

htpwdScan.py -u http://demo.com/get_brute?key=123$$$val$$$456 -d 1=password.txt --get --fail FAIL --silent

在上述例子中,参数值的前缀123和后缀456,都将被保留。请注意,此时设定参数,已经不能再使用名称key,只能使用占位数字序号,1,2,3递增。
在这里插入图片描述***

设定破解标记*

**
需要设定1个或多个参数,让程序理解一个请求是破解失败或成功。 如果没有设定,则以302跳转来认定破解成功。
–fail 失败的请求,正文中的标记字符串。 可以跟多个值
–suc 破解成功的请求,正文中的标记字符串。可以跟多个值
–header-fail 失败的请求,Header中的标记字符串
–header-suc 破解成功的请求,正文中的标记字符串


破解登录接口


本节示例破解 http://www.webscantest.com/login.php 。 将登录请求复制到文件request.txt中(精简如下)


POST /login.php?action=login HTTP/1.1
Host: www.webscantest.com
Content-Type: application/x-www-form-urlencoded
Referer: http://www.webscantest.com/login.php

login=admin&passwd=123456&submit_login=login


执行 python htpwdScan.py -f request.txt -d login=user.txt passwd=pass.txt

用user.txt 填充login 用户名参数,用pass.txt 填充 passwd 密码参数。

程序会首先发送一个请求,测试Response是否正常。
在这里插入图片描述因为这个接口无论登录成功失败,都会返回302。所以程序无法判断是否破解成功。 通过–debug 参数查看HTTP Response

python htpwdScan.py -f request.txt -d login=user.txt passdw=pass.txt --debug

在这里插入图片描述通过设定 –header-fail "login_error=Bad+user+name+or+password" 即可发起破解,完整命令如下

python htpwdScan.py -f request.txt -d login=user.txt passwd=pass.txt --header-fail "login_error=Bad+user+name+or+password"

在request.txt文件中,也可以使用函数对参数值进行二次处理。参考 tests/test_request_file_hash.py

更换参数顺序,实现密码优先
设定参数的顺序,只影响程序生成字典的顺序。简单调整参数的顺序,即可实现固定密码,优先遍历用户名,减少账号被锁定的几率。修改上一节的命令:

python htpwdScan.py -f request.txt -d passwd=pass.txt login=user.txt --header-fail "login_error=Bad+user+name+or+password"

在这里插入图片描述在HTTP请求中,使用占位符选取参数
修改上面小节中的 request.txt 文件,使用占位符来选取login参数和passwd参数。也可以选取任意的部分

POST /login.php?action=login HTTP/1.1
Host: www.webscantest.com
Content-Type: application/x-www-form-urlencoded
Referer: http://www.webscantest.com/login.phplogin=$$$admin$$$&passwd=$$$123456$$$&submit_login=login

执行

python htpwdScan.py -f request.txt -d 1=user.txt 2=pass.txt --header-fail "login_error=Bad+user+name+or+password"

可观察到破解任务按照预期执行
在这里插入图片描述如果需要使用函数对参数值进行二次处理。参考 tests/test_place_holder_file_hash.py


撞库测试


使用互联网上泄露的社工库,对接口进行撞库测试。 在tests文件夹中,模拟写入了一个 leaked_db.txt 文件,它使用多个空格分隔了用户名和密码。

**python htpwdScan.py -f tests/login_request.txt --database login,passwd=tests/leaked_db.txt --regex (\S+)\s+(\S+) --header-fail login_error=Bad+user+name+or+password**

撞库时,通过–database参数,来指定参数和字典文件。login passwd参数将由 leaked_db.txt中的内容填充。

填充时通过正则表达式提取参数值。–regex (\S+)\s+(\S+) 指定提取参数值的方式,在这个例子中,提取第一个非空字符串和第二个非空字符串。

csdn的数据行格式是zdg # 12344321 # zdg@csdn.net . 正则表达式可写作\S+ # (\S+) # (\S+)

为了降低IP被检出异常的概率,建议同时指定 --fake-ip 参数,开启伪造HTTP头 X-Forwarded-For Client-IP

在撞库场景下,如果要对字典中的参数值进行二次处理,用函数包围参数名。参考: **tests/test_import_from_leaked_db_hash.py**

校验和导入HTTP代理
在使用代理之前,应该校验代理服务器可以连通目标。如果服务器数量少,直接在命令行中指定,逗号分隔:

python htpwdScan.py --proxy 127.0.0.1:8888,127.0.0.1:8080 --check-proxy -u https://www.baidu.com --suc 百度一下 --get -o servers.txt
如果代理数量数量多,将其写入一个文件中用于校验:

python htpwdScan.py --proxy-file tests/proxies.txt --check-proxy -u https://www.baidu.com --suc 百度一下 --get -o servers.txt

请注意:如果代理服务器是HTTP协议的,可以忽略协议部分。 如果是HTTPS的,则必须指定协议

在发起破解时,同样地,使用 --proxy 或者 --proxy-file 来指定经过校验的服务器即可。

如果你想要使用Fiddler 或者 Burp Suite观察程序的请求,可以指定 --proxy 127.0.0.1:8080

参数说明

usage: htpwdScan.py [options]* HTTP weak pass scanner. By LiJieJie *Target:-u RequestURL         指定破解的URL-u "https://www.test.com/login.php"-f RequestFile        从文本文件中,导入HTTP请求--https               当从文件导入HTTP请求时,强制使用HTTPS--get                 强制使用HTTP GET,默认POST--auth  [ ...]        Basic/Digest/NTLM 暴力破解,e.g. --auth users.txt pass.txte.g. --auth users.txt my_own_func(pass.txt)--pass-first          固定密码优先爆破,减小账号被锁定几率Dictionary:-d Param=DictFile [Param=DictFile ...]为参数设置字典文件, 支持二次处理参数值e.g. -d user=users.dic pass=md5(pass.dic)高级用户可自写python函数处理参数,lib/value_process.pye.g. -d user=users.dic pass=capitalize(pass.dic)Detect:--no302               302跳转不敏感, 默认敏感,视为破解成功标记--fail Fail [Fail ...]破解失败时的正文标记,可以是多个e.g. --fail "user not exist" "password wrong"--suc Suc [Suc ...]   破解成功时的正文标记,可以是多个e.g. --suc "welcome," "logout"--header-fail HeaderFail位于HTTP头中的破解失败标记--header-success HeaderSuccess位于HTTP头中的破解成功标记--retry-txt RetryText当该文本出现时,视为当前请求无效,会再次重试e.g. --retry-txt="IP blocked"--retry-no-txt RetryNoText当该文本没有出现时,视为当前请求无效,会再次重试e.g. --retry-no-txt="<body>"--retry-header RetryHeader当该文本出现在HTTP头时,视为当前请求无效,会再次重试e.g. --retry-header="Set-Cookie:"--retry-no-header RetryNoHeader当该文本没有出现在HTTP头时,视为当前请求无效,会再次重试e.g. --retry-no-header="HTTP/1.1 200 OK"Proxy and Spoof:--proxy Proxy         命令行设定若干代理服务器e.g. --proxy=1.2.3.4:8000, 5.6.7.8:8000--proxy-file ProxyFile通过文件导入若干代理服务器e.g. --proxy-file=proxies.txt--check-proxy         校验HTTP代理服务器是否工作正常--fake-ip             伪造HTTP头 X-Forwarded-For,尝试伪造源IP--fake-sid FakeSID    伪造session ID--sleep Seconds       请求完成后延时N秒,减小被服务器封禁IP的几率Database attack:--database param1,parma2=file导入社工库进行撞库测试e.g. --database user,pass=csdn.txt--regex REGEX         按行正则提取参数值. e.g. --regex="(\S+)\s+(\S+)"General:-t Threads            并发工作线程,默认50--allow-redirect      允许Follow 30x调整,默认禁止-o OutFile            输出文件名。 默认为: _proxy.servers.txt 或 _cracked.accounts.txt--debug               进入调试模式,观察程序行为--silent              减少程序输出,只输出破解成功的条目

http://chatgpt.dhexx.cn/article/MNfHppib.shtml

相关文章

MD5碰撞与撞库和题

MD5 相同的情况叫做“碰撞”&#xff0c;现在网络中已经出现了两个相同的 MD5 可执行文件&#xff0c;所以MD5现在已经被弃用了&#xff0c;发生碰撞的概率是1/&#xff08;2^128&#xff09;。 SHA-1 也会发生碰撞&#xff0c;但是几率比 MD5 小的多。 2004年&#xff0c;我…

拖库 洗库 撞库的概念

一&#xff0c;背景&#xff1a; 用户数据泄露一直是如今互联网世界的一个焦点&#xff0c;从最近的京东撞库抹黑事件&#xff0c;到之前的CSDN&#xff0c;如家用户数据的泄露&#xff0c;服务商和黑客之间在用户数据这个舞台上一直在进行着旷日持久的攻防战。 对于大多数用…

(云安全)拖库-洗库-撞库

一&#xff0c;背景&#xff1a; 用户数据泄露一直是如今互联网世界的一个焦点&#xff0c;从最近的京东撞库抹黑事件&#xff0c;到之前的CSDN&#xff0c;如家用户数据的泄露&#xff0c;服务商和黑客之间在用户数据这个舞台上一直在进行着旷日持久的攻防战。 对于大多数用户…

java解决撞库的问题_Web安全开发之验证码设计不当引发的撞库问题

感谢某电商平台安全工程师feiyu跟我一起讨论这个漏洞的修复。以往在安全测试的过程中后台经常存在验证码不失效果造成的撞库问题&#xff0c;甚至在一些银行或者电商的登录与查存页面同样存在这个问题&#xff0c;一旦造成撞库无论对用户账号的安全性还是网站的负载都是巨大的挑…

什么是撞库攻击,如何预防撞库攻击?

1. 撞库的原理和危害 “撞库”&#xff08;Credential Stuffing Attack&#xff09;在网络安全中是一个古老的概念&#xff0c;按中文的字面意思解读&#xff0c;就是“碰撞数据库”的意思。“碰撞”意味着碰运气&#xff0c;即不一定能成功&#xff1b;而“数据库”中往往存储…

撞库详解

撞库攻击是如今最常见的攻击&#xff0c;给企业带来巨大威胁。撞库带来的威胁往往不是直接的&#xff0c;但是由此造成的信息泄露以及进一步的渗透与攻击会更为严重。Akamai的报告显示&#xff0c;2018年五月到十二月期间&#xff0c;共发生了约280亿次撞库攻击&#xff0c;其中…

mysql暴力撞库与弱密码检测

暴力撞库与弱密码检测 最近在生产数据库上碰到了一个问题&#xff0c;觉得挺有意思&#xff0c;总结出来和大家分享下。 关于暴力撞库和弱密码检测。 相信使用数据库的大家应该都不陌生&#xff0c;暴力撞库&#xff0c;简单通俗的讲通过一堆生成的密码&#xff0c;然后用默认…

倾家荡产、隐私全无?独家揭秘撞库攻击!

1. 撞库的原理和危害 “撞库”&#xff08;Credential Stuffing Attack&#xff09;在网络安全中是一个古老的概念&#xff0c;按中文的字面意思解读&#xff0c;就是“碰撞数据库”的意思。“碰撞”意味着碰运气&#xff0c;即不一定能成功&#xff1b;而“数据库”中往往存储…

撞库是什么

撞库&#xff08;Credential Stuffing&#xff09;是黑客通过收集互联网已泄露的用户和密码信息&#xff0c;生成对应的字典表&#xff0c;尝试批量登录其他网站后&#xff0c;得到一系列可以登录的用户。很多用户在不同网站使用的是相同的帐号密码&#xff0c;因此黑客可以通过…

什么是撞库及撞库攻击的基本原理

6月26日晚&#xff0c;我国大型聊天软件QQ出现了大规模盗号情况&#xff0c;而且是在QQ号本人在线时出现了被盗情况。 6月27日中午&#xff0c;腾讯QQ发布声明称&#xff1a;6月26日晚上10点左右&#xff0c;收到部分用户反馈QQ号码被盗。QQ安全团队高度重视并立即展开调查&am…

企业微信如何关联小程序?

我们在日常使用微信时&#xff0c;经常会用到小程序功能&#xff0c;直接从微信中打开第三方页面&#xff0c;很是方便&#xff0c;那么自从企业微信与微信打通之后&#xff0c;我们该如何将小程序与企业微信联系起来使用呢&#xff1f; 其实&#xff0c;在企业微信中&#xf…

企业微信登录报错:应用程序无法正常启动(0xc0000142);Win10应用程序无法正常启动0xc0000142错误的解决方法

企业微信登录报错&#xff0c;有时候要点击多次才能登陆。 解决办法&#xff1a;创建一个文本&#xff0c;把下面一段复制进去&#xff0c;文本后缀改成.bat&#xff0c;启动运行一下即可。 sc stop NSFFileCtl sc config NSFFileCtl start disabled pause 如下图&#xff1a…

企业微信小程序从开发调试到发布的全流程

企业微信小程序和普通微信小程序两者的关系 可以理解为企业微信小程序就是把普通小程序丢进了企业微信这个app里运行&#xff0c;企业微信小程序的发布依赖普通微信&#xff0c;需要先按照普通微信的发布流程进行发布&#xff0c;再去企业微信平台进行绑定小程序到工作台。 企…

什么是企业应用?

看到“企业应用“这次术语&#xff0c; 在你的下意识里&#xff0c;第一反应能想起哪些相关的词&#xff1f; 我的条件反射是&#xff1a; ERP, CRM, HRM, BI, CMS ...... 企业应用这个词听起来很高大上&#xff0c; 但是什么“企业应用”&#xff1f; 我发现我没法下一个准…

微信小程序个人和企业有什么不一样(个人和企业小程序的区别)

很多朋友在注册微信小程序时不知道微信小程序个人和企业有什么不一样。本文就为大家介绍一下个人小程序和企业小程序的区别。 1、注册流程不一样。在微信公众平台注册的小程序因为个人&#xff0c;小程序注册主体是个人用户所以他的注册流程比较简单&#xff0c;只需要个人身份…

企业软件开发流程

企业开发软件的流程 前言开发一个项目经历的流程&#xff08;步骤&#xff09;一、软件项目周期1、软件项目周期的几个阶段 总结 前言 本文记录开发一个项目的流程 开发一个项目经历的流程&#xff08;步骤&#xff09; 一、软件项目周期 1、软件项目周期的几个阶段 压缩成7…

四种java企业级应用程序的架构

1、传统三层架构(all in one项目) 传统三层架构大致可以分为表现层&#xff0c;业务层和持久层&#xff08;数据访问层&#xff09;。其中表现层负责接受请求和转发请求。业务层负责处理请求&#xff08;注&#xff1a;事务管理&#xff0c;日志记录等AOP类型的操作均封装在这…

企业网站源码PHP附企业小程序源码

时间不会为任何人停留&#xff0c;企业网站开发也不例外。随着时代的变化&#xff0c;趋势也在不断变化&#xff0c;品牌的数字化形象现在比以往任何时候都更加重要。重点已转向移动&#xff1b;但是&#xff0c;网站开发同样重要。      企业网站源码技术选型      演…

企业应用程序单点登录

企业每天都依赖于各种企业应用程序&#xff0c;包括云和本地应用程序。这意味着用户必须经常输入更多密码才能访问这些应用程序并完成他们的工作。为了提高用户的工作效率、减少密码疲劳并使身份管理更有效&#xff0c;您的组织需要部署高效的 SSO 解决方案。 AD360 提供企业 …

公司企业小程序怎么开发自己的小程序

随着移动互联网的快速发展&#xff0c;小程序已经成为企业展示自身产品和服务的重要渠道。那么公司企业小程序怎么开发自己的小程序呢&#xff1f;本文将为大家详细介绍小程序开发的步骤。 第一步&#xff1a;明确需求 开发小程序前&#xff0c;需要先明确自己的需求。是想要…