분류 전체보기 썸네일형 리스트형 2018 codegate zoo zoo 2018 codegate zooxxxxxxxxxx+ 0: owner_name+ 16: animal1_chunk+ 24: animal2_chunk...+ 48: animal5_chunk0x40 크기의 owner chunk에서 animal chunk를 관리한다. xxxxxxxxxx+ 4 : name+ 392 : likes+ 396 : food_removed+ 400 : food+ 404 : dung_removed+ 408 : dung+ 412 : ill+ 416 : prescribed medicineanimal chunk는 이외에도 많지만 info 함수에서 확인할 수 있으므로 위 정보만 기억해두고 가면 된다. animal name에 20바이트만큼 받아 heap addr leak이 가능하다. (dung.. 더보기 2018 codegate super marimo super marimo 2018 codegate super marimo처음 init_marimo 부분에서는 0x20 크기로 malloc, 0x20만큼 입력받는다. 잘 작성되어 있다. 근데 profile을 수정하는 부분에서는 32보다 많이 받는다. 즉 heap overflow가 발생한다. view에서 정보들을 출력해주기 때문에 leak이 가능하며 위에 프로필 재입력 부분에서 *(a1+2)를 참조하여 입력하므로 arbitrary write가 가능하다. exploit을 짜면서 잘 보면 got를 system으로 바꿔 쉘을 실행시킬만한 함수가 보이질 않는다. ( 다풀고 풀이 보니 strncmp가 있네요 왜 못봤지 ㅠㅠ )처음에는 exit got를 one gadget으로 덮어 풀려고 했는데 안돼서 stack 주소를.. 더보기 dynamic, static, pie.. 보호되어 있는 글입니다. 더보기 2018 codegate superftp superftp 2018 codegate superftpsel의 값을 입력받고 switch문으로 들어가는데 case '1'이 아니라 case 1이어서 16진수로 '\x01'을 입력해야 한다. 회원 가입을 하면 chunk를 만들어 주는데 형태는 다음과 같이 id, pw, name, age가 24단위로 써진다. (string으로) 로그인 할 때 login_num을 증가시킨다. id, pw를 입력받는 과정에서 stack overflow가 발생한다. (canary 존재) user_download는 heap에 받지만 admin_download는 stack에 받는다. A/B/../C 를 입력하면 A/C로 바뀐다. /../를 제거한 후 /를 찾아서 A/C를 만들어준다. ( 정말 모르겠어서 라업을 참조했다 )엄청 긴 .. 더보기 c++ std::string c++ stdstring c++ std::string 클래스에 대해 정리해보려 한다.이걸 공부하게 된 계기는 std::__cxx11::basic_string::basic_string(v1)위와 같은 mangling된 c++ 함수를 분석하고자였다. 위 구문은 스택 오버플로우에서 std::string(v1)과 동일하다고 말하고 있다. 이 string 클래스는 우리가 일반적으로 문자열을 다룰 때 사용하는 char와는 차이가 있다. char형 배열, char형 포인터로 문자열을 다룰 때 char형 배열은 esp를 늘려 쭉 입력하는 형태이고 char형 포인터는 해당 주소에 문자열 주소를 가지고 있는 형태이다. string 클래스로 문자열을 다뤄보기 전에 구현부를 보고 가자. xxxxxxxxxxclass strin.. 더보기 2018 codegate baskinrobins31 baskinrobins31 2018 codegate baskinrobins31your_turn 함수에서 rop가 터진다.canary도 없고 계속해서 overflow가 터지므로 첫 번째 your_turn에서 libc를 leak하고 그 다음 turn에 system("/bin/sh")를 해주면 편하다.신경써야 할 것은 64비트 rop라는 것 뿐이다. from pwn import *e = ELF('./BaskinRobins31')s = process(e.path)l = ELF('/lib/x86_64-linux-gnu/libc.so.6')ru = lambda x: s.recvuntil(x)sl = lambda x: s.sendline(x)p = lambda : pause()io = lambda : s.inte.. 더보기 fastbin dup consolidate 정리 fastbin_dup_consolidate 정리 이번에 hitcon 문제를 풀면서 이 기법을 사용해봤는데 헷갈리는 점이 많았어서 정리한다. 이 기법을 설명하기 이전에 병합이 언제 일어나는지 알아야 한다.내가 여태까지 알기로는 병합은 두 경우에서 일어난다. inuse_bit flag가 존재하지 않는 chunk를 free했을 때 prev chunk와 consolidatelarge bin range chunk를 할당했을 때 fastbin chunk와 인접해 있는 경우 fastbin dup consolidate는 large bin range chunk를 할당했을 때 fastbin chunk와 인접해있지 않은 경우 fastbin chunk를 smallbin chunk로 이동시키는 것을 이용한 기법이다. xxxxx.. 더보기 2016 hitcon sleepyholder sleepyholder 2016 hitcon sleepyholder이 문제는 secretholder와 비슷하지만 다른점은 huge_secret이 처음에 할당만 할 수 있고 wipe, renew가 불가능하다는 점이다. 여기서 뭔 기법을 써서 풀어야할까 매우 고민했다. 큰 heap을 할당할 수 있으니 fastbin dup consolidate를 생각했는데, 나는 이 기법이 fastbin을 두 번 할당받고 싶을 때 사용하는 기법이라고만 생각했었는데 아니었다.이 기법을 이용하면 fastbin 크기를 smallbin으로 사용할 수 있는 놀라운 일이 벌어진다. 즉, fastbin으로 병합을 할 수 있다는 것이다.. 또한 secretholder에서 발견한 취약점인 nextchunk의 prev size를 바꿔줄 수 있.. 더보기 이전 1 ··· 9 10 11 12 13 14 15 16 다음