근래에는 파일스트림 + 힙 위주의 바이너리만 보는 것 같다.힙 루틴은 뭔가 파면 팔수록 재미도 있지만, 머리도 아프고.... ㅎㅎ 이 문제는 여러 다른방식으로도 풀 수 있지만, setvbuf를 이용한게 인상적이여서 라이트 업을 써본다. 메인함수 1개 내부에서 전부 구현되어 있고 이대로 끝이나는 간단한 바이너리이다. setvbuf를 통해 file stream제어를 버퍼링 사용안함으로 설정한다.즉, 임의의 heap buffer를 할당해서 데이터를 채우거나 그러한 행위를 하지않는다는 것이다. 123 29 #define _IOFBF 0 /* Fully buffered. */ 30 #define _IOLBF 1 /* Line buffered. */ 31 #define _IONBF 2 /* No buffering...
연휴를 맞아 ctf문제들은 막 풀어보며 공부하고 있다. 이번에 푼 bkp CTF의 memo라는 문제는 나름 되게 간결한 fastbin attack문제였다. 64bit dynamically linked binary + NX bit, Full Relro 파일이다. Full Relro이기에 바이너리 자체의 got overwrite는 불가능하다. ( 해당 영역이 read-only로 변경됨 )바이너리를 분석해보자. 처음에 몇가지 세팅을 진행하고, 이름 + 비밀번호를 입력받고, 메뉴를 보여주고 해당 메뉴에 따른 함수로 분기하는 구조이다.메시지를 남기거나, 마지막 메시지를 수정, 보기, 삭제, 계정정보 바꾸기, 나가기 6개의 함수들이 존재한다. 계정 정보를 입력받는데, 전역변수의 영역에 입력을 받는다.전역 변수에는 ..
File Stream Oriented Programming을 이용한 heap exploit이 있다.house of orange라는 것은 예전에 한번 봐두고, 아 아직은 이거는 할 수 없겠다 싶어서 뒤로 미루어 두었던건데...이제 좀 보면서 이해가 된다. 어떻게 이런식으로 exploit할 생각을 했는지 참 신기하다.... ( 천재인듯... )라이브러리와 시스템을 얼마나 잘 알고 있다는 건지... ㅎㅎ glibc malloc특징과, malloc 에러시 abort루틴에서 호출하는 함수를 절묘하게 이용한 exploit이다. http://4ngelboy.blogspot.kr/2016/10/hitcon-ctf-qual-2016-house-of-orange.html해당 기법에 대한 설명과 바이너리 분석은 위의 링크가..
오랜만에 써보는 write-up. 명절 연휴에 어디 가지도 못하고,.... 심심하고 딱히 뭔가 다른걸 하기는 귀찮고해서 라업하나 올려놔야지. 그냥 매우 간단한 문제다. 64비트 static 바이너리이다. 보호기법은 Partial RELRO에 NX만 걸려있다. IDA로 분석을 해보면 아래와 같다. 메인의 앞부분인데, scanf를 통해 몇번 연산을 진행할 것인지 정할 수 있다. 4회 이상, 255회 미만이 되어야한다. 이 범주자체는 큰 의미는 없다. 핵심인 연산부분이다. 사칙연산을 진행할 수 있는데, 다항연산은 불가능하며, 이항연산만 진행할 수 있다. 각각의 함수들에서 일종의 x, y 같은 변수의 값을 받는데, 이 변수가 전역변수 영역에 존재한다. 그리고 각 연산별로 결과값도 전역변수에 저장이 된다. 그리고..
지금도 왕초보지만 더욱 왕초보이던 3개월전에... 풀려고 했던 문제이다. exploit vector와 leak vector등이 아주 완벽하게 있는 문제인데 난 뭘 하걸까 그땐 ㅎㅎ 그리고 LD_PRELOAD를 설정해줌으로써, 원래 문제 환경과 비슷하게 만들어놓을려고 했는데..새로운 thread문맥을 생성해서 그런가... 실행이 제대로 안되더랑 ㅎ_ㅎ 어쨋건 보호기법부터 분석을 해보면, mitigation은 NX, Full Relro, Stack Canary, ASLR정도가 되겠다. 신선한건 clone으로 새로운 thread context를 형성하며, 해당 thread에서는 prctl을 PR_SET_SECCOMP mode로 설정한다.이른바, 리눅스 커널상의 샌드박스라고 봐도 된다. DA로 분석하게되면 좀 ..
보호되어 있는 글입니다.
how2heap에 unsafe unlink 예제인가.... 얼핏 봤던거 같아서...예전에 분석까지만 진행했다가 이번에 익스까지 완료해보았다. 사실 how2heap예제 자체는 이해하는데 크게 무리는 없었다.근데 이 unsafe unlink라는 기법이 어떤식으로 활용이 되는지는 감이 안잡혔었는데이 문제가 딱 감잡기에 좋은 것 같다. 메인 함수부터 분석을 해보겠다. menu가 4개가 있는데, 1번이 malloc, 2번이 edit, 3번이 free, 4번은 그냥 딱히 하는 역할은 없다.4번은 아마 나중에 leak용도로 넣어둔 느낌이기도하고... 그런 느낌이다. 내가 지정한 size만큼 malloc을 하는데, 그 리턴된 pointer는 bss영역의 공간에 저장되게 된다.그래서 unsafe unlink 공격의 대상..
간단하게 짜여진 바이너리이면서 되게 재미있는 pwnable 문제였다.쉘코드 작성에 있어서 능수능란함을 테스트하는 느낌이랄까... 우선 분석을 해보겠다. 메인함수이다.직관적이고 굉장히 간단하다. 일단 열어서 확인을 하면 뭔가 갑자기 마음이 편해진다.mmap을 통해 모든 권한( Read, Write, Exec )을 다 준 특정 영역을 생성한다.그리고 stdout을 fflush로 비워주고 dropSyscalls()라는 함수를 부른다.read를 통해 4096 byte만큼 읽어주며, mmap으로 할당해준 영역에 저장을 한다.그리고 그 영역에 저장된 값을 실행한다. dropSyscalls()함수에서는 seccomp 라이브러리 함수를 사용한다.seccomp_init을 통해 필터링리스트를 초기화시켜주고, seccomp..
살짝 예전의 baby first영역에 있었던 heap exploit 문제와 비슷한 느낌이다.malloc과 unlink는 custom으로 만들어진 함수이며, 일반적으로 많이들 사용하는 플러그인으로 디버깅 타임에 arena같은걸 조회할 수는 없다. 바이너리 자체에는 어떤 보호기법도 걸려있지 않으니까, 대회당시에는 서버의 ASLR이 전부이다.따라서 쉘코드를 사용하는 방향으로 풀어야할 것을 직감할 수 있다. dynamically linked binary라 ltrace를 통해 따라가며 실행해보면 처음에 아이디를 입력받는다.임의로 다른 아이디를 쳐보면 고맙게도 strlen에 본래 넣어야 할 아이디를 보여주며 그 문자열 길이만큼 비교를 진행한다. 아이디와 유사하게 패스워드도 똑같이 ltrace를 통해 알아낼 수 있으..
Heap exploit의 House of Force를 공부하며, 예제문제로 BCTF의 bcloud와 boston key party의 cookbook이 있었다. 일단은 bcloud문제부터 풀어보았다. 힙 공부하기 전에, 포멧스트링버그를 trigger하여 memory leak을 유도하는 문제가 있다곤 들었었는데... 이게 그 문제더라.방향만 잘 잡으면 되게 simple하게 풀 수 있고, 아니면 좀 많이 삽질할 수 있겠다 싶은 문제이다. ( 물론 저는 초보니까 후자 ) leak하는 포인트와 chunk의 meta-data를 overwrite하는 지점을 나같은 초보가 처음부터 직관적?으로 바로 찾기는 조금 힘들었다.문자열 출력과 strcpy같은 것은 null에서 끊기기 때문에, 이런것들에서 은근히 leak이 잘 ..