pwnable.kr bof
▶ wget: web get의 약어로 웹 상의 파일을 다운로드 받을 때 사용한다.
wget http:// pwnable.kr / bof
wget http:// pwnable.kr / bof.c
▶ 코드 보기
chmod +x file_name
권한을 주려면 + 를 적고 권한을 뺏고 싶으면 -를 적으면 된다.
여기서 x는 실행 excute이다.
main부분을 보면 func함수를 호출하는데 deadbeef를 넘겨준다.
overflowme라는 32바이트를 선언하고 출력하고 gets로 버퍼의 입력을 받는다. smash me로 공격하라고 적혀있다.
if문을 보면 deadbeef가 cafebabe면 sh를 실행하고 아니면 Nah..를 출력한다.
gets에 바로 0xcafababe를 넣으면 안된다.
함수를 호출하는 call이 4개가 보인다.
코드를 보면 맨처음에 printf / gets / system / system 4번 실행하기 때문이다.
lea명령어를 보면 ebp-0x2c를 eax에 넣고 있다. eax는 산술연산 레지스터로 연산이 이뤄진다.
ebp-0x2c는 버퍼의 시작주소임을 알 수 있다.
cmp랑 비교하는 ebp+0x8이 키값이라는 것을 알 수 있다.
key-overFlowme를 빼면
ebp + 0x08 - ( ebp - 0x2c) = 0x08 + 0x2c (16진수) = 8 + 44(10진수) = 52다.
deadbef는 52만큼 떨어져 있다는 것을 알 수 있다.
key는 cafababe인데 리틀 엔디안을 써서 be / ba / fa / ca 식으로 들어간다.
<리눅스 자체에서 해결할 수 있는 방법>
if문이 40만큼 떨어져 있는것을 알 수 있어서 브레이크 포인터를 건다.
deadbeef의 주소는 0xffffd070 버퍼의 시작주소는 0xffffd03c이다.
p를 사용하면 이 안에서 계산이 가능하다.
'보안 > 포너블' 카테고리의 다른 글
포너블 Day7 ropasaurusrex 문제 풀기 (0) | 2021.05.26 |
---|---|
포너블 Day6 basic_exploitation_001 풀기 (0) | 2021.05.19 |
포너블 Day5 GDB 실행 과정 (0) | 2021.05.12 |
포너블 Day5 GDB설치, 명령어 (0) | 2021.05.12 |
포너블 Day4 collision 문제풀이 (0) | 2021.05.05 |