HINT : attackme의 소스인것 같다
strcpy함수는 bof에 취약한 함수이며, argv[1]의 값을 받아서 str로 저장한다.
bof로 우리가 원하는 실행을 하도록 ret값을 바꿔주면 되겠다.
gdb로 attackme를 까보니 HINT의 코드와 일치한걸 확인 할 수 있다.
bof를 하기위해 우선 환경변수에 shellcode를 추가해 보자.
잘 추가 되었다.
이제 gdb로 shellcode가 들어간 주소를 확인해 보자.
0xbfffffa8 을 보면 환경변수로 추가해준 \x90 + shellcode가 있음을 확인 할 수 있다.
이 주소를 잘 기억해 두었다가 bof시 조작할 ret값에 넣어 주면 쉘을 딸 수 있다.
자 이제 ret까지의 크기를 확인해 보자.
우선 ret에 들어있는 값을 확인해 보면 0x42015574임을 알 수 있다.
그런 다음 str에 argv[1]를 strcpy한 다음 주소에 break point 를 걸어 esp부터 ret까지의 값을 확인한다.
참고로 argv[1] 값으로 A를 여러개 주었다.
0xbfffdb30부터 0x41414141이 들어가는 것을 확인 할 수 있고,
0xbfffdc3c에 ret값인 0x42015574가 들어가 있는 것을 확인 할 수 있었다.
자 이제 이 거리를 계산 해보면
( buf + sfp ) (268) + ret (4) 가 된다.
따라서 argv[1]에 A를 268개 넣어주고, 나머지 4바이트에 쉘코드 실행 주소인 0xbfffffa8를 넣어주면 된다.
쉘을 따는데 성공하였고 my-pass를 사용하여 level12의 password를 알아내었다.
이제 level12로 올라가 보자.
[Write-up] Level 13 (0) | 2019.12.07 |
---|---|
[Write-up] Level 12 (0) | 2019.12.07 |
[Write-up] Level 10 (0) | 2019.12.06 |
[Write-up] Level 9 (0) | 2019.12.06 |
[Write-up] Level 8 (0) | 2019.12.06 |
댓글 영역