[root-me.org] ELF x86 - Format string bug basic 1 Write-Up
두비니
·2019. 11. 2. 18:40
::Login::
Host | challenge02.root-me.org |
Protocol | SSH |
Port | 2222 |
SSH access | ssh -p 2222 app-systeme-ch5@challenge02.root-me.org WebSSH |
Username | app-systeme-ch5 |
Password | app-systeme-ch5 |
::Code::
#include <stdio.h>
#include <unistd.h>
int main(int argc, char *argv[]){
FILE *secret = fopen("/challenge/app-systeme/ch5/.passwd", "rt");
char buffer[32];
fgets(buffer, sizeof(buffer), secret);
printf(argv[1]);
fclose(secret);
return 0;
}
보면 buffer 안에 password가 들어가있고, buffer를 입력받아 argv[1]을 출력시키네요. 그러면 argv1에 %x를넣어서 한번 확인해봅시다. %8x를 입력하면 stack의 맨 위부터 차례로 출력하게 된다.
다음이 출력값이다.
일단 내가 추측한 stack의 구조이다.
| buffer | >> "AAAA"
| sizeof(buffer) | >> "20"
| secret | >> "804b160"
| | >> "9bffffcd4b7e1c4a9bffffba4b7fc4000b7fc4000...."
사실 저 secret 이후의 정보는 잘 모르겠다. 근데 저 값들중에 하나는 *secret의 정보가 있겠거니하고 그 뒤에값들을 아스키코드로 바꾸어보았다.
위에 값과 다른이유는 어떤이유에서인지는 모르겠지만 저걸 떨어져있는상태로 출력시키니까 답이 안나와서 %8x대신에 %08x로 출력하여 다같이 변환해벼렸다. 결론적으로 변환하니 보이는 한 string이 있는데,
9apD()6dmapE
요놈이다. 이렇게 입력하면 안되는게, 리틀엔디안 방식에 의해 4글자씩 잘라 반대로 적어주어야 한다.(사실 왜 네글자인지는 모르겠다. 두글자씩 되돌려야하는거 아닌가?)
그래서 네글자씩 반대로 돌리면
Dpa9d6)(Epamd
끝! next
'War Games > root-me.org' 카테고리의 다른 글
[root-me.org] ELF x86 - Race condition Write-Up (0) | 2019.11.05 |
---|---|
[root-me.org] ELF x86 - Format string bug basic 2 Write-Up (0) | 2019.11.05 |
[root-me.org] ELF x64 - Stack buffer overflow - basic Write-Up (0) | 2019.11.03 |
[root-me.org] ELF x86 - Stack buffer overflow basic 2 Write-Up (0) | 2019.11.02 |
[root-me.org] ELF x86 - Stack buffer overflow basic 1 write-up (0) | 2019.11.01 |