본문 바로가기

처음 만드는 티스토리

(16)
그러므로 만남이란 놀라운 사건이다. 너와 나의 만남은 단순히 사람과 사람의 만남을 넘어선다. 그것은 차라리 세계와 세계의 충돌에 가깝다. 너를 안다는 것은 나의 둥근 원 안으로 너의 원이 침투해 들어오는 것을 감내하는 것이며, 너의 세계의 파도가 내 세계의 해안을 잠식하는 것을 견뎌내야 하는 것이다. 그래서일 거다. 폭풍 같은 시간을 함께하고 결국은 다시 혼자가 된 사람의 눈동자가 더 깊어진 까닭은. 이제 그의 세계는 휩쓸고 지나간 다른 세계의 흔적들을 고스란히 담아내고, 더 풍요로워지며, 그렇기에 더욱 아름다워진다. 헤어짐이 반드시 안타까운 것은 아니다. 그것은 실패도, 낭비도 아니다. 시간이 흘러 마음의 파도가 가라앉았을 때, 내 세계의 해안을 따라 한번 걸어보라. 그곳에는 그의 세계가 남겨놓은 시간과 이야기와 성숙과 이해가 조개껍질이..
오랜만에 학교 산책 정말 오랜만에 포스팅을 한다. 그 동안 진행해왔던 프로젝트도 마무리 되고, 사두었던 카메라와 함께 학교 산책을 다녀 왔다. 요기는 새로생긴 국제 협력관 앞마당이다. 곧 노을이 질것만 같이 햇살이 예뻤던 날 공대 운동장에서 농구를 하고있는 학생들 이 건물은 내가 지내고 있는 공과대학 7호관이다. 8층에 위치해서 전망이 좋은편이기도 하다. 이상 일상 포스팅 끝!
DEFCON CTF Qual 2017 beatmeonthedl 이 문제는 좀 다양한 풀이법이 존재하는거 같다. 다른 방향으로 풀어보면 공부가 엄청 될거같다. (다만 난 아직 한 가지 방법으로밖에 풀지 못하겠다 ㅠ) 파일 자체에는 glibc malloc 의 보호기법이 들어가지 않았지만, how2heap 에서 제시했던 unsafe unlink 취약점을 이용해서 문제를 풀어보았다. 애초에 그렇게 풀라고 힙 포인터를 bss에 둔 것도 어느정도 고려한거 같다. 다른 사람들 풀이를 보니 참 다양하게들 푼거 같은데... 아직 그들의 풀이가 눈에 빠르게 들어오지는 않는다.. 언젠간 모든 풀이가 보이는 날이 오겠지? 풀이를 진행한다. 1. Chunk에 Overflow가 발생한다.2. Chunk를 포인팅하는 전역 변수(reqlist)가 있다. 그렇다면 unsafe unlink를 이용..
2014 hitcon stkof (unsafe unlink) 그동안은 패치되기 전의 unsafe unlink 만 공부해왔다면 이제는 패치된 후의 unsafe unlink 를 풀어보도록 한다. (얼떨결에 이런 문제가 얻어걸려서 공부하기 좋은 기회라고 생각한다.) how2heap 의 usnafe unlink 에 대해서 공부를 한 뒤에 문제를 풀어봐야겠다. how2heap 에 너무 자세하고 예술일 정도로 잘 나와 있으므로 문서를 좀 정리해봐야겠다. https://www.lazenca.net/display/TEC/unsafe+unlink 여기 문서에 너무나 자세히 설명해 있다. (꼭 정독하기 바람 두번 세번) http://code1018.tistory.com/195 여기도 같이 참고하면 좋을거 같다. 전체적인 Exploit plan 은 다음과 같다. 다음과 같은 방법으로..
defcon 2014 Baby_first_heap 오랜만에 포스팅을 한다. 데이큰 2014 워밍업 문제였는데, 엄청 쉬운 문제이다. (풀고보니 이거 풀기전에 Double FreeBug 완벽한 이해가 좀 필요할듯..) 힙 주소까지 모두 알려줘서 릭할 필요조차 없다. 아직 힙 구조에대해서 익숙하지 않고.. 또 몇일 보지 않았더니 unlink가 헷갈렸다. 이전 것을 좀 복습해야겠다. 근데 free함수를 보면 fd+8=bk 는 어디에 나오는거지??-> IDA로 보면 알 수 있음 어셈블리로 보면 fd+8 = bk, bk+4 = fd 해주는것을 볼 수 있음 또 왜 260짜리 청크 다음 청크의 PREV_INUSE 값을 1로 바꾸는거지.. 디버깅을 해보자 내일 ! -> 디버깅을 해봐도 모르겠고.. 나름대로 정리해본 결과 fake_chunk를 [260]청크 다음 넣어 ..
heap 문제 풀이 목록 defcon 2014 baby's first heap (완료) hitcon ctf 2014 stkof defcon CTF 2017 beatmeonthedl ---------------------------------------- 3.21 0ctf 2017 babyheap 이 외에도 hose of 시리즈도 공부해보아야겠다. 일단 https://www.lazenca.net/display/TEC/unsafe+unlink 여기 자료를 먼저 참고하고.. 내가 이해한 방식대로 다시 여기 정리하려고 한다. 3월까지 하우스 오브 시리즈를 다 볼 수 있을까?
Codegate 2017 messenger ezhp 과 비슷한 문제라길래 풀어본다. 64비트인거 빼고 완전 똑같다고 보면된다. 다만 다른점은 힙을 2개밖에 할당할 수 밖에 없고 그 사이즈 또한 32바이트로 제한되어있다. 실험) 2개의 메시지를 임의로 생성하고 "A*31", "B*31" 를 입력한 모습 ([heap]에 실행권한도 있음) 뒤에 \x0a 개행이 붙은것을 확인 가능 힙 메모리를 보니 malloc_chunk에 힙 메모리 주소가 적혀있는 것을 확인할 수 있다. 구조를 좀 생각해보면.. 힙 주소가 시작하는 부분부터 한 개의 chunk : | 8byte : ? | | 8byte : size | | 8byte : fㄱd | | 8byte : bk | | 32byte : data | | 8byte : ? | 힙 주소도 막 적혀있고 그러는데... 이..
Plaid CTF 2014 ezhp Double Free bug 공부 이후 처음 풀어보는 Heap overflow CTF 문제이다. 바이너리를 어느정도 분석해보면 알수있듯이, 예전버전의 glic때 썼던 free 알고리즘을 사용한다. 하지만 그때와는 다르다. free를 하지 않아도 fd, bk 가 존재했고, 또 다른 점은 unlink()시 bk+4 = fd, fd +8 = bk 가 들어간다. (2번째 함수 참조) fd, bk 검증 구문도 따로 없어서 힙 익스 연습용으로 적합하게 제작된 문제로 보인다. 문제의 풀이는 요기 블로그를 참조했다.. 아직은 혼자 풀 실력이 안됨.. write-up 참조.. (http://nextline.tistory.com/104 ) 왜 두 번째 청크의 prev_size, size 의 값을 0xffffffff, 0x..
Protostar heap3 Double free bug 를 이해하고 가장 쉽게 접근할 수 있는 문제.. 문제 환경은 아주 예전의 취약한 glic 버전을 사용하고 있기에.. 해당 사이트에서 제공하는 iso 로 진행해야 한다. 문제 소스코드는 다음과 같다. 1234567891011121314151617181920212223242526272829#include #include #include #include #include void winner(){ printf("that wasn't too bad now, was it? @ %d\n", time(NULL));} int main(int argc, char **argv){ char *a, *b, *c; a = malloc(32); b = malloc(32); c = malloc(32); ..
Double Free Bug 이제 heap overflow 에 관련해서 공부를 해볼까 한다. heap 에 대한 공격은 여러가지가 있다. 그 중 제일 기본이 되는 Double Free bug 참조 : http://smleenull.com/586 여기나온 블로그 문서가 제일 올바르게 작성되었다. (다른 곳은 좀 이해하기가 너무 어려움.. 사실 이해할 수가 없다고 해야함) smleenull 블로그 문서를 보면 대부분 이해가 될것이지만, 아래 부분에 대해서는 조금 추가 설명을 진행해야 되겠다. -> 특히나 chunk size 를 구하는(and 0xfffffffc) 매커니즘을 설명해놓은 문서는 여기밖에 없음 (위 그림에서 '다음 청크 포인터 + 다음 청크 사이즈' 를 변경 => '다음 청크 포인터 + 다음 청크 사이즈 + 4') 이제 위 정..