目录
1、以管理员身份登录系统
2、邂逅对门的妹纸
3、万恶的Cisco
4、万恶的加密
5、喜欢泡网吧的小明
6、异常数据
7、md5真的能碰撞嘛?
8、小明爱上了一个搞硬件的小姑凉
9、有签名限制的读取任意文件
10、美丽的邂逅与密码器的开门密码
1、以管理员身份登录系统
2、邂逅对门的妹纸
- 点击链接,下载了一个网络数据包。
- 根据题目提示,猜测密码是她的出生年月日。2014年上大三,猜测她可能是1993、1994、1995、1996年出生。
- 使用字典生成工具(网上有很多),生成密码字典。
- 将下载的wifi-crack.cap数据包和生成的birthday.txt密码字典放入kali linux系统,使用aircrack-ng进行爆破。
-
【注】aircrack-ng是一款著名的WiFi破解工具,用于破解WPA/WPA2保护的WiFi网络。它的工作原理是:
- 使用airodump-ng捕获Wifi数据包,获取网络名称(SSID)、BSSID、密码(PSK)等信息。
- 使用aircrack-ng利用密码字典或密码生成规则进行暴力破解。
- 具体操作:
- 将数据包和密码字典拷贝到kail中,并在当前位置打开终端。
- 输入aircrack-ng -w birthday.txt wifi-crack.cap进行爆破。
- 爆破成功,找到密码。
- 根据题目提示,我们需要把密码进行md5 32位小写加密,即获得key。
3、万恶的Cisco
4、万恶的加密
- 根据题目提示,需要破解华为交换机的密码。
- 百度可知,华为/华三交换机密码的加密方式为DES,所以需要找到DES的解密方式。网上找的DES在线解密工具都需要添加密钥,而我们并不知道密钥。
- 网上找到一个python解密DES的脚本,运行发现有很多报错,应该是我在win下安装的是python3,该脚本的语法是python2。不想安装过python,直接在kail虚拟机中运行。
-
# coding=utf-8
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
i = 0
j = 0
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")
if __name__ == '__main__':
miwen = "aK9Q4I)J'#[Q=^Q`MAF4<1!!" // 需要破解的密码
print u'明文' + decrypt_password(miwen)
- 首先要安装脚本中引入的包,结果发现kail中的python2没有pip,无法下载模块。解决办法:kali linux 中python2不带pip的解决方法 - kalibb - 博客园 (cnblogs.com)
- 安装Crypto包时报错,原因是其已经没有被维护了。解决办法:pip安装失败解决以及crypto库安装注意点 - 渐逝的星光 - 博客园 (cnblogs.com)(要加上镜像,不然也会安装失败)
- 运行脚本,获得明文,即为key。
5、喜欢泡网吧的小明
6、异常数据
- 第一眼看到该序列就知道是base64编码,但是直接解不出来。根据题目提示和观察序列(都是大写),应该是该序列某些位的字母小写变成了大写。
- 编写脚本,使用递归列举出所有小写字母转变为大写之前的结果。
-
from base64 import *
import re # 正则表达式模块
def dfs(res, arr, pos): # 递归函数
# ''.join(arr):将列表转换为字符串
res.append(''.join(arr)) # append():将字符串加入列表中
i = pos
for i in range(i, 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)
# b64decode是base64模块提供的解码函数,返回值为bytes类型
res_decode = map(b64decode, res) # map():将b64decode函数作用在res的每个元素上
for i in res_decode:
# re.findall():匹配正则表达式
# repr():将bytes类型转换为字符串
if re.findall(r'\\x', repr(i)): # 匹配\x,\x为十六进制转义字符,存在\x说明该字符不是能打印的二进制位
continue
else:
print(i)
- 递归理解图:
- 运行脚本,得到key。
7、md5真的能碰撞嘛?
- 打开靶场。
- 点击链接,获得php代码。
- 阅读php代码发现,提交的password不等于rootadmin,但password的MD5加密值等于rootadmin的MD5加密值时,可获得flag。
- 根据MD5加密的特性,目前尚未发现与MD5计算出的任意摘要值相同的两段信息,所以我们不能找到一个password与rootadmin不同,且经MD5加密后与rootadmin的MD5加密值相同。
- !1793422703! 经过MD5加密后为:0e332932043729729062996282883873
- 根据php弱比较,PHP中的==双等号比较会把字符串转换成数字,而以0e开头的哈希值字符串,PHP会误认为是科学计数法表示的0。
- 所以需要找一个经过MD5加密后是以0e开头的password。
- 百度:以0e开头的MD5字典。
- 随便选一个,用HackBar提交post请求,获得flag。(要在首页提交post)
8、小明爱上了一个搞硬件的小姑凉
- 下载文件,使用Winhex打开,查看发现一个什么分析仪。
- 搜索SaleaeAsyncSerialAnalyzer并下载,下载后发现打不开文件。原因是要使用第一个版本打开,我下的是第二个版本。
- 重新下载第一个版本,下载地址:https://downloads.saleae.com/logic/1.2.40/Logic-1.2.40-Windows.zip
- 打开文件后,一直往左拉,看到一些十六进制字符。
- 重新设置软件,将显示设置为ASCII。
- 根据题目提示,只要内容的小写,得到key为:iloveyouxiaoguniang,错误。
- 加上感叹号,iloveyouxiaoguniang!,还是错误。
- 发现中间有个大写单词,查询发现是逗号。
- 重新提交key为:iloveyou,xiaoguniang!,正确。
9、有签名限制的读取任意文件
- 打开靶场,F12查看网络响应,可看到隐藏的php代码。
-
<!--<?php
header("Content-type:text/html;charset=utf-8");
include "_flag.php";
include "salt.php";
$mysalt=SALT;
if(isset($_GET['filepath'])&&!empty($_GET['filepath']) &&isset($_GET['sign']) &&!empty($_GET['sign'])){
myreadfile($_GET['filepath'],$mysalt,$_GET['sign']);
}
else{
//降低一点复杂度
var_dump(strlen($mysalt));
testsign("/etc/hosts",$mysalt);
}
function myhash($message,$mysalt){
return md5($mysalt.$message);
}
function checksign($message,$mysalt,$sign){
if($sign==myhash($message,$mysalt)){
return True;
}else{
return False;
}
}
function myreadfile($filepath,$mysalt,$sign){
$res=checksign($filepath,$mysalt,$sign);
if($res){
echo getfile($filepath);
}
else{
echo 'sign error!';
}
}
function testsign($filepath,$mysalt){
echo myhash($filepath,$mysalt);
}
echo "<!--".file_get_contents(__FILE__);
- 简单阅读php代码,再根据提示,知道密文长度为32和使用MD5长度扩展攻击(Length Extension Attack)。使用hash_extender工具,在kail中安装。
-
【注】哈希长度扩展攻击:
- 打开终端,输入:
- git clone https://github.com/iagox86/hash_extender
- sudo apt-get install g++ libssl-dev
- cd hash_extender
- make
- 【注】输入make后提示失败。打开文件系统/root/hash_extender/Makefile,删除-Werror,输入:wq保存。再重新make即可成功。
-
- 输入:./hash_extender -f md5 -l 32 -d '/etc/hosts' -s 'f3d366138601b5afefbd4fc15731692e' -a '' --out-data-format=html
- -d:原始数据
- -f:代表加密方式
- -l:key的长度
- -s:原始的hash值
- -a:添加的值
- –out-data-format:输出的格式
- 组织payload: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。
10、美丽的邂逅与密码器的开门密码
- 下载二进制文件并运行,需要输入密码。
- 使用IDA打开该exe文件,找到main函数,按F5生成伪代码。
- 大致查看伪代码,输入的密码会被调入执行sub_401005()函数。如果该函数返回的是1,即可输出一些东西。
- 查看sub_401005()函数。
- 该函数内部,密码又被调入执行了sub_401020()函数,查看该函数。
- 只要密码的长度大于50,即可返回1。
- 随意输入长度大于50的密码,获得key。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)