분류 전체보기
-
-
RCTF 2017 RNOTEPwnable/CTF 2017. 11. 8. 10:43
여기서 중요한 점은 add를 할때 전역 변수에 입력을 해주는데 이때 16byte 뒤에 포인터가 있는데 16byte가 아닌 off by one으로 인하여 1byte를 변조 할 수 있다.free되었는지 확인도 안 하기 때문에 fastbin dup 취약점이 있다. 끝 ㅎ 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 from pwn import * p=process("./RNote")elf=ELF("./RNote") def add(size,title,content): p.recvunt..
-
RCTF 2017 AirCraftPwnable/CTF 2017. 11. 8. 10:40
간단하게 익스방법만. buy를 이용하면 내가 입력하는 데이터와 힙 주소를 저장해주는 포인터와 함수 포인터 등을 가지고있다.이것을 free하면 함수 포인터를 NULL로 초기화를 안 해줘서 이것을이용하여서 pie base릭을 하고 plt got주소를 구할수있다. build를 이용하면 포인터 하나를 할당하고 그곳에 내 데이터가 들어가는 할당된 청크 주소가 저장된다. 그 동시에 내 사이즈에 맞춰서 할당한다.이때 전역 포인터 -> 청크 주소 저장 포인터 -> 내 데이터가 들어가는 청크(포인터) 이때 전역포인터가 더블포인터라 청크주소를 저장 하는 포인터가 가르키는 주소에있는 값을 출력한다. 이것을 노려서 라이브러리 릭을하였다. enter를 쓰면 free가되면서 청크 주소를 저장하는 포인터와 내 데이터가 들어가는 포..
-
RCTF 2015 SHAXPIANPwnable/CTF 2017. 11. 4. 21:20
첫 번째 메뉴 함수 사진이다.여기서 보면 마지막 heap이 저장되어있는 포인터를 가지고와서 새롭게 할당되는 heap + 36에 이전 청크의 힙을 넣고 0x0804b1c0 포인터에 자기자신을 넣는다.(최신 청크니깐) 그 중간에 입력받는데 40만큼 할당하고 60만큼 입력받으면서 오버플로우가 일어난다. 처음 들어올때 입력받는 부분인데 0x0804b0c0(phone number) 0x0804b1c0(heap pointer) 0x0804b1e0(address) 순으로 전역변수가 선언되어있는데 우리는 이전 청크 pointer를 덮을 수 있고 heap pointer 가까이에 접근이 가능하다 그 뜻은 pointer 부분 이전에 phone_number 부분에 페이크 청크를 만들고 다음 청크 fd부분을 조작하고(fastb..
-
RCTF 2015 welpwnPwnable/CTF 2017. 11. 4. 20:49
main 함수를 보면 1024크기를 가진 buf에 1024까지 입력을 받고 echo 함수로 엄청나게 작은 사이즈를 가진 버퍼에 복사를 하면서 오버플로우가 일어나는데 이때 복사를 하는게 strcpy 같은 함수가아닌 for문으로 buf에 NULL값을 만날때 까지여서 바로 ROP를 때리면 중간에 멈추게되면서 실패한다. 현재 AAAAAAAAAAAA를 넣고 한개를 복사했을때 모습이다.echo 함수 ret뒤에 바로 main함수 버퍼가 있어 저것을이용하여서 공격을 때릴수있다. echo 부분에서 ret에 0x40089c에 있는 esp를 움직일수있게 하는 가젯을 쓰면 아래쪽 NULL값 걱정이 없는 1024 buf에 esp가 가게될것이다. echo에 있는 buf가 아닌 main에 있는 buf에 제대로된 ROP를 때리면 쉘..
-
Belluminar 2016 remuheapPwnable/CTF 2017. 10. 19. 01:06
fgets를 쓰면 힙에 malloc가 되고 데이터를 쓴다.그 malloc된 힙을 이용하여서 UAF이후 unsorted bin attack 한 다음에 전역변수 공간에(bss) fake chunk를 만들어주고릭 하고 공격하면 된다. 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172from pwn import * p=process("./remuheap")elf=ELF("./remuheap") def malloc(size,data): p.recvuntil('> ') p.sendline("1") p.recvuntil(': ..
-
31c3ctf 2014 mynxPwnable/CTF 2017. 10. 9. 01:28
여태까지 문제들을 풀이를 너무 보면서 한것같아서 이번문제부터는 최대한 풀이를 안 보고 풀어야겠다. 시작메뉴는 이런식으로 acii_art 추가, 출력, 세부메뉴? 등이 있다.취약점은 세부메뉴에서 comment 추가시키는 부분에 있는데 데이터부분을 252byte를 입력받는데 off by one 취약점이 생긴다.1byte로 인해 다음 구조체에 플래그 부분을 조작할수있게된다. 아래 구조체 분석을 보면 함수 포인터가있는데 함수포인터는 select ascii_art 부분에 3번 메뉴로 있다. 1. or연산2. LOLO 초기화3. 소문자 초기화 기능은 이렇다. 그리고 문제에서 나오는 구조체는 아래와 같다.123456789101112131415ascii art[0] = 0x48 [1] = index[5] = (&off..
-
bctf 2016 memoPwnable/CTF 2017. 10. 2. 22:25
1번이 edit, tear에서 입력한것을 출력해준다.2번이 edit기능으로 ptr이라는 전역변수에 n(120)만큼 입력해준다.3번이 ptr변수를 realloc 하고 n사이즈를 입력받고 n만큼 입력한다.4번이 또 다른 전역변수 입력5번이 또 다른 전역변수 입력 이 문제에서는 malloc대신에 realloc함수를 사용하고full relro가 걸려있으니 got overwrite를 사용하지못하니 *_hook종류를 써야된다.여기서 쓰여지는 hook은 realloc_hook뿐이다. 이 문제에서는 free함수가 없는데 이런 문제에서 쓰이는 기법은 2가지이다. 1. malloc_consolidate (문제풀때 까먹었었음 ㅠㅠ)2. house of orange 1번은 hitcon sleeptyholder2번은 hitco..