티스토리 뷰
매우 간단한 문제입니다.
그 대신 이제 ASLR, Ascii-Armor, NX-Bit 가 걸려있어서 쉘코드를 실행시키기도 어렵고, 공유라이브러리 함수를 연결시켜서 수행하기도 힘듭니다.
그 대신 정말 참신한 방법이 존재합니다. 바로, execl+3 의 주소를 이용하는 겁니다.
이 글 읽는 분들이라면 아마 스택이 어떤식으로 만들어지고, 인자를 어떻게 참조하는지 아실겁니다. 그래도 간단히 보죠.
| buf(264) | ebp(4) | ret(4) | 인자1 | 인자2 | -> 이와 같은 식으로 구성됩니다.
위와 같이 구성되는 이유는 함수의 프롤로그 때문인데요. 함수가 처음 수행될 때 아래와 같이 수행됩니다.
익숙하시죠 ? push ebp; mov ebp, esp -> 이 과정을 거침으로써 위의 기본 스택 구조가,
| ebp(4) | ret(execl 함수) | new ret(4) | 인자1 | 인자2 | 인자3 | -> 이렇게 변하는 것이죠.
만일 위의 구조가 왜 그런 것인지 이해가 잘 안되신다면 Redhat 6.2(LOB)를 다시 한 번 푸시는 것이 더 도움이 되실 겁니다.
아니면, 이곳에서 공부하시면 될겁니다 ㅎㅎ...
아무튼, 함수의 프롤로그가 수행되면서 인자를 참조하는 위치가 바뀌는 것입니다.
그렇다면, execl+3의 주소를 ret에 넣어주고 ebp에 원하는 인자의 주소-8 의 위치를 넣어주면 스택은 아래와 같이 적용됩니다.
| buf(264) | ebp(0x12345678) | ret(execl+3) | 인자1 | 인자2 | 인자3 |
왜냐하면, execl의 프롤로그를 생략했기때문에 0x12345678을 기준으로 인자를 참조하게 되기 때문이죠 !
이해되시나요 ?(정말 신기하죠 ?!?!?)
그럼 이제 ASLR이 적용되지 않는 부분을 인자로 전달하면서 execl을 수행할 수 있는 곳을 살펴보겠습니다.
전 got 영역을 이용하겠습니다.
ebp를 0x08049610으로 주게되면, 첫 번째 인자를 0x08049618 부터 참조하게 되니, 저희는 \x01 값을 링크시켜주면 됩니다.
링크시켜 줄 파일은 다음과 같이 작성했습니다.
바로 링크걸고 공격해보겠습니다.
blood on the fedora...
'WarGame > LOB(Fedora_3) - 完' 카테고리의 다른 글
[LOB] evil_wizard -> dark_stone 문제 풀이 (0) | 2014.02.21 |
---|---|
[LOB] hell_fire -> evil_wizard 문제 풀이 (0) | 2014.02.20 |
[LOB] dark_eyes -> hell_fire 문제 풀이 (5) | 2014.02.20 |
[LOB] iron_golem -> dark_eyes 문제 풀이 (0) | 2014.02.07 |
[LOB] 문제 풀이를 위한 로컬 서버 구축 (0) | 2014.02.07 |
- Total
- Today
- Yesterday
- fleet manager
- conftest policy
- IAM
- 4xx
- ViaAWSService
- 2xx
- compliance
- cloudsecurity
- stateType
- AWS #CIS
- platform
- web
- teplate
- defaulttheme
- findinglatestversion
- 계정정보저장
- ControlTower
- steampipe
- terraform
- security
- opensource
- CIS
- .get()
- 우주와컴퓨터
- aws
- temlate
- JavaScript
- Cloud
- scp
- REACT
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |