BadTouch:一个可编写脚本的网络身份验证破解程序
作者:admin | 时间:2018-4-27 02:33:54 | 分类:黑客工具 隐藏侧边栏展开侧边栏
badtouch是一个可编写脚本的网络身份验证破解程序。虽然如今市面上关于常见服务爆破的程序已经接近于饱和的状态,但在实际Web应用凭据测试时,你仍可能最终会自己手动来编写自己的Python脚本。
badtouch的范围是定制服务破解。这是通过编写被加载到lua运行的脚本来完成的。这些脚本代表单个服务,并提供返回true或false的verify(user, password)功能。badtouch运行当中会为我们提供并发性,进度指示和报告信息。
视频演示:
base64_decode
解码base64字符串。
base64_decode("ww==")
base64_encode
用base64编码一个二进制数组。
base64_encode("\x00\xff")
execve
执行一个外部程序。返回退出代码。
execve("myprog", {"arg1", "arg2", "--arg", "3"})
hex
十六进制编码一个字节列表。
hex("\x6F\x68\x61\x69\x0A\x00")
hmac_md5
用md5计算hmac。返回一个二进制数组。
hmac_md5("secret", "my authenticated message")
hmac_sha1
用sha1计算hmac。返回一个二进制数组。
hmac_sha1("secret", "my authenticated message")
hmac_sha2_256
用sha2_256计算hmac。返回一个二进制数组。
hmac_sha2_256("secret", "my authenticated message")
hmac_sha2_512
用sha2_512计算hmac。返回一个二进制数组。
hmac_sha2_512("secret", "my authenticated message")
hmac_sha3_256
用sha3_256计算hmac。 返回一个二进制数组。
hmac_sha3_256("secret", "my authenticated message")
hmac_sha3_512
用sha3_512计算hmac。 返回一个二进制数组。
hmac_sha3_512("secret", "my authenticated message")
html_select
解析一个html文档并返回匹配CSS选择器的第一个元素。返回值是一个表格,其中text为内部文本,attrs是元素属性的表格。
csrf = html_select(html, 'input[name="csrf"]')
token = csrf["attrs"]["value"]
html_select_list
与html_select相同,但返回所有匹配,而不是第一个匹配。
html_select_list(html, 'input[name="csrf"]')
http_basic_auth
使用基本身份验证发送GET请求。如果没有设置WWW-Authenticate头并且状态码不是401,则返回true。
http_basic_auth("https://httpbin.org/basic-auth/foo/buzz", user, password)
http_mksession
创建一个session对象。这与python-request中的requests.Session类似,并且会跟踪cookie。
session = http_mksession()
http_request
准备一个http请求。第一个参数是从该会话被复制到请求中的会话引用和cookies。发送请求后,响应中的cookie将被复制回会话中。
下一个参数是method,url和其他选项。请注意,即使没有设置选项,你仍然需要指定一个空表{}。有以下选项可用:
-
query
- 应该在url上设置的查询参数的映射 -
headers
- 应该设置的头映射 -
basic_auth
- (未实现)使用{“user, “password”}配置基本auth标头} -
user_agent
- 用字符串覆盖默认的用户代理 -
json
- 应该被json编码的请求体 -
form
- 应该进行表单编码的请求体 -
body
- 作为字符串的原始请求体
req = http_request(session, 'POST', 'https://httpbin.org/post', {
json={
user=user,
password=password,
}
})
resp = http_send(req) if last_err() then return end if resp["status"] ~= 200 then return "invalid status code" end
http_send
发送使用http_request构建的请求。使用以下键返回表格:
-
status
- http状态码 -
headers
- 表格头 -
text
- 响应体作为字符串
req = http_request(session, 'POST', 'https://httpbin.org/post', {
json={
user=user,
password=password,
}
})
resp = http_send(req) if last_err() then return end if resp["status"] ~= 200 then return "invalid status code" end
json_decode
从json字符串解码lua值。
json_decode("{\"data\":{\"password\":\"fizz\",\"user\":\"bar\"},\"list\":[1,3,3,7]}")
json_encode
将lua值编码为json字符串。请注意,空表格被编码为空对象{}而不是空列表[]。
x = json_encode({
hello="world",
almost_one=0.9999, list={1,3,3,7},
data={
user=user,
password=password, empty=nil
}
})
last_err
如果未记录错误,则返回nil,否则返回字符串。
if last_err() then return end
ldap_bind
连接到ldap服务器并尝试使用给定的用户进行身份验证。
ldap_bind("ldaps://ldap.example.com/", "cn=\"" .. ldap_escape(user) .. "\",ou=users,dc=example,dc=com", password)
ldap_escape
以相对专有名称转义属性值。
ldap_escape(user)
ldap_search_bind
连接到ldap服务器,登录到用户搜索,搜索目标用户并尝试使用搜索返回的第一个DN进行身份验证。
ldap_search_bind("ldaps://ldap.example.com/",
-- the user we use to find the correct DN "cn=search_user,ou=users,dc=example,dc=com", "searchpw",
-- base DN we search in "dc=example,dc=com",
-- the user we test user, password)
md5
使用md5对字节数组哈希,并将返回结果作为字节。
hex(md5("\x00\xff"))
mysql_connect
连接到一个MySQL数据库,并尝试使用提供的凭据进行身份验证。成功时返回true。
mysql_connect("127.0.0.1", 3306, user, password)
打印一个变量的值。请注意为了避免带来不必要的麻烦,建议仅在调试时使用。
print({
data={
user=user,
password=password
}
})
rand
返回具有最小和最大约束的随机u32。返回值可以大于或等于最小边界,并始终低于最大边界。此功能尚未经过密码安全审查。
rand(0, 256)
randombytes
生成指定数量的随机字节。
randombytes(16)
sha1
使用sha1对一个字节数组哈希,并将返回结果作为字节。
hex(sha1("\x00\xff"))
sha2_256
使用sha2_256对一个字节数组哈希,并将返回结果作为字节。
hex(sha2_256("\x00\xff"))
sha2_512
使用sha2_512对一个字节数组哈希,并将返回结果作为字节。
hex(sha2_512("\x00\xff"))
sha3_256
使用sha3_256对一个字节数组哈希,并将返回结果作为字节。
hex(sha3_256("\x00\xff"))
sha3_512
使用sha3_512对一个字节数组哈希,并将返回结果作为字节。
hex(sha3_512("\x00\xff"))
sleep
暂停该线程指定秒数。这主要用于调试并发性。
sleep(3)
配置
你可以在~/.config/badtouch.toml中放置一个配置文件来设置一些默认值。
Global user agent
[runtime] user_agent = "w3m/0.5.3+git20180125"
RLIMIT_NOFILE
[runtime] # requires CAP_SYS_RESOURCE # sudo setcap 'CAP_SYS_RESOURCE=+ep' /usr/bin/badtouch rlimit_nofile = 64000
编译python脚本
badtouch运行时仍然非常的简陋,因此你可能需要对常规Python脚本进行编译。你的wrapper可能是这样的:
descr = "example.com" function verify(user, password)
ret = execve("./docs/test.sh", {user, password}) if last_err() then return end if ret == 2 then return "script signaled an exception" end return ret == 0 end
你的python脚本可能是这样的:
import sys try: if sys.argv[1] == "foo" and sys.argv[2] == "bar": # correct credentials exit(0) else: # incorrect credentials exit(1) except: # signal an exception # this requeues the attempt instead of discarding it exit(2)
*参考来源:github,FB小编 secist 编译