Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 오버워치 세이버메트릭스
- #IntelManual
- FTZ 레벨2
- command
- Overwatch League SaberMetrics
- #Qt Creator
- #MINT64 #Sqix
- vi 외부 명령어
- #
- Network
- ftz
- 인터럽트
- linux
- 오버워치
- vim
- vi
- BEST of the BEST
- libpcap
- C++11
- libtins
- KASAN
- >
- Sqix
- #IntelManual #segment Descriptor #세그먼트 디스크립터 #MINT64 #Sqix
- #Best of the Best #OS #MINT64 #Sqix
- Find
Archives
- Today
- Total
Sqix
FTZ Level17 본문
저번에는 shell 함수가 있었는데 사라졌습니다. 대신 setreuid가 call 호출 이전에 주어졌네요.
그렇다면 RTL 기법을 활용해서 문제를 해결해 보겠습니다.
objdump, strings 명령어를 이용해서 system(), /bin/sh의 주소를 구합니다. libASLR이 없으니 저 주소는 고정적입니다.
call의 위치에 system() 함수의 주소를 넣어 놓고, fgets에 들어가는 인자를 조작해서 call 직전 stack의 최상단에 /bin/sh 주소를 넣으면 system(/bin/sh) 호출이 됩니다.
이를 위해서는 어셈을 한번 봐야겠죠
gdb 인자로 값을 밀어넣고 실행을 시켜 보도록 하겠습니다.
*call이 가리키는 함수를 호출하기 직전에 스택의 맨 위에 buf의 첫 4bytes가 존재하므로, 이 부분을 /bin/sh로 바꿔주고, call에 시스템 함수의 주소를 넣습니다.
이렇게 하면 setreuid가 실행된 상태에서 /bin/sh이 실행되어 상위 권한을 얻을 수 있습니다.
$(python -c 'print "\xa4\x7e\x12\x42" + "A" * 36 + "\xc0\xf2\x03\x42"'; cat) | ./attackme
'Wargame > FTZ' 카테고리의 다른 글
FTZ Level19 (0) | 2018.07.21 |
---|---|
FTZ Level18 (0) | 2018.07.20 |
FTZ Level16 (0) | 2018.07.20 |
FTZ Level15 (0) | 2018.07.10 |
FTZ Level14 (0) | 2018.07.10 |
Comments