网络安全实验室6.解密关
字数 1408 2025-08-24 10:10:13
网络安全实验室解密关详细教学文档
1. 管理员密码重置漏洞利用
漏洞原理
系统在密码重置功能中使用时间戳的MD5值作为验证参数(sukey),且服务器时间与北京时间存在8小时偏差。
利用步骤
- 访问密码重置页面:
http://lab1.xseclab.com/password1_dc178aa12e73cfc184676a4100e07dac/index.php - 点击"忘记密码"进入重置模块
- 输入任意用户名(如aaa)并抓包
- 分析返回的链接,发现sukey参数为MD5加密的时间戳
两种攻击方法
方法一:BurpSuite爆破
- 确定时间戳范围(如1xxxx0000到1xxxx0000)
- 生成时间戳字典:
with open("pass.txt","w") as f:
for x in range(1xxxx0000,1xxxx0000):
f.write("%d\n" % x)
- 使用BurpSuite爆破,设置MD5加密
- 查找响应长度不同的结果
方法二:Python脚本爆破
import requests
import hashlib
import time
se = requests.session()
headers = {'Cookie': 'PHPSESSID=423613048c7ae8017f654bea6fafe808'}
while 1:
sukey = hashlib.new('md5', str(int(time.time()) - 28800)).hexdigest()
url = 'http://lab1.xseclab.com/password1_dc178aa12e73cfc184676a4100e07dac/reset.php?sukey=' + sukey + '&username=admin'
r = se.get(url, headers=headers)
if r.content:
print r.content
break
else:
print 'Cracking: ' + sukey
最终结果:yestimeispassword
2. WIFI密码破解
攻击步骤
- 下载wifi-crack.cap握手包
- 根据提示(2014年大三)推测密码为1993或1994年出生的8位数字生日
- 生成生日字典:
with open("dic.txt","w") as f:
for year in range(1990,2014):
for month in range(1,12):
for day in range(1,32):
f.write("%d%02d%02d\n" % (year,month,day))
- 使用EWSA导入握手包和字典进行爆破
- 找到密码后计算MD5(小写)
结果密码:19940808
MD5值:e1a45d0d24cb87490b9efb2fc2e8a2ba
3. Cisco交换机密码破解
两种解密方法
方法一:在线工具
方法二:Python脚本
#!/usr/bin/env python
# -*- coding: utf-8 -*-
try:
from cisco_decrypt import CiscoPassword
except ImportError:
raise SystemExit('\n模块导入错误,请使用pip进行安装!')
cisco_pass = '02070D48030F1C294940041801181C0C140D0A0A20253A3B'
crack = CiscoPassword()
password = crack.decrypt(cisco_pass)
print password
解密结果:aishishenmadongxi@Admin
4. Huawei/H3C交换机密码解密
解密方法
使用DES解密算法:
from Crypto.Cipher import DES
def decode_char(c):
if c == 'a': r = '?'
else: r = c
return ord(r) - ord('!')
def ascii_to_binary(s):
assert len(s) == 24
out = [0] * 18
for i in range(0, len(s), 4):
y = decode_char(s[i+0])
y = (y << 6) & 0xffffff
k = decode_char(s[i+1])
y = (y | k) & 0xffffff
y = (y << 6) & 0xffffff
k = decode_char(s[i+2])
y = (y | k) & 0xffffff
y = (y << 6) & 0xffffff
k = decode_char(s[i+3])
y = (y | k) & 0xffffff
out[j+2] = chr(y & 0xff)
out[j+1] = chr((y >> 8) & 0xff)
out[j+0] = chr((y >> 16) & 0xff)
j += 3
return "".join(out)
def decrypt_password(p):
r = ascii_to_binary(p)
r = r[:16]
d = DES.new("\x01\x02\x03\x04\x05\x06\x07\x08", DES.MODE_ECB)
r = d.decrypt(r)
return r.rstrip("\x00")
miwen = "aK9Q4I)J'#[Q=^Q`MAF4<1!!"
print u'明文' + decrypt_password(miwen)
解密结果:84432079
5. 卡片数据修改
解题步骤
- 下载dump文件并用WinHex打开
- 发现前8行有意义,70后为无用重复字节
- 修改第一个字节从AA改为8A
- 将金额从100.00(十六进制2710)改为200.00(十六进制4e20)
- 在文件中查找1027并替换为204e
最终key:cardcrack_skill_get!
6. 异常数据解密
解题方法
使用Base64变种解密,尝试大小写组合:
from base64 import *
import re
def dfs(res, arr, pos):
res.append(''.join(arr))
for i in range(pos, len(arr)):
if arr[i] <= 'Z' and arr[i] >= 'A':
arr[i] = arr[i].lower()
dfs(res, arr, i+1)
arr[i] = arr[i].upper()
arr = list('AGV5IULSB3ZLVSE=')
res = []
dfs(res, arr, 0)
res_decode = map(b64decode, res)
for i in res_decode:
if re.findall(r'\\x', repr(i)):
continue
else:
print i
解密结果:hey!IloveU!
7. MD5碰撞漏洞
漏洞原理
PHP在处理0e开头的MD5哈希时会将其解释为0,导致弱类型比较相等。
利用方法
寻找MD5值为0e开头的字符串:
!1793422703!的MD5:0e332932043729729062996282883873- 可用值:
s878926199a、240610708、QNKCDZO
验证结果:yesyouareclever!
8. 逻辑分析仪数据解析
解题步骤
- 下载.logicdata文件
- 使用Saleae Logic软件打开
- 添加Async Serial分析器
- 查看解码结果
解码结果:iloveyou,xiaoguniang!
9. MD5长度扩展攻击
攻击步骤
- 使用hash_extender工具:
./hash_extender -f md5 -l 32 -d '/etc/hosts' -s 'f3d366138601b5afefbd4fc15731692e' -a '' --out-data-format=html
- 组合New string和New signature构造URL:
http://lab1.xseclab.com/decrypt1_53a52adb49c55c8daa5c8ee0ff59befe/md5_le.php?filepath=%2fetc%2fhosts%80%00%00%00%00%00%00%00%00%00%00%00%00%00P%01%00%00%00%00%00%00&sign=1b17d9594eb404c97c5090b11660ac63
获取Flag:Md5LenghtExtAttackNowYouSee
10. 二进制程序分析
解题方法
- 下载exe文件
- 分析发现需要输入长度大于50的字符串
- 通过逆向或动态调试获取关键信息
最终key:0h_No_u_f0und_m3