일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 공룡책
- 자료구조
- 알고리즘
- JUCE library
- go
- 프로그래밍
- 연결리스트
- 백준
- Nebula
- C++
- Docker
- JUCE
- go channel
- 코딩
- OS
- BOJ
- a tour of go
- C언어
- C++ gui 라이브러리
- 리듬게임
- gui
- JUCE라이브러리
- 운영체제
- JUCE 튜토리얼
- c++ heap
- LOB
- tour of go
- C++ gui
- vim-go
- C++ library
Archives
- Today
- Total
CafeM0ca
[LOB]level12 darkknight 본문
반응형
RTL을 사용해야하는 듯 하다.
RTL은 라이브러리로 리턴한다는 의미로 eip를 라이브러리 함수주소로 돌리면 된다. 쉘을 얻기 위해 system함수를 사용하여 인자로 /bin/sh를 실행하면 쉘이 실행될 것이다.
우선 시스템 주소부터 찾아보자.
gdb로 카피 파일을 열어서 적절한 곳에 bp를 걸어주고 print system하면 libc system주소가 나온다.->system함수 시작점: 0x40058ae0
인자로 쓸 /bin/sh를 찾아야하는데 곰곰히 생각해보니 system함수도 /bin/sh를 실행하고 다른 명령을 받으므로 system함수 어딘가에 /bin/sh가 있을 것이다. 그 주소를 찾아서 인자로 넣어주면 된다.
일일이 찾을 순 없으니 /bin/sh를 찾는 소스코드를 작성하자.
0x400fbff9가 /bin/sh의 주소다.
이제 버퍼를 덮어주고 ret에 system함수 주소를 올려주면 system함수가 실행될 것이다.
main+93을 보면 strcpy를 호출하고 있으므로 main+89는 strcpy의 인자이므로 buffer의 시작점임을 알 수 있다.
buffer(40byte) | sfp(4byte) | ret 으로 구성되어있다.
payload
./bugbear `python -c 'print "A"*44+"systemaddr"+"system ret"+"/bin/sh addr"'`
system함수+4byte는 system함수의 ret이므로 아무거나 덮어씌우거나 exit으로 정상종료해줘야한다.
반응형
'Hacking > LOB(Red Hat)' 카테고리의 다른 글
[LOB]level14 giant (0) | 2018.01.18 |
---|---|
[LOB]level13 bugbear (0) | 2018.01.17 |
[LOB]level11 golem (0) | 2018.01.04 |
[LOB]level10 skeleton (0) | 2018.01.03 |
level9 vampire (0) | 2017.09.14 |
Comments