일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- rootme
- 모인유럽송금
- 프랑스송금
- 네트워크해킹
- FTZ
- 루트미
- WebHacking
- 프랑스 교환학생
- 포너블
- 보안
- 해킹
- 프랑스교환학생
- client
- 모인유럽서포터즈
- Gentoo
- pwnable
- 모인해외송금
- 백도어
- wargame
- 웹해킹
- EPITA
- 리눅스
- web
- 해외송금
- 해커스쿨
- network
- 유로송금
- pwnable.kr
- Challenge
- Linux
- Today
- Total
Securing Keys
[Linux] pwnable.kr passcode 풀이 본문
pwnable.kr 다섯번째 단계: passcode 풀이를 시작하겠다.
문제에서 제공한 쉘에 접속해보니 앞선 문제들과 마찬가지로 소스코드와 실행파일 그리고 플래그값이 존재하는 파일이 있었다.
소스코드를 보면, passcode1과 passcode2를 scanf를 통해 입력값으로 받아들이는데, 입력값을 각 변수의 주소값에 저장하고, 이들은 초기화되어 있지 않기 때문에 문제에서 제시한 것과 같이 오류가 날 수 밖에 없다.
welcome() 함수를 확인해보면 기존에 이름을 입력받는 scanf는 -0x70(%ebp)에 입력값을 저장하고 있고,
login() 함수를 살펴보면 passcode1을 입력받는 scanf는 -0x10(%ebp)에 입력값을 저장하고 있음을 알 수 있다.
-0x70(%ebp) 에서 -0x10(%ebp)까지는 96byte만큼 차이가 나기 때문에 여기는 A로 채워주면 된다.
하지만 여기서 멈추는 것이 아니라, 그 이후에 수행되는 함수가 fflush이기 때문에 이걸 login 함수 밑에 있는 system 함수의 시작주소로 변경까지 해줘야 우리가 원하는 플래그를 확인할 수 있을 것이다.
fflush의 0x8048430을 확인해보니 0x804a004로 jump 시키는 것을 확인할 수 있었다. 따라서 여기에 system 함수의 시작주소를 넣어주도록 하겠다. 앞서 login 함수에서 봤다시피 system의 시작주소는 0x80485e3이다.
0x80485e3은 정수로 134514147이므로
위와 같이 passcode를 실행해주면 플래그값을 얻을 수 있다.
'IT > Linux' 카테고리의 다른 글
[Linux] pwnable.kr random 풀이 (0) | 2022.04.03 |
---|---|
[Linux] pwnable.kr flag 풀이 (0) | 2022.04.03 |
[Linux] pwnable.kr bof 풀이 (0) | 2022.04.03 |
[Linux] pwnable.kr collision 풀이 (0) | 2022.04.02 |
[Linux] pwnable.kr fd 풀이 (0) | 2022.04.02 |