본문 바로가기

system/writeup

trustctf 2019 abyss abyss trustctf 2019 abyss푸는데 가장 오래 걸렸던 문제이다.잠수하는 힙문제기도 하고 내가 약한 언솔빈이기도 해서..어쨋든 취약점을 설명하자면 맨 처음에 heap 주소를 준다. message 함수에서 chunk에 nbytes만큼 입력받는데, 그 계산을 자신의 size에서 뒷 청크의 size와 1을 빼서 계산한다. 즉, nbytes가 음수가 되어 heap overflow가 발생할 수 있다는 것이다. 또, dive 함수에서 malloc을 해주는데, deep 변수에 음수 값을 넣을 수 있다.근데 음수 값을 넣으면 dive 함수에서 malloc이 실행되지 않는다. 하지만 main 함수에서 calloc으로 다시 할당해주기 때문에 음수 값으로 chunk 전역변수 뒷부분에 주소값을 저장시킬 수 있다.. 더보기
trustctf 2019 start start_trust trustctf 2019 start처음에 약간 당황했는데 무리 없이 푼 문제이다. buf에 0x78바이트를 입력받기 떄문에 stack overflow가 발생한다.취약점은 아주 간단하지만 중요한건 leak이 없다는 것이다.. 근데 이거도 그냥 setvbuf_got의 뒤 2byte를 바꿔서 puts_libc로 바꿔준 후 setvbuf_plt를 불러 leak을 하면 된다. (이 경우 4bit bruteforcing이 필요하다.)물론 뒤 1byte를 바꿔서 syscall로 leak을 진행해도 된다. leak을 진행한 후 stack을 pivoting하여 쉘을 부르면 된다.from pwn import *​e = ELF('./start')s = connect('server.trustctf.com.. 더보기
trustctf 2019 로꾸꺼 로꾸꺼 trustctf 2019 로꾸꺼이 바이너리는 할 수 있는게 add밖에 없어서 처음에 많이 당황했었는데 tcache libc가 주어진 걸 후에 알아차리고 후딱 풀긴 했는데 아주 재밌는 문제였다고 생각한다. size2가 음수인지 검사를 하지 않는다. size2를 음수로 넣는다면 위 read_input 함수에서 뒷 부분의 heap chunk의 데이터를 1byte 덮어씌울 수 있다. 먼저, 이를 이용하여 tcache_perthread_struct의 counts, entries를 덮어 임의의 free chunk를 만들어 준다. print_reverse 함수로 *chunk[pivot]의 값을 출력해주기 때문에 setvbuf_got를 할당받는다면 setvbuf_libc를 leak할 수 있다. 그 후, mall.. 더보기
hitcon 2016 house of orange house_of_orange 2016 hitcon house of orange일단 문제 풀이를 들어가기 전에 알게된 것들을 정리하고자 한다.이런 상황에서 malloc(0x10)을 하게 되면 다음과 같은 상황이 발생한다.물론 ubuntu 16.04 LTS glibc 2.23 기준이지만 glibc malloc에서도 데이터가 그대로 남아있을 줄은 몰랐다.. 또, unsorted bin 혹은 small bin, large bin에서 large bin을 할당받았을 때, 할당과 동시에 그 자리에 fd, bk, fd_nextsize, bk_nextsize가 생성 된다.왜 이러는지는 아직은 잘 모르겠다.이런 상황에서 0x400 크기의 heap을 할당하면 다음과 같이 할당과 동시에 정보들이 기록된다.. free된 것도 .. 더보기
pwnable.tw babystack 보호되어 있는 글입니다. 더보기
pwnable.tw death note 보호되어 있는 글입니다. 더보기
pwnable.tw starbound 보호되어 있는 글입니다. 더보기
pwnable.tw spirited_away 보호되어 있는 글입니다. 더보기