완료됨
printf, read?
문제는 해결했습니다. 하지만 got overwrite을 해줄때 처음에 printf나 read의 got를 overwrite해주려고 해보았는데 안되고 다른 함수의 got를 overwrite해서서 해결하게 되었습니다. 근데 printf,read의 got를 overwrite했을 땐 왜 안되는지 잘 모르겠는데 그 이유에 대해서 고수분들께서 도와주셨으면 합니다. ㅎㅎㅎ
#pwnable
작성자 정보
답변
3
이미 오랜시간이 지나서 의미있을지 모르겠지만..
Disassembly of section .plt.sec:
00000000004010d0 <free@plt>:
4010d0: f3 0f 1e fa endbr64
4010d4: f2 ff 25 3d 2f 00 00 bnd jmp QWORD PTR [rip+0x2f3d] # 404018 <free@GLIBC_2.2.5>
4010db: 0f 1f 44 00 00 nop DWORD PTR [rax+rax*1+0x0]
00000000004010e0 <puts@plt>:
4010e0: f3 0f 1e fa endbr64
4010e4: f2 ff 25 35 2f 00 00 bnd jmp QWORD PTR [rip+0x2f35] # 404020 <puts@GLIBC_2.2.5>
4010eb: 0f 1f 44 00 00 nop DWORD PTR [rax+rax*1+0x0]
00000000004010f0 <__stack_chk_fail@plt>:
4010f0: f3 0f 1e fa endbr64
4010f4: f2 ff 25 2d 2f 00 00 bnd jmp QWORD PTR [rip+0x2f2d] # 404028 <__stack_chk_fail@GLIBC_2.4>
4010fb: 0f 1f 44 00 00 nop DWORD PTR [rax+rax*1+0x0]
0000000000401100 <system@plt>:
401100: f3 0f 1e fa endbr64
401104: f2 ff 25 25 2f 00 00 bnd jmp QWORD PTR [rip+0x2f25] # 404030 <system@GLIBC_2.2.5>
40110b: 0f 1f 44 00 00 nop DWORD PTR [rax+rax*1+0x0]
0000000000401110 <printf@plt>:
401110: f3 0f 1e fa endbr64
401114: f2 ff 25 1d 2f 00 00 bnd jmp QWORD PTR [rip+0x2f1d] # 404038 <printf@GLIBC_2.2.5>
40111b: 0f 1f 44 00 00 nop DWORD PTR [rax+rax*1+0x0]
0000000000401120 <read@plt>:
401120: f3 0f 1e fa endbr64
401124: f2 ff 25 15 2f 00 00 bnd jmp QWORD PTR [rip+0x2f15] # 404040 <read@GLIBC_2.2.5>
40112b: 0f 1f 44 00 00 nop DWORD PTR [rax+rax*1+0x0]
0000000000401130 <malloc@plt>:
401130: f3 0f 1e fa endbr64
401134: f2 ff 25 0d 2f 00 00 bnd jmp QWORD PTR [rip+0x2f0d] # 404048 <malloc@GLIBC_2.2.5>
40113b: 0f 1f 44 00 00 nop DWORD PTR [rax+rax*1+0x0]
0000000000401140 <setvbuf@plt>:
401140: f3 0f 1e fa endbr64
401144: f2 ff 25 05 2f 00 00 bnd jmp QWORD PTR [rip+0x2f05] # 404050 <setvbuf@GLIBC_2.2.5>
40114b: 0f 1f 44 00 00 nop DWORD PTR [rax+rax*1+0x0]
0000000000401150 <__isoc99_scanf@plt>:
401150: f3 0f 1e fa endbr64
401154: f2 ff 25 fd 2e 00 00 bnd jmp QWORD PTR [rip+0x2efd] # 404058 <__isoc99_scanf@GLIBC_2.7>
40115b: 0f 1f 44 00 00 nop DWORD PTR [rax+rax*1+0x0]
0000000000401160 <exit@plt>:
401160: f3 0f 1e fa endbr64
401164: f2 ff 25 f5 2e 00 00 bnd jmp QWORD PTR [rip+0x2ef5] # 404060 <exit@GLIBC_2.2.5>
40116b: 0f 1f 44 00 00 nop DWORD PTR [rax+rax*1+0x0]
제생각에는 read 함수 호출중인 상태에서 read함수보다 위에있는 함수(예를들어 printf)들의 got값을 수정하면 read함수의 got값이 수정되면서 crash가 발생하는것 같습니다.
제 코드에서는 printf함수에 값을 덮어씌우면 crash가 발생합니다.