포너블(10)
-
Dreamhack - basic_rop_x64
오늘은 저번 시간에 했던 rop_x32에 이어서 rop_x64문제 풀이를 진행하고자 한다. rop_x64는 64비트로 컴파일된 바이너리 파일이다. 먼저 어떤 보호기법이 걸려져 있는 지 살펴보겠다. Partial RELO는 5섹션에 대해 쓰기가 불가능하지만 .got.plt, .bss, .data영역에 대한 got 덮어쓰기가 가능하다. NX비트가 활성화되어 스택에서 쉘코드가 실행이 안된다. pie는 안걸려져 있음으로 바이너리 주소가 랜덤화하게 바뀌진 않는다. 먼저 바이너리 파일을 실행시키기 전 소스코드를 살펴보겠다. 소스코드를 보면 buf값이 0x40으로 지정되어 있는데 read함수에서 0x400만큼 입력받음으로써 버퍼오버플로우 취약점이 발생한다. 따라서 이 버퍼오버플로우 취약점을 활용해서 rop로 연계할 ..
2023.09.23 -
Dreamhack - basic_rop_x86
이번 시간에는 전 포스터에서 올렸던 32bit rop문제를 복습할겸 가져왔다. 문제 설명은 위에 같다. 취약점을 찾아서 익스플로잇해서 플래그를 구하는 과정을 설명하겠다. 이 소스코드에서는 buf값을 0x40으로 정의하고 있는데 read함수에서 0x400만큼을 읽음으로써 버퍼 오버플로우라는 취약점이 발생게된다. 이 버퍼오버플로우 취약점을 악용해서 익스를 하고자 한다. 이때 라이브러리의 베이스 주소를 구해서 프로그램 간의 주소를 맞춰줘야한다. 때문에 read함수의 got 부분이 필요하다. 먼저 plt 부분의 주소는 0x80483f0인 것을 확인할 수 있다. 이 부분을 좀 더 자세히 들여다 보겠다. 조금 더 자세히 보면 0x804a00c인 것을 확인할 수 있고 여기가 read함수의 got라는 것을 확인할 수 ..
2023.09.16 -
Plaid CTF ropasaurusrex
오늘은 Plaid CTF대회에서 출제된 ropasaurusrex 문제를 풀이하고자 한다. 함수의 프롤로그를 보면 다음과 같다. 'WIN'이라는 문자열이 출력되는 것을 확인할 수 있다. 메인함수에서 sub_80483F4()함수가 호출되고 'WIN'이 write된다. sub_80483F4()함수에서는 136개의 공간을 가지고 있는 buf 변수가 존재한다. buf의 크기가 136인데 read함수에서 0x100만큼 입력받아서 buffer overflow 취약점이 발생하게 된다. 이러한 bof취약점을 활용해서 페이로드를 구성하고자 한다. read@got 주소를 릭해서 libc_Base 주소를 구하고자 한다. read@got는 위 빨간 박스의 값과 같다. ropgadget를 확인해보면 다음과 같다. 이때 pop3r..
2023.09.16 -
[dreamhack] basic_exploitation_000
앞으로 dreamhack 문제를 풀이하고자 한다. 오늘 풀어볼 문제는 basic_exploitation_000 이라는 문제이다. 해당 바이너리, 소스코드를 이용해서 취약점을 찾고 익스플로잇하여 쉘을 획득하는 것이 목표이다. main함수를 살펴보면 buf애 0x80만큼의 데이터를 할당하고 buf의 주소를 출력해주는 것을 확인할 수 있다. 그리고 buf의 크기는 0x80(=128)이자만 141만큼의 입력을 받음으로써 버퍼오버플로우 취약점이 발생한다는 사실을 알 수 있다. 이를 통해 페이로드를 구성해볼 수 있다. 먼저 0x80-len(shellcode) 만큼의 크기를 '\x90'로 채워주고 shellcode를 더해주고 함수 처음에 push ebp를 4바이트이기 때문에 4바이트도 '\x90'로 채워주겠다. 그리..
2023.09.04