开局一个框,用户名密码一通瞎填,抓包一看,请求包和响应包全是加密文本。换几处功能点接着测也是加密内容,如下图所示。
就这?能难住俺们安服仔?安服仔们一般都是万金油,啥都会一点。
我给大家准备了一份全套的《网络安全入门+进阶学习资源包》包含各种常用工具和黑客技术电子书以及视频教程,需要的小伙伴可以扫描下方二维码或链接免费领取~
这一般需要在前端调试,跟一遍流程,寻找它的加密和解密逻辑,所以还是要需要一点点不入流的js逆向技能滴。
F12 打开 Chrome 开发者工具,看一下网络请求的情况。下面是可以看到 login 时的载荷是加密字段,盲猜应该是 AES 。
分析login 时的加密是怎么形成的,一般有两种下断点方式,一是点击启动器,点进第一个发起程序,下断点。二是添加XHR断点,在这里可以直接添加 login 字段,当浏览器发起请求时如果匹配到URL中有login这个字段,就会在这里断下来。
下好断点拦截到请求后,就需要观察和跟进它的函数调用堆栈,在它的调用堆栈中找到一个临界点,即经过某个函数或某几个函数,明文变成密文(密文变成明文),那么我们需要找点加密解密点,应该就在此中间。寻找的过程需要不断观察和下断点取消断点,循环往复,直到缩小范围。
断点
除了不断下断点一步步跟踪代码执行逻辑的这种方式外,也可以直接搜索关键词,比如:encrypt、decrypt、hexdigest 等等。
在一波搜索和不断调试后,终于找到加密和解密的逻辑了。这个站点加解密逻辑很low,只用上了AES对称加密,而且密钥还是固定的。
它的逻辑是:正常明文数据包经过AES加密(密钥固定)后发送。收到密文的响应包进行AES解密,再将解密后的数据交给相关 js 进行处理。
上图定位到了他加密函数的位置,使用的是 AES CBC模式,PKCS7 填充方式,密钥key是:1234567890adbcde , 偏移量iv是:1234567890hjlkew,去到AES在线加密网站测试抓到的明文是否能正常加密解密。非常nice,一发即中
我给大家准备了一份全套的《网络安全入门+进阶学习资源包》包含各种常用工具和黑客技术电子书以及视频教程,需要的小伙伴可以扫描下方二维码或链接免费领取~
经过对比,确认了上述的分析是正确的。但是在渗透测试中,需要频繁的抓包改包,与之相应的就需要不断对payload和测试数据包进行加密解密,如果纯手工加解密,不得累瘫了。
下面介绍一个俺们团队老大写的burpsuite插件burpy,专门用来高效处理Web站点流量加解密。
项目地址:
https://github.com/mr-m0nst3r/Burpy
详细的使用说明请看项目readme 和大佬博客:
https://m0nst3r.me/pentest/%E9%AB%98%E6%95%88%E5%A4%84%E7%90%86H5%E7%AB%99%E7%82%B9%E6%B5%81%E9%87%8F%E5%8A%A0%E8%A7%A3%E5%AF%86.html``
在Releases页面下好burpy插件的jar包,并安装。安装就不多说了吧,有手就行咯。
编写burpy python脚本需要一个叫 Burpy 的类,在类中,一般要实现encrypt、decrypt这两个函数。burpy 正常加载burpy脚本后,会把他俩注册到 Extensions 中
下面是针对此站点编写的burpy脚本,具体逻辑很看python代码。
from Crypto.Cipher import AES
import base64
# 密钥(key), 密斯偏移量(iv) CBC模式加密
BLOCK_SIZE = 16 # Bytes
pad = lambda s: s + (BLOCK_SIZE - len(s) % BLOCK_SIZE) * \
chr(BLOCK_SIZE - len(s) % BLOCK_SIZE)
unpad = lambda s: s[:-ord(s[len(s) - 1:])]
vi = '1234567890hjlkew'
key = '1234567890adbcde'
class Burpy:
def __init__(self):
self.body = None
def decrypt(self, header, body):
# 处理响应包
if body.startswith("\""):
self.body = body.split("\"")[1]
try:
decrypt_result = AES_Decrypt(self.body)
except Exception as e:
decrypt_result = "解密失败!请排查"
return header, decrypt_result
# 处理请求包
else:
try:
decrypt_result = AES_Decrypt(body)
except Exception as e:
decrypt_result = "解密失败!请排查"
return header, decrypt_result
def encrypt(self, header, body):
encrypt_result = AES_Encrypt(body)
return header, encrypt_result
def AES_Encrypt(data):
data = pad(data)
# 字符串补位
cipher = AES.new(key.encode('utf8'), AES.MODE_CBC, vi.encode('utf8'))
encryptedbytes = cipher.encrypt(data.encode('utf8'))
# 加密后得到的是bytes类型的数据,使用Base64进行编码,返回byte字符串
encodestrs = base64.b64encode(encryptedbytes)
# 对byte字符串按utf-8进行解码,并返回
return encodestrs.decode('utf8')
def AES_Decrypt(data):
data = data.encode('utf8')
encodebytes = base64.decodebytes(data)
# 将加密数据转换位bytes类型数据
cipher = AES.new(key.encode('utf8'), AES.MODE_CBC, vi.encode('utf8'))
text_decrypted = cipher.decrypt(encodebytes)
# 去补位
text_decrypted = unpad(text_decrypted)
text_decrypted = text_decrypted.decode('utf8')
return text_decrypted
if __name__ == '__main__':
test = Burpy()
header = "123"
body = "0aux2+M61DiN0AdGyZHHJK++KM80JGxIUkWzZEqeQ1vBjwNlysToUObFBmEgqZIG9ctczczJratDObvp1JrQR+69CU92y9UXEW3VfC+oLRUfstUivu7kSqSBYDr5+JUNP7AEOU6lcZehj+uOV6tdT9SADnQnBOlTB2qn592xv78="
a, b = test.decrypt(header, body)
print(a)
print(b)
使用效果
原始数据包样子
使用 burpy 进行加密解密
进过这一番折腾后,加密变成了明文,接下来的渗透测试就是如履平地、一马平川哈哈哈。
网络安全学习资源分享:
给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
因篇幅有限,仅展示部分资料,朋友们如果有需要全套《网络安全入门+进阶学习资源包》,请看下方扫描即可前往获取
👉1.成长路线图&学习规划👈
要学习一门新的技术,作为新手一定要先学习成长路线图,方向不对,努力白费。
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图&学习规划。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
👉2.网安入门到进阶视频教程👈
很多朋友都不喜欢晦涩的文字,我也为大家准备了视频教程,其中一共有21个章节,每个章节都是当前板块的精华浓缩。(全套教程扫描领取哈)
👉3.SRC&黑客文档👈
大家最喜欢也是最关心的SRC技术文籍&黑客技术也有收录
SRC技术文籍:
黑客资料由于是敏感资源,这里不能直接展示哦! (全套教程扫描领取哈)
👉4.护网行动资料👈
其中关于HW护网行动,也准备了对应的资料,这些内容可相当于比赛的金手指!
👉5.黑客必读书单👈
👉6.网络安全岗面试题合集👈
当你自学到这里,你就要开始思考找工作的事情了,而工作绕不开的就是真题和面试题。
所有资料共282G,朋友们如果有需要全套《网络安全入门+进阶学习资源包》,可以扫描下方二维码或链接免费领取~