Tips & theory
dreamhack 문제 upload + git 기본 사용법
서론 dreamhack christmas ctf 문제를 만들고 upload를 하다가 생긴 문제를 해결하고 남겨둔다. 기본적으로 아래 링크를 따라 하면 되지만, 추가로 필요한 내용들이 다소 있는 듯... Dreamhack Wiki Dreamhack Wiki git을 이용한 파일 업로드를 위해서는 기본적인 Git 사용법의 숙지가 필요합니다. SSH 공개키 등록하기 생성된 문제를 Git으로 접근하려면 먼저 SSH 키를 서버에 등록해야 합니다. SSH 키를 생성한 적 dreamhack.io ssh 공개키 등록하기. 위키에서 설명한 것과 같이 public키를 등록하면 된다. 그런데 잘 등록 하였음에도 불구하고 아래와 같이 에러 메시지가 나왔다. ┌[WyV3rN]-(hack/prob)- └> ssh -T git@g..
C random 함수를 python에서 실행하기.
서론 꽤나 많은 문제들에서 random 함수를 사용한다. 더불어 seed는 time인 경우가 대부분이다. 결국 이를 가져와서 rand 값을 일치시켜줘야하는데, 이를 위한 python 코드이다. Code from ctypes import CDLL libc = CDLL('/lib/x86_64-linux-gnu/libc.so.6') libc.srand(libc.time(0)) rand = libc.rand() print(rand) 참고사항 문제에서 srand의 사용 시점과, rand의 사용 횟수가 가장 중요하다. 예를 들어 srand가 특별한 delay 없이 사용된다면 아무 문제 없지만, sleep()과 같은 함수로 delay를 강제로 주거나 서버와 로컬의 연결이 불안정하다면 time 값이 변경될테고, 이로 ..
docker gdb attach & pid로 gdb attach
서론 docker 사용 시 pwntools의 gdb.attach가 안먹히는 문제가 있었다. 물론 tmux로 화면 분할이 가능하다는 글도 보았는데, 잘 안됐다 -_- 그렇기에 사실 매번 ps -aux 이후 출력되는 pid를 찾아 gdb -p 1234 와 같이 gdb를 attach 했는데 어느 순간 너무 귀찮아졌다. gdb -p 이후 pid를 알아서 찾아서 쓸 수 없을까...? 결론 쓸 수 있다. 요약하면 명령어는 아래와 같다. gdb -p `pidof binary_name` 이리도 쉬운걸 열심히, 또 번거롭게 하고 있었다 -_-
memory leak 관점에서의 format string bug의 유용성.
서론 개인적으로 지금까지 format string bug는 단순히 offset 확인을 위한 %p(또는 %x), 입력 길이를 위한 %c, 길이만큼 쓰기를 위한 %n 정도만 사용하고 있었는데, linked_list 라는 문제를 풀면서 조금 더 발전할 수 있는 계기가 되었다. 원리 어차피 원리는 format string bug이다. 다만, memory leak 관점에서 활용성을 극대화할 수 있어서 조금 정리해둔다. 일단 간단히 코딩. main(){ char buf[100]; while (1){ gets(buf); printf(buf); printf("\n"); } } 컴파일 시 에러가 많이 나는데 무시해도 상관없음 ㅋ 일단, 아래와 같이 %p로 출력해봤다. ┌──(kali㉿kali)-[~/Downloads] ..
dockerfile for pwnable [2022-11-23]
1. 서론 docker를 쓸 생각이 없었는데, 시간이 가면 갈수록 CTF 문제 출제 경향이 docker를 사용하지 않으면 풀기 어려운 (풀 순 있지만) 상황으로 만들어진다. 특히 tcache poisoning 쪽이나 full relro - hook의 문제는 거의 필수적인 듯... 어쩔 수 없이 docker를 사용하게 되었고, 지금은 visual studio code와 연계하여 잘 사용하고 있다. 2. dockerfile 인터넷의 몇가지 파일을 조합하였고, build 중 발생하는 문제들이 있어 이를 수정하여 build에 성공한 파일이다. - 공통 22-11-23 : mirror server 변경 code 추가. (그닥... 썩... 빠르지는...?) / patchelf 추가 22-11-24 : gdb di..
return to dl resolve
- 서론 오랜만에 이론 글을 쓴다. root me 문제를 풀다가 NX, Relro, ASLR로 인해 rop이 가능할 것으로 판단하였고, 이에 memory leak이 필요한데 출력관련 함수가 하나도 없었다. 아무리 ASLR이라도 1/4096 확률로 성공 가능할 것으로 판단했던 brute force 또한 먹히지 않았다. 결국 무슨 수를 써서라도 memory leak을 하거나 다른 방법을 택해야했다. 이는 그 중 한가지 방법이며, got에 실제 주소가 쓰여지는 방식 자체를 공략하는 것이다. - 원리 관련 문제와 풀이는 아래와 같고, 이 글도 아래 문제를 기준으로 한다. 2022.11.09 - [Wargame/Root me] - [App-system] ELF x86 - Stack buffer overflow -..
Continuous free bug (double free bug)
* 서론 솔직히 이건 double free라고 하지말고 continuous free나 heap free unlink bug라던지라고 불러야하는게 맞지 않나? double free는 동일 heap 영역에 대한 free를 이야기해야되는거 아니야? 나만그래...? *원리 - 전제 조건 및 기본 원리 double free bug는 기본적으로 heap overflow를 기본으로 한다. 즉, P flag가 수정 가능해야하기에 heap overflow가 필수적이다. heap 영역은 free 될 때 다음에 사용할 주소를 fd 영역에 저장한다. 더불어 heap 영역이 초기화될 때 heap 영역들 사이에 빈 공간이 있다면 합쳐주며, 이는 unlink 함수를 통해 이루어진다. 이는 heap 영역을 효율적으로 사용하려함에 있..
source code site
Glibc source code (glibc-2.36.9000) - Bootlin Glibc source code (glibc-2.36.9000) - Bootlin elixir.bootlin.com 개인적으로 여기가 제일 나아보인다. Code browser - Explore C++ code on the web Code browser - Explore C++ code on the web Code Browser for C & C++ by KDAB code.woboq.org has become codebrowser.dev. Read more here This is an online C and C++ code browser. It focuses on improving the code navigation with..