익스는 올리지 않겠는데, 나는 어떻게 풀었냐 하면 https://github.com/david942j/one_gadget 이런걸로 libc 까서 32bit 에서 원샷으로 쓸수 있는걸 찾고 조건을 맞춰주려고 main 위에서 가젯들을 쪼개서 조건을 맞춰주고, 원샷을 썼는데, 이때 call eax 꼴로 되서 복귀 ret 값때문에 제대로 안되서 원샷도 위로가서 가젯들을 쪼개서 맞췄다.
사실 내가 요즘 푸는 문제들은 대부분 http://hozzang.tistory.com/ 쟝이 가져온다. 이게 쉐도우 스택 우회하는문제인데, 진짜 감으로 풀었다. 릭벡터는 눈으로 찾았는데, RTL 하는 부분이 감이였다. 아마 세이브한 리턴을 덮는거 같기도 한데, 솔직히 아직도 모르겠다. 적당히 루프나 이름길이 변수를 덮어주는걸 유의하자. 그리고 exit 을 릭했는데 앵간하면 다른거 하자. 나 이거 _exit 랑 구분되는거 처음 알았자너,,, 감으로 풀어서 솔직히 얻은건 많지 않은것 같다.. 그냥 쉐도우 스택같은거 우회할떄 이런 느낌이다 밖에 못배운듯
윽 짜증난다 이것도 쉘이 안떠 악 문제 풀떄는 제대로 풀리는데 뭔가 내가 문제를 만들어서 실습해보려 하면 안된다. 일단 malloc 을 내가 원하는부분에 받는거 까지는 되기떄문에 일단은 포스팅 해보겠다. House of Top 은 Top 청크를 겁나 크게 잡아서 GOT 같은 곳에다가 malloc 받아서 덮는 거시다. Top 청크를 0xffffffff 같은걸로 덮어놓고 malloc 을 해야하는데 이때 이 사이즈를 got - addr - 8 로 잡으면 got -4 부분에 힙이 할당되서 got overwrite 가 가능하다. 32 비트 기준 0xffffffff, 64비트 0xffffffffffffffff 안에만 있으면 아무영역이나 할당받아서 쓸 수 있을것 같다.
피곤해서 아예 안풀려다가 좀 그래서 쉬운거 하나 잡았다. 짱짱쉽다. 롤하면서 풀었다. 4개의 product 를 만들고 이걸 manager 에 물린다. 그리고 마지막에 물린애를 free 해주고 profile 기능을 이용해 같은 주소를 할당 받고 거기서 name 필드의 주소를 flag 가 있는 주소로 바꿔주면 된다. 돈순서랑 -24 해야하는거만 유의하자
unlink 페이크 청크 안만들어지는 예제 때려치고 그냥 잡았다. 괜히 예제에서 시간뺏겼다 ㅠㅠㅠ 대충 보면 keep = malloc, wipe = free, renew = read 쯤으로 볼 수 있겠다. keep 할때 각각 크기가 40 4000 40000 만큼씩 할당 해 준다. heap 주소를 전역에 관리하게 된다. 그러면 unlink 를 하면 되겠구나 생각할 수 있고, 그럼 chunk header 를 어떻게 바꿀것인가 하면 keep 1, 2, 3 => wipe 1, 2, 3 => keep 3 => wipe 1 => keep 1, 2 꼴로 하게 해주면 [ 40000 byte ( 3번 ) ] [ 40 byte ( 1번 ) ] [ 4000 byte ( 2번 ) ] 꼴로 되게 되어서 renew 3번으로 1번..
그 전까지 알던 패치되기 전 unlink 취약점이 아닌,패치 된 후에도 터지는 unsafe unlink 취약점 이당. 이거 이해하는거 너무 시간 오래 잡아먹었따 ㅠㅠ심지어 아직 익스는 안된다 짜증난다 진짜 왜그러지. how2heap 처럼 코드로 짜는건 fake chunk 만들고 쓱싹 되는데 익스로 짜면 전역변수에 저장된 주소가 안바뀐다. 자고일어나면 다시 해봐야지. heap 2 개 할당해놓는다. 이떄 처음 할당한 애는 전역변수에 주소 저장해서 포인터로 관리. heap1 안에다가 fake chunk 를 만들어 놓는다 (prev, size =0, fd = 전역변수addr - 0x18, bk = 전역변수addr - 0x10) 이런식으로 해놓으면 보호기법이 해제된다. heap overflow 를 통해서 heap..
사실 힙공부를 하기는 했는데 거의다 uaf 쪽이라서 Study 에 올리다가 오랜만에 heap 에 다가 올린다 이번에 해볼건 Fastbin Consolidate 라는 것을 볼것이다. Fastbin Consolidate은 Large bin 이상의 malloc 요청이 들어오면 다음 청크가 Top chunk 인지를 확인하고, 아니라면 fastbin 들을 검사해 필요없다 판단하고 병합시켜서 Small bin 으로 합병시켜버리는 것이다. 이런식의 코드가 있다. 이걸 분석해보자. 브레이크 포인트는 free(heap3) 이후와 malloc(0x400) 이후에 했다. free(heap3) 이후에는 이런식으로 평범한 fastbin 이 구성되어있다. 그런데 malloc(0x400을 하면' 이런식으로 합병되어 할당되는 주소가..
문제를 풀었지만, 풀이 및 플래그 공유가 룰상 제한되기 떄문에 로컬 플래그를 딴 모습만 올리겠습니다.
할것도 많고 1일 1폰도 하느라 바빠졌네요. 이렇게 바빠야 하는 맛이 나는거죠! 이번에는 Return to dl resolve 를 이용한 yocto 문제를 풀어보겠습니다. 저는 이 기법은 H4C 발표에서 NextLine 님의 발표로 처음 알게 되었는데, 그떄 64bit ROP 도 모르던 저는 암것도 몰랐지만 지금와서 익히게 되었습니다. 사실 처음에는 기법도 같이 올릴려고 했는데 잘 정리된 문서가 많아서 대체하겠습니다. Hackerz on the ship블로그의 문서 pwn3r님의 문서진용휘님의 문서진용휘님의 문서 링크중 한글이 깨진 문서가 있어 이를 ghostbin 에 옮긴 문서 이 문서들을 읽으면 마스터..! 할수 있습니다. 간략하게 정리하자면 plt 호출 => got에 있는 함수 주소로 이동 => 실..