본문 바로가기

system/writeup

2019 utctf jendy's jendy's 2019 utctf jendy's대회 당시에는 포맷스트링이라.. 그냥 패스했는데 다시 풀어보니 분석의 중요함을 알려주는 문제였다. 이 바이너리에서 쓰이는 chunk들은 다음과 같다.x00000000 chunk struc ; (sizeof=0x20, mappedto_6)00000000 item_start_ptr dq ?00000008 item_end_ptr dq ?00000010 name_ptr dq ?00000018 item_num dq ?00000020 chunk ends​00000000 item struc ; (sizeof=0x20, mappedto_7)00000000 item_str db 24 dup(?)00000018 next_item_ptr dq ?00000020 item ends.. 더보기
2019 besidesSF slowfire slowfire 2019 besidesSF slowfire이걸로 water_dragon을 제외한 모든 포너블을 풀었다~ 취약점은 위 함수에서 발생한다.buf_sizea = 0x400이고, total은 최대 buf_sizea - 1이므로, buf_sizea > total을 충족시켜 두 번 입력받아 stack overflow가 발생한다. 이 바이너리는 nx도 존재하지 않아서 그냥 dup2 shellcode 짜서 슥 하면 된다. from pwn import *​context.log_level= 'debug'context.arch = 'amd64'​e = ELF('slowfire')#s = process(e.path)#s = connect('localhost', 4141)s = connect('slowfire-.. 더보기
2019 besidesSF genius genius 2019 besidesSF genius바이너리는 loader와 genius 두 개의 바이너리가 주어졌다. loader는 genius를 로드한 후, 코드를 입력받고 게임을 실행시켜주고 genius는 테트리스 바이너리이다. loader 부분을 분석해 보면 테트리스 게임에 불필요한 부분이 바로 보이는데 코드 패치 부분이다. 코드를 입력받고 apply_patch 함수를 부른다.패치는 총 두 번(2 byte) 할 수 있다.apply_patch 함수를 살펴보자. 우리가 입력한 코드를 통해 b1, b2, b3, b4, b5, b6가 결정되고 이는 idx와 val 계산에 사용된다. match 함수는 str to int 함수이다. 코드를 숫자로 매칭시킨다. 여기서 우리가 원하는 idx와 val값을 만들기 위.. 더보기
2019 besidesSF straw-clutcher straw_clutcher 2019 besidesSF straw_clutcher이건 미친문제다.바이너리 길이가 약 1000줄에 달하는 문제이다..분석이 가장 힘들었고, 익스는 쉬웠다.바이너리 길이가 너무 길다보니 취약점을 찾기가 매우 힘들었던 것 같다. 이 바이너리는 다음과 같은 기능을 한다.xPUT F.ILE 10 # 파일 만들기 (malloc)GET F.ILE # 파일 읽기 (print)RETR F.ILE # 파일 읽기 (print)DELE F.ILE # 파일 제거 (munmap, free)TRUN F.ILE 10 # 파일 사이즈 변경RENAME F.ILE A.AAA # 파일 이름 변경HELPLISTLOGIN a nonymous (작동 안함) 취약점은 rename 해주는 곳에서 발생한다.RENAME .. 더보기
2019 aeroctf remote_storage remote_storage 2019 aeroctf remote_storage이 바이너리는 staically linked이다.근데 문제는 binary와 libc의 symbol이 모두 strip되어 있다는 것이다.때문에 entry point에서부터 함수 이름들을 추측해가는 수밖에 없다.. 그렇게 함수를 따라가다 보면 switch 문을 만날 수 있다.업로드, 다운로드, 서명, 추가 등이 있는데 취약점은 서명에서 발생한다. 맨 밑에 printf를 보면 format string이 발생한다.sign_의 값은 signer와 new_hash가 xor연산되어 나온다. 이를 역연산하여sign_의 값을 포맷으로 맞추면 된다.위 취약점만으로도 익스가 가능하지만, 또다른 취약점이 발생한다. add 함수에서 스택 오버플로우가 일.. 더보기
2016 seccon jmper jmper 2016 seccon jmperㅎㅎ 재밌는 문제였다.취약점은 one byte overflow이며, 특별한 것은 setjmp, longjmp 함수를 이용하여 함수간 점프를 한다는 것이다. 위 setjmp 함수에서 jmpbuf에 레지스터 값을 저장하고 student_num 변수가 29를 넘게 되면 longjmp로 점프한다 !이 때, jmpbuf를 참조하여 저장된 eip로 이동하며, 그 때의 setjmp 함수의 리턴값은 114514가 된다. setjmp 했을 때의 jmpbuf의 상황을 보자.요롷게 되어있다. xxxxxxxxxx00009 typedef struct {00010 /** Saved return address */00011 uint32_t retaddr;00012 /** Saved stac.. 더보기
pwnable.tw de-aslr 보호되어 있는 글입니다. 더보기
pwnable.tw kidding 보호되어 있는 글입니다. 더보기