본문 바로가기
Security/Pwnable

LOB Level 19 nightmare

by J0DEV 2021. 8. 10.
반응형

nightmare -> xavius 로 접속합니다.

소스코드를 보는데

 

뭐 다막아놨어요

 

우선 계속 strcpy 가 나오다가 갑자기 fgets가 나온 것에 의문이 듭니다.

 

char *fgets(char *s, int size, FILE *stream);

 

이소스에서는

 

fgets(buffer, 256, stdin)이라고 되어있는데

 

여기서 stdin이 뭔지 궁금해서 

 

검색해보면

 

 

stdin이란, 표준입력 파일 스트림으로

 

표준 입력을 이야기할 때 흔히 '버퍼'를 이야기한다고 합니다.

 

 

그렇다면 fgets로 입력받은 값들이 stdin에 저장되는 것 같습니다.

 

제대로 알아보기 위해 gdb로 보면

 

fgets (main+21)에 break 를 걸고

 

stdin을 보면

 

0x00000000 이군요...

 

여기서 이게 아닌가 싶었는데

 

제가 아직 입력도 안받고 입력받은 줄 ;;

 

제대로 값을 입력받기 위해

 

 

 

 

printf(main+38)에 break 를 걸고

 

continue 한 후, 아무값이나 입력해 줬습니다.

 

 

그리고 다시 stdin 을 보니 

 

세상에

 

값이 입력되어 있는 것을 볼 수 있습니다.

 

0x40015019는 아니었고

 

0x40015000에 잘 들어가 있군요

 

 

그럼 잠시만요 아까 소스코드에서

 

0x40에 대한 검사는 하지 않았는데?!

 

크으

 

그렇다면

 

쉘코드를 넣어 버퍼의 크기를 맞추고 ret에 0x40015000을 넣어주면 되겠군요

(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"+"\x90"*9+"\x00\x50\x01\x40"';cat)|./xavius

 

반응형

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

RTL이란? (Return to Library)  (0) 2021.08.10
LOB Level20 xavius  (0) 2021.08.10
LOB Level 18 succubus  (0) 2021.08.10
LOB Level 17 zombie_assassin  (0) 2021.08.10
LOB Level 16 assassin  (0) 2021.08.10