티스토리 뷰
이번 문제는 PLT(Precedure Linkage Table)에 관한 문제입니다.
먼저 소스코드를 보시면,
ret의 값이 strcpy의 주소(PLT)가 되어야하고, ret 뒤의 값이 0x41414141로 고정이 됩니다.
즉, strcpy가 수행한 뒤에 ret 값을 바꿔서 원하는 것을 수행시켜야 합니다.
하지만, memset으로 0x41414141로 고정시켜버리기 때문에 방법이 없는 듯 합니다...
strcpy의 동작에 대해서 다시 한 번 생각해 볼 때가 됐습니다.
strcpy(dst, src) -> src '주소 값'에 있는 문자열을 dst '주소 값'에 문자열을 씁니다. C언어를 공부할 때 당연시 해오셨을 수도 있지만 이 문제는 이 원리가 끝입니다...
gdb로 살펴보죠.
ret 에 strcpy를 넣고 뒤의 4 바이트는 프로그램에서 AAAA를 넣어준 것이고, 그 뒤의 8바이트가 strcpy의 인자로 전달되는 값들입니다. 앞의 0xbffffa0d는 dst고, 뒤의 0xbffffaa0은 src 입니다.
즉, 0xbffffaa0의 문자열(0x43434343)이 0xbffffad0의 문자열(0x41414141)로 전달하는 것입니다.
그러니 원래 0x41414141의 주소가 실행이 되어야하는데 0x43434343으로 바뀌었기 때문에 다르게 실행되는 것이죠.
이를 토대로 바로 공격해보겠습니다 ~
공격 코드 구성은, '"system 함수" + "A"*4 + "&/bin/sh" + "A"*28 + "strcpy 함수" + "A"*4 + dst + src' 와 같습니다.
strcpy... 정말 신기하네요... 문제 풀면서 새삼 왜 해커들이 코딩도 잘하나 느껴지는 것 같습니다...
'WarGame > LOB(Redhat_6.2) - 完' 카테고리의 다른 글
[LOB] xavius -> death_knight 문제 풀이 (0) | 2014.02.01 |
---|---|
[LOB] nightmare -> xavius 문제 풀이 (1) | 2014.02.01 |
[LOB] zombie_assassin -> succubus 문제 풀이 (0) | 2014.02.01 |
[LOB] assassin -> zombie_assassin 문제 풀이 (0) | 2014.02.01 |
[LOB] giant - > assassin 문제 풀이 (0) | 2014.02.01 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- security
- cloudsecurity
- opensource
- fleet manager
- platform
- web
- 2xx
- temlate
- REACT
- CIS
- terraform
- steampipe
- 계정정보저장
- .get()
- ControlTower
- teplate
- conftest policy
- JavaScript
- stateType
- 우주와컴퓨터
- 4xx
- IAM
- AWS #CIS
- aws
- ViaAWSService
- Cloud
- scp
- defaulttheme
- findinglatestversion
- compliance
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함