일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 워게임
- hacking game
- CTF
- writeup
- Wreckctf
- h4cking game
- got overwrite
- 웹해킹
- webhacking.kr
- webhacking
- pwnable
- Gon
- ctf player
- deayzl
- hacking
- 2022 Fall GoN Open Qual CTF
- christmas ctf
- System Hacking
- cryptography
- WEB
- dreamhack
- Buffer Overflow
- Wargame
- 해킹
- crypto
- TeamH4C
- hack
- python
- KAIST
- reversing
- Today
- Total
목록CTF (20)
deayzl's blog
제공된 dump.pcap 의 모습이다. wireshark 로 열어주면, http 프로토콜의 패킷을 보게 되는데 url decode 해주면 Time based Sql Injection 을 하는 payload 를 볼 수 있다. http 프로토콜만 나오도록 해주고, timestamp 를 살펴봐서 3초 이상 차이나는 패킷을 확인하면 flag 문자열의 한글자 한글자씩의 아스키 코드를 알 수 있을 것이다. (619번, 623번 패킷의 Time 섹션을 보면 4.7초에서 7.7 초로 넘어간 것을 볼 수 있다) dump 파일을 모두 수작업으로 뒤질 수도 있지만, 그때 당시에 bomblab-hard 문제를 푸느라 바빠서 조금 하다가 포기했다. 그래서 pcap 파일을 직접 뒤져주는 파이썬 라이브러리 dpkt 을 이용해주었다..
ghidra 로 디컴파일 한 모습이다. 일단 arr 의 주소를 확인해보면 맨 밑에 cnt 값이 들어있는 주소가 위치해 있는 것을 알 수 있다. 이 값을 1 이상으로 바꿔주면 루프를 여러번 돌 수 있을 것이다. 그리고 이 elf 파일은 partial relro 라서 got overwrite 가 가능하다. 위쪽에 stdout, stdin 주소가 있다. read index 에 대한 range 설정도 없으니, libc leak 이 가능하다. 그리고 arr 주소와 got 주소의 거리를 계산한 후, 하위 4바이트를 overwrite 해주면 된다. from pwn import * p = remote('host3.dreamhack.games', 22847) e = ELF('/home/kali/Downloads/drea..
index.php 의 소스코드이다.php 로 RESTful api 를 구현한 모습이 보인다. 딱봐도 뭔가 있을 것 같은 flag.php 를 보자면 key)'s value of the Key-Value storage with flagFun fact: (sha1 * sha1 * ... sha1)(flag) == $x (1337 times)EOF); 저 if 문을 통과해야 flag 를 특정 파일에 쓸 수 있다.ip 가 127.0.0.1 이여야 하므로, ssrf 가 가능한 php 파일을 찾아야 한다. array( 'method' => 'POST', "content" => "", //TODO: implement 'header' => $header )));die(file..
#!/usr/bin/python3 import random CHARSET = "ABCDEFGHIJKLMNOPQRSTUVWXYZ_/" def key_gen(): tmp = list(CHARSET) random.shuffle(tmp) p = "".join(tmp) k1, k2 = random.sample(range(1, 10), 2) k3_len = random.randint(5, 10) k3 = tuple(random.randrange(1, 10) for _ in range(k3_len)) p_li = list(p) p_li.append(p_li[k1]) p_li.append(p_li[k2]) p_li[k1] = " " p_li[k2] = " " p = "".join(p_li) return (p, k1, ..
CTF 두번째 참여 (전에 하나 더 참여한 것이 있지만, 중간에 거의 이탈했으므로 log 에 남기지 않았다) 푼 문제: zero gravity, bomblab-hard, private storage, checkers, api portal, sleepingshark, Survey/설문조사 wargame 영역에 발을 들여놓은 지, 거의 한 3, 4개월 밖에 지나지 않은 것치곤 성장을 많이 한듯 하다. 근데 풀이 수가 많은 문제 중 pprintable 을 못풀었다. 이것만 풀었다면 10위 권 안으로 들어갈 수 있었는데 살짝 아쉽다. 그래도 몇개월 전만 해도 상상도 못했을 등수이니, 10위 내외에 들어온 것에 꽤 만족한다. 이번 대회로 깨달은게 있다면, 의외로 나는 잘하기도 하면서 정말 멍청하다는거다.
문제 typo 같은 경우, 소스코드가 제공되어서 writeup 쓰기 좋았는데 이번엔 없다.. 캡쳐라도 해놓았어야 했나 생각이 드는데, 시각적 자료가 그리 필요한 문제는 아니기에 글을 써본다. 그림판으로 그린 로그인 창이다. 대충 이거랑 비슷하게 생겼으니까 그냥 진행하겠다. 이 form은 username과 password 두개의 data를 받고 post request를 /auth 로 보내는 역할을 한다. username과 password 칸에 ', ' or sleep(1)-- , ", \, %0a, %aa' 등등을 보냈는데 아무런 반응도 없었다.그래서 username=admin&username=admin&password=yeah&password=yeah' or 1=1-- 이런식으로 여러개를 보냈다. 그랬더..