pwnable.kr bof

 

pwnable.kr bof문제

 

우분투에 nc pwnable.kr 9000을 쳤는데 Nah..가 나온다.

 

▶ wget: web get의 약어로 웹 상의 파일을 다운로드 받을 때 사용한다.

wget http:// pwnable.kr / bof
wget http:// pwnable.kr / bof.c

▶ 코드 보기

보려는데 권한 허용이 안됐다..

chmod +x file_name

권한을 주려면 + 를 적고 권한을 뺏고 싶으면 -를 적으면 된다.

여기서 x는 실행 excute이다.

성공!
여기서 AAAAA를 넣으니까 프로그램이 종료됐다. a를 많이 넣으니까 stack이 공격받은것을 탐지해서 충돌됐다는게 떴다.

 

 

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를 사용하면 이 안에서 계산이 가능하다.

 

fd가 아닌 fe인거 찾는데 꽤 걸렸다..ㅠㅠ

 

해결!

 

+ Recent posts