본문 바로가기

분류 전체보기

2016 hitcon secretholder secretholder 2016 hitcon secretholdersmall secret을 할당하고 쓸 때 40바이트 할당하므로 다음 chunk의 prev size를 덮을 수 있다. 전역 변수에서 각각의 heap address를 관리한다. -> unsafe unlink 물론 전역변수를 통해 입력도 받는다. 앞으로 힙오버만 있으면..! free할 때 전역 변수에 저장되어 있는 heap address를 초기화하지 않는다. -> 같은 곳을 여러번 해제 가능 huge chunk를 맨 처음으로 오게할 수 있다면 small_buf를 이용하여 free한 후 UAF를 일으킬 수 있다.그 다음부터는 fake chunk를 만들어 unsafe unlink를 trigger하고 free_got를 puts_plt로 덮어 leak.. 더보기
2017 secuinside ohce ohce 2017 secuinside ohceread_input 함수에서 32글자를 기준으로 input buffer의 길이가 오르락 내리락 한다. 우리의 input이 들어가는 변수는 ebp-0x20 영역이다. 즉 31글자를 넣으면 input buffer의 길이가 늘어나는 일 없이 ebp의 값을 leak할 수 있을 것이다. 근데 echo 함수를 보면 입력 받은 길이를 계산하여 그만큼만 SYS_write로 출력해 준다. 하지만 sub_40026D 함수 때문에 이조차도 회피할 수 있다. *v1이 있으면 계속해서 길이를 더해주는데 31글자를 넣을시 ebp까지 계산하므로 31글자를 넣고 38의 길이를 가질 수 있는 상황이 발생한다. A를 31글자를 넣었을 때 스택 상황은 위와 같다. reverse_echo로 이를.. 더보기
x86, x64 srop 정리 srop x86, x64 srop 기법을 정리한다.srop는 sigreturn return oriented programming으로, sigreturn system call을 사용하는 rop이다. 이 기법은 rop를 하기 위한 gadget이 부족할 때 요긴하게 사용할 수 있다. 이 기법을 이해하기 위해서는 user mode와 kernel mode에 대해 알아야 한다. 프로그램은 보안, 자원 관리 등의 이유로 user mode와 kernel mode를 왔다갔다 하면서 실행된다.user mode는 접근할 수 있는 영역이 한정적이며, kernel mode는 모든 자원에 접근할 수 있다. 아직 제대로 공부한 적이 없어서 정확히 어느 부분이 한정적인지는 모르겠다. 보통 kernel mode에서는 signal을 처.. 더보기
2016 codefate floppy floopy 2016 codegate floppy맨 처음에 floppy를 할당하는 코드이다. 다음부터는 v8이라는 변수를 통하여 floppy를 조작하게 된다. 즉, floppy struct가 스택영역에 써진다. write함수이다. data는 malloc한 곳에, description은 스택에 써준다. modify 부분의 description 입력에서 스택 오버플로우가 터진다. 위 스택 오버플로우를 통해 descrption, data 출력을 통한 leak이 가능하다. file 명령어로 봤을 떄는 dynamically linked였는데 코드를 보면 plt와 got가 존재하지 않는다. 그래서 동일한 보호 기법을 걸고 실행해서 확인해봤다. #include void main(){ printf("hello!\n").. 더보기
2017 0ctf babyheap babyheap 2017 0ctf babyheapalloc 사이즈를 4096 이하 맘대로 정할 수 있다. calloc으로 할당시 할당한 데이터 공간을 모두 0으로 초기화 시키므로 주의! 원하는 heap에 원하는 size만큼 정보를 넣을 수 있다. 아주 큰 heap overflow가 터진다. 이렇게 자유분방한 문제일수록 아직은 바로 딱 익스가 생각이 안나네유ㅜㅠ free에서 heap free 가능, dump에서 leak이 가능하다. 힙 내에 overlapping chunk를 만든 후 heap overflow를 내서 calloc으로 초기화된 chunk의 header를 다시 써준 다음 free시키고 main arena를 leak하면 된다.그 다음 unlink는 unsafe가 안되니 패스하고 house of s.. 더보기
pwnable.tw applestore 보호되어 있는 글입니다. 더보기
pwnable.tw dubblesort 보호되어 있는 글입니다. 더보기
2017 34c3 simpleGC simpleGC 2017 34c3 simpleGCtcache를 익히고 처음 풀어본 문젠데 정말 힘들게 풀었다.. 머리 터지는줄,,앞으로 이런 복잡한 바이너리는 struct와 주석, rename을 최대한 활용하여 프로그램을 정확하게 파악할 수 있도록 해야겠다. 일단 이 바이너리에는 여러가지 취약점이 존재한다. 하지만 쓸만한 취약점은 몇 개 안된다. 살펴보도록 하자. 가비지 컬렉팅을 하는 쓰레드이다. 그룹에 속해있는 사람이 아무도 없다면 free를 진행한다. user을 delete할 때 group에 속해 있는 사람 수를 줄이는 함수이다. 그룹을 새로 만들거나 변경할 수 있는 함수이다. 사실 여기서 idx의 값을 제한하지 않아 group_addr의 값까지 바꿀 수 있는데 *(ptr[idx]+2)에 입력하기 때.. 더보기