퍼블 몇개 먹어서 기분 좋다 (grin)
xoxopwn
걍 길이제한만 있는 pyjail이였다. 필터링도 없었다. 보고 5분컷내서 퍼블먹었는데, 그다음팀이 푸는데 3시간걸려서 기분이 좋았다.
그냥 open(__file__).read() 하면 파일 읽어올 수 있고, o함수 분석해서 디코드 해주면 플래그가 나온다
dead_note_lv1
OOB로 got를 덮고, 원하는 3byte opcode를 실행 할 수 있었다. atoi를 jmp rdi로 덮으면, 인풋으로 뛰게 되어서, 인풋에 있는 opcode를 다시 실행시킬 수 있었다. 이러면 16byte니까 간단하게 read를 하는 syscall을 부르고, 쉘코드 적어서 뛰어주면 된다.
unexploitable
웹너블이다. 퍼블먹었당. 웹에서는 크게는 취약점 없고 그냥 app.py보여주는 곳에서 tmp안에 key1, key2, unexploitable바이너리가 다 있다. key1,2로 level을 올려놓고, 바이너리를 보니 그냥 간단한 bof가 있었다. orw를 해주면 되는데, 주의할 점이 몇가지 있었다.
1. buffer + sfp 크기가 24인데, /home/unexploitable/flag 길이가 24라, 하위 1byte가 \x00인 dummy gadget이 필요했다.
2. rsi에 있는 값을 rdi로 옮겨야 한다.
3. 2를 충족시키기 위해 rsi => rax => rdi 순으로 옮기는데, 이 가젯에 call rcx가 있고, 그 후에 결과에 따라 코드가 꼬인다.
1. 같은 경우는 0x47e100에 있는 가젯을 사용하였다.
2, 3. 은 mov rax, rsi 가젯과 mov rdi, rax; call rcx가젯을 사용하였는데, call rcx이후에 rax==0이 아니면 이상한곳으로 튀어버린다.
이를 위해서 rcx==open으로 맞추고, 그전에 close(0)을 해서 return되는 fd가 0번이 되도록 해주었다.
cool
그냥 md5있는거 적당히 디코드해서 처음 12바이트 찾고, !가 13번째고, 나머지는 뒤 연산 따라서 적당히 맞추면 된다.
'CTF Writeup' 카테고리의 다른 글
2018 DIS ctf (0) | 2018.07.22 |
---|---|
Cyber Guardians League 2018 - 2회차 Writeup (0) | 2018.07.20 |
Meepwn2018 (0) | 2018.07.16 |
Cyber Guardians League 2018 - 1회차 Writeup (0) | 2018.06.28 |
DIMICTF-2018 writeup (0) | 2018.06.26 |