일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 프로그래밍
- go
- C언어
- JUCE 튜토리얼
- 자료구조
- C++
- BOJ
- tour of go
- 공룡책
- 코딩
- C++ gui
- c++ heap
- C++ library
- Docker
- Nebula
- 백준
- JUCE
- 운영체제
- C++ gui 라이브러리
- a tour of go
- gui
- 리듬게임
- 연결리스트
- 알고리즘
- OS
- JUCE library
- go channel
- vim-go
- LOB
- JUCE라이브러리
- Today
- Total
CafeM0ca
level5 wolfman 본문
입장 ID:orc
입장 PW:love eyuna
인자가 2개 이하인지 확인, 환경변수 초기화, argv[1][47]이 \xbf인지 확인, argv[1]의 길이가 48보다 큰지 확인, 버퍼 40바이트 0으로 초기화 하고 있다.
gdb에서 main+278에 브레이크 포인트를 잡아주자.
스택구조는 아래와 같다.
buffer 40 | SFP 4 | RET 4
여태까지 argv[1]에 nop을 넣고 쉘코드를 실행시켰는데 argv[1]이나 버퍼를 사용하지 못하니 argv[2]에다 nop을 올려놓겠다.
argv[2]에 nop을 전달하는 방법은 아래와 같다.
r `python -c 'print "A"*44+"\xaa\xbb\xcc\xbf"'` `python -c 'print "\x90"*200'`
argv[2]의 주소를 찾아보자. RET보다 높은 주소에 argc와 argv의 주소가 들어가게 되는데 아래와 같은 경우는 0xbffffa44를 통해 argv[0]부터 argv[2]까지의 주소를 찾을 수 있다. 그리고 0xbffffa40부분 (0xbffffa38+8)을 보면 순서대로 3,0xbffffb3d,....이렇게 나열되는데 각각 agvc,argv[0],argv[1]임을 알 수 있다.(주소가 같기 때문)
argv[2]의 nop이 있는 주소를 리턴주소로 정하자.
payload
./darkelf `python -c 'print "A"*44+"&(argv[2]의 NOP)"'` `python -c 'print "\x90"*200+"쉘코드"'`
다음 ID:darkelf
다음 PW:kernel crashed
'Hacking > LOB(Red Hat)' 카테고리의 다른 글
level7 orge (0) | 2017.09.14 |
---|---|
level6 darkelf (0) | 2017.09.14 |
level4 orc (0) | 2017.09.14 |
Level3 goblin (0) | 2017.09.13 |
Level2 cobolt (0) | 2017.08.24 |