목록Pwnable (5)
Sechack
포너블을 주분야로 하는 포너라면 누구나 공감하는 개빡치는 순간이 있다. 바로 로컬에서 exploit에 성공했는데 remote에서는 실패할때다. 이런 개빡치는 상황을 로컬에선 되고 리모트에선 안된다는 의미로 '로되리안' 이라고 한다. 포너라면 입에 달고사는 말일거다. https://dreamhack.io/wargame/challenges/969 나랏말싸미 악용하기설명 나랏말싸미... 듕귁에달아... 한글날을 기념하기 위해서 출제된 문제입니다. 한글로 작성한 멋진 시를 공유해주세요! 해당 문제의 실행파일은 나랏말싸미와 동일하며 플래그 형식은 DH{...}dreamhack.io 사건의 발단은 위 문제이다. 일단 이 문제를 데프콘 뛰기전에 워밍업 하자는 가벼운 마음으로 잡았다. 익스 자체는 적당히 재밌게 했는데..
드림핵에 kpwnote문제를 풀고싶어서 시작한 커널 공부이다. kpwnote는 몇시간전에 삽질하다가 결국 풀긴 했다. 목표를 달성했으니 커널공부는 좀 나중에 다시하지 않을까 싶다. 아무튼 커널 입문으로 core문제가 좀 유명하길래 이 문제로ret2usr이라는 기법을 공부했다. ret2usr은 유저모드에서 커널영역의 주소를 실행하거나 접근하는것은 제한되지만 반대로 커널모드에서는 유저영역에 자유롭게 접근할 수 있다는 특징을 이용해서 커널 모듈의 취약점으로 인해서 rip를 원하는대로 변조할 수 있는 상황에서 프로세스의 코드에 미리 권한상승을 수행하는 코드를 구현해놓고 해당 함수의 주소로 rip를 덮어서 유저영역에 구현해둔 악의적인 코드가 커널 권한으로 실행되도록 유도하는 기법이다. 본격적으로 core문..
맨날 워게임이랑 CTF문제만 풀면서 포너블을 ELF파일 한정으로 접해봤는데 이번에 김현민 님이 쓰신 "윈도우 시스템 해킹 가이드 버그헌팅과 익스플로잇" 이라는 책을 사서 처음 윈도우 포너블을 접해보았다. Stack buffer overflow를 이용한 공격 방법은 ELF익스랑 크게 다르지 않았다. 책 안보고 혼자서 해봐도 될정도로 매우 유사하다. 하지만 buffer overflow공격에 필요한 shellcode를 만드는 과정이 리눅스와는 많이 달라서 흥미로웠다. Universal Shellcode가 필요한 이유는 쉘코드 상에서 WinAPI함수들을 호출해서 사용하려면 해당 함수들의 주소를 알아야 한다. 하지만 Windows7 이상의 버전에서는 WinAPI함수들이 포함되어있는 kernel32.dll의 상위 ..
ASLR로 인해서 stack, heap, libc의 base주소가 프로그램 실행할때마다 매번 변한다. 따라서 우리는 libc를 이용해서 exploit하려면 취약점을 이용해서 libc주소를 leak하고 적절한 offset연산을 거쳐서 base주소를 구해야 한다. libc를 leak하는데는 여러가지 방법이 있다. 가장 일반적이고 떠올리기 쉬운건 fsb가 터질때 %p를 이용해서 leak하거나 bof가 터질때 rop chain으로 puts, write와 같은 출력함수들을 이용해서 함수 got와 같은 libc주소를 담고 있는 메모리 공간을 출력해주는 것이다. 아니면 스택에 libc주소가 정리 안되고 남아있을수가 있다. printf같은 함수는 NULL을 만나기 전까지 출력해주므로 스택에 libc나 stack주소가 ..
FSB문제를 풀다보면 주소를 2바이트, 1바이트 단위로 쪼개서 페이로드에 집어넣어야되는 상황이 흔하게 생긴다. (사실 2바이트 쪼개서 넣는게 가장 일반적인데 경우에 따라서 1바이트까지 쪼개야하는 경우가 생긴다.) 주소를 쪼개서 넣는이유는 한번에 넣어버리면 화면에 출력되는 시간이 너무 길다. (%n서식지정자는 출력된만큼 덮어쓰기 때문이다.) 바이너리에 따라서 익스플로잇 시간제한이 있을수도 있고 무엇보다 익스플로잇 시간이 너무 오래걸리기 때문에 주소를 쪼개서 넣어서 익스플로잇 시간을 단축하는것이다. 일단 주소 쪼개기의 예를 들자면 printf got를 system함수의 주소로 덮는다 가정해보자. printf got : 0x08048782 system addr : 0xf7ed8a40 라고 치고 offset이 ..