[ level2 -> level3 ]
이번 문제는 기본적인 BOF 문제입니다. strcpy 함수로 buf 변수에 argv[1]의 값을 넣어주는데, 인자 길이를 제한하지 않기 때문에 BOF 취약점이 존재합니다.
이를 이용하여 스택에서 쉘코드를 실행시키는 형태로 풀이하도록 하겠습니다.
먼저 스택의 크기를 가늠하기 위해 4바이트씩 늘려 가며 A를 출력해줍니다.
140바이트를 출력했을 때 segmentation fault가 터지는 것으로 보아 buffer 128byte + dummy 8byte + sfp 4byte + ret 4byte 의 구조를 띄고 있는 것 같습니다.
ret 값에 들어갈 리턴 값의 위치를 구하기 위해 gdb로 스택을 살펴보도록 하겠습니다.
main 함수의 strcpy 부분에 breapoint를 걸고, argv[1]의 위치를 찾아봅니다.
140개의 A를 지나 return address(BBBB) 뒤의 0x90이 있는 지점을 찾아 그 중 한 곳의 주소를 집어줍니다.
이렇게 특정 스택 주소를 집어주는 이유는 여러 번 실행한 결과 랜덤 스택이 적용되어있지 않기 때문에 0x90중 한 곳에만 return 시켜준다면 뒤에 있는 쉘코드가 실행 될 것입니다.
payload : ./narnia2 A*140 + 0xffffd872 + 0x90*100 + 25byte shellcode
짜잔!
'Wargame > Narnia:OverTheWire' 카테고리의 다른 글
OverTheWire Narnia [level5 -> level6] (0) | 2016.01.19 |
---|---|
OverTheWire Narnia [level4 -> level5] (0) | 2016.01.17 |
OverTheWire Narnia [level3 -> level4] (0) | 2016.01.17 |
OverTheWire Narnia [level1 -> level2] (0) | 2016.01.14 |
OverTheWire Narnia [level0 -> level1] (0) | 2016.01.14 |