글
[FTZ] 해커스쿨 Level15
보안/시스템 보안
2018. 4. 24. 21:45
1. Level14에서 알아낸 비밀번호로 level15로 접속을 한다. 그래서 힌트를 열면 아래의 소스 코드를 볼 수 있다.
1 2 3 4 5 6 7 8 9 10 11 12 13 | #include <stdio.h> main(){ int crap; int *check; char buf[20]; fgets(buf, 45, stdin); // buf에 45크기만큼 읽는다. if(*check == 0xdeadbeef){ // check 포인터가 0xdeadbeef면 if문 실행 setreuid(3096,3096); // level16의 프로세스 ID system("/bin/sh"); // /bin/sh 쉘 실행 } } | cs |
2. gdb 파일로 /home/level15/attackme 파일을 열면 위에 것 처럼 디스 어셈블링을 할 수 있다. 위에서 살펴보면
ebp에서 char[20]까지의 거리는 56, ebp에서 check까지의 거리는 16이다.
buf[20]에서 *check까지의 거리 = 56 - 16 = 40 이다.
1에서 보았던 것처럼 check 포인터가 가르키는 값이 deadbeef면 if문을 실행하는데, gdb에서 보면 deadbeef의 값이
비교되는 곳을 보면 main+32 줄에 보면 deadbeef 값이 있는 것을 볼 수 있다. 저 근처를 한 번보면 deadbeef의 값을 확인할 수
있다. 그래서 알애의 명령어를 한번 쳐보자.
(gdb) x/10x 0x80484b2
3. 그러면 저런 형태로 출력이 되면서 메모리 주소에 deadbeef가 들어가 있는 것을 확인 할 수 있다.
그래서 공격 주소는 0x080484b2가 된다.
4. 위의 명령어를 치면 level16으로 가는 비밀번호를 찾을 수 있을 것이다.
about to casue mass
'보안 > 시스템 보안' 카테고리의 다른 글
[FTZ] 해커스쿨 Level18 (0) | 2018.04.27 |
---|---|
[FTZ] 해커스쿨 Level16 (0) | 2018.04.25 |
[FTZ] 해커스쿨 Level14 (0) | 2018.04.23 |
[FTZ] 해커스쿨 Level13 (0) | 2018.04.17 |
[FTZ] 해커스쿨 Level12 (0) | 2018.04.16 |