촉촉한초코칩
[Dreamhack] Broken Password 본문
분석
문제 파일은 elf 파일이 주어진다.
gdb로 해당 파일을 열어보았다.
strncmp에서 두 문자열을 비교하고 다르면 193으로 이동한다. 맞으면 아래 명령어를 실행하여 system을 통해 flag가 출력되는 것 같다.
strncmp가 실행되기 전에 break를 걸어서 비교하는 문자열을 확인해야 할 것 같다.
이 방법은 아닌 것 같다. (매번 값이 달라짐)
strncmp 취약점에 대해 검색해보았다.
str1, str2가 있다고 가정했을 때
- str1 < str2 → 음수
- str1 == str2 → 0
- str1 > str2 → 양수
이런 값이 나온다.
그리고 strncmp가 나오기 전에 8을 edx에 넣는 것으로 보아, 글자수를 비교하는 값은 8개인 것 같다.
그리고 rsi에는 내가 입력한 값, rax에는 비밀번호가 들어있는 듯하다.
배열이 들어가면 NULL과 0을 비교하게 되고, true를 반환한다고 해서 아무값도 입력하지 않았는데 FL가 나왔다.
그 다음에는 공백을 입력했는데 {W 문자가 나왔다.
이렇게 하나씩 해보앗다.. (이방법도 아닌것같다.. 우연히 나온듯ㅎ)
또 검색.. https://hxxxxng.tistory.com/52
우선 strncmp의 취약점은 \x00이 올 때까지만 비교하고, null이 오면 비교를 끝내는 것이다.
일단 password는 매번 랜덤으로 생성되는데, 만약 password의 앞 글자가 \x00로 시작할 때 입력값으로 null을 준다면 비교를 끝내고 맞다고 판단한다고 한다,,
그래서 코드를 짜서 맞을 때까지 돌리는 건데.. 코드는 참고한 위 링크에 있다.
(대충 추측한 건 맞은 것 같고...왜여기까지 생각을 못했을까...?......)
참 어렵다..
+ 지피티한테 물어본 거
'Study > MISC' 카테고리의 다른 글
[Dreamhack] set-int (0) | 2025.01.14 |
---|---|
[CodeEngn] Malware L06 (0) | 2024.12.30 |
[Dreamhack] Just read flag (0) | 2024.11.13 |
[Dreamhack] 산타 할아버지도 힘들어요 (0) | 2024.10.29 |
[Dreamhack] whatsdifferent (1) | 2024.10.02 |