일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Recon
- ssrf
- BANDiT
- over the wire
- Cryptography
- php 파일 업로드하기
- OS Command Injection
- Server Side Request Forgery
- 파일 업로드 취약점
- Cookie
- file upload
- tryhackme
- SQLi
- active reconnaissance
- access control
- overthewire
- FTZ
- sql injection
- php file upload
- THM
- php
- Leviathan
- active recon
- php login page
- Authentication
- privilege escalation
- php 로그인 페이지 만들기
- php To Do List
- Reconnaissance
- War Game
- Today
- Total
R's Hacking Daily Log
Leviathan1 -> Leviathan2 (version2) 본문
이번에는 ltrace가 아닌 r2 command로 leviathan1 level을 풀어보자.
ltrace command는 문제를 간단하게 한 번 풀어보자의 느낌이라면,
r2 command는 좀 더 문제를 분석적으로 접근해서 해결하는 방법이다.
Kali linux - Terminal ]
r2 command로 check 파일을 분석하고,
afl (= analysis function list )를 이용하여 함수를 쭉 띄운다.
중간에 main function이 있는 걸 확인할 수 있다.
main function의 내용을 좀 더 구체적으로 확인해 보자.
pdf @main
읽다 보면 call 뒤에 함수 이름이 나오는 걸 볼 수 있다.
call "function name"
해당 함수를 호출하는 의미이다.
그중에서 strcmp()은 두 문자열을 비교해 주는 함수이고,
여기서 s1과 s2를 비교하는 거 같다. (push로 두 값을 stack에 넣어주는 걸 볼 수 있음)
strcmp()에 breakpoint를 걸어주고 실행하여 0000값을 password로 넣어보았다.
다시 main function 내용을 확인해 보면 breakpoint가 잘 걸려있는 걸 볼 수 있다.
breakpoint가 걸리면 처음 code부터 실행하다가 point 부분에서 딱 멈추게 된다.
그렇다면, 이제 stack의 내용을 확인해서 어떤 값이 있는지 볼 수 있을 것!
stack 내용을 보면 s1, s2의 값을 볼 수 있는데, 각각 e4d4ffff, e8d4ffff이다.
사실 이 값은 s1,s2에 저장된 문자열이 아니라, 문자열이 저장된 위치를 알려주는 포인터 값이다.
따라서 이 값을 읽으면 저장된 s1, s2의 값을 알 수 있다.
이때, stack에 뜨는 대로 읽어서는 안 된다.
e4d4ffff | → | 0xffffd4e4 |
e8d4ffff | → | 0xffffd4e8 |
이제 해당 위치에 어느 값이 있는지 확인해보자.
-offset- 에서 0xffffd4e0으로 시작하는 열, D4~D7의 값을 보면, "3030 3000"
같은 열에서 D8~DB의 값을 보면, "7365 7800"이다.
이 값은 ascii code로, 오른쪽에 string으로 나오는 내용을 보면 바로 어떤 문자인지 확인할 수 있다.
303030 |
→ | 000 |
736578 | → | sex |
아마 check 파일은 입력받은 값 중에서 3자리만 다루는 듯하다.
첫 번째 값은 password로 입력한 0000 중 000이고,
두 번째 값은 입력해야 하는 password, "sex"라는 것을 알았다.
check를 실행해서 password를 입력해 보니, shell을 얻었다.
stack에서 확인한 내용이 맞았나 보다.
ltrace를 사용했을 때와 달리, 코드를 하나하나 확인하면서 접근하여 문제를 풀어보았다.
더 어려운 느낌이긴 하지만, 코드 내용을 이해하면서 해결하니 문제를 제대로 해결했다는 느낌이 든다!
'OverTheWire > Leviathan' 카테고리의 다른 글
Leviathan7 -> Leviathan8 (0) | 2023.01.07 |
---|---|
Leviathan6 -> Leviathan7 (0) | 2023.01.07 |
Leviathan5 -> Leviathan6 (0) | 2023.01.07 |
Leviathan4 -> Leviathan5 (0) | 2023.01.07 |
Leviathan3 -> Leviathan4 (0) | 2023.01.06 |