이번에는 위와같은 소스코드로 주어졌다. FTZ를 했다면 공격을 어떤식으로 하는지 이해할 것이다,.



마찬가지로 더미가 없고 16바이트만큼 주어졌으니


공격방법은 이전과 동일하게 환경변수를 정해주고. 주소를 따온뒤에 



아래와 같이 공격하면 패스워드 획득



export code=`python -c 'print "\x90"*10+"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80"'`


25바이트짜리. 앞에 NOP을 10만큼 채워준 이유는 약간 쿠션? 같은역할이라고 들었는데


자세한건 나중에 추가하겠음.

'Pwnable > LOB' 카테고리의 다른 글

LOB Level3 cobolt->goblin 풀이  (0) 2016.07.23
LOB Level2 gremlin->cobolt 풀이  (0) 2016.07.23
LOB Level1 Gate->gremlin 풀이  (0) 2016.07.22


소스코드이다.

이번에는 버퍼의 크기가 16으로 줄었기때문에 환경변수를 써야할 것 같다.

앞전 레벨에서 실행하는 화면과 똑같으니 별달리 실행은 안하겠가.

바로 디스어셈블하자



main+3부분의 0x10만큼 감소한게 보이고.

이번에도 더미는 없다. 바로 버퍼값인 16만큼 깎았다.

메모리는 낮은->높은 순으로 buffer[16] | SFP | RET 순으로 있을것이다.

그러면 20만큼 쓰레기값채우고 RET에 환경변수로 가는 주소를 넣어주면 되겠다. ㅎ



환경변수를 출력하는 프로그램을 만들고

아래와 같이 환경변수에 넣어주고 주소를 확인한다.



공격에 성공



LOB란 Lord Of BOF이며 FTZ와 마찬가지로 해커스쿨에서 제작하였다고 들었다.



항상 그랬듯이 ll로 디렉토리를 확인하고 

bof문제인걸 확인하였다.



실행한 모습이다. 문자 그대로 출력.

그렇다면 gdb로 메모리 크기를 파악해보자



0x100 이므로 256이다. 여기서는 특이하게 더미가 보이질 않았다.

그렇다면 메모리의 구조는 낮은->높은 순으로 buffer[256], SFP, RET순으로 이루어져 있다는걸 파악가능하고

출력부분을 주소로 변경해서 재코딩을 하고 동작시켜보면 아래와 같이 RET의 위치가 나오게 된다.



그러면 아래와 같이 25바이트 쉘코드와 함께 공격을하면

정상적으로 쉘을 따오는것을 볼 수 있다.



+ Recent posts