TIL: Packing, int(),Deleting Zone.Identifer files
pwn의 packing & unpacking
pwn의 p32()
, p64()
와 같은 함수의 정확한 format을 몰라 어떤 값을 입력으로 넣어줘야 하는지 자꾸 헤매서 한 번 정리하려고 한다.
- pwn의 packing 함수들은 int를 입력으로 받고, string을 return한다. (example:
p32(0x12345678) = \x78\x56\x34\x12
) - unpacking 함수들은 반대로 string을 입력으로 받고, int를 return한다. (example:
u32("\x78\x56\x34\x12") = 305419896 (= 0x12345678)
)
추가로 unpacking 함수들은 주로 leak한 주소를 unpack할 때 사용한다.
payload = p32(write_plt) + p32(pppr) + p32(1) + p32(read_got) + p32(4)
p.sendline(payload)
이와 같이 read_got
의 주소를 leak했을 때, packing된 주소가 출력되므로 이를 다음과 같이 unpack한다. leak_read_got = u32(p.recv(4))
또한 u64의 경우 64bit에서 사용하는데, 64bit에서 사용되는 주소는 6 byte만 사용되므로 leak을 하면 6 byte만 출력이 된다. 따라서 u64(p.recv(6).ljust(8, b'x00'))
과 같이 ljust
를 함께 사용한다.
https://docs.pwntools.com/en/stable/util/packing.html/
https://lclang.tistory.com/90
python의 int()
python의 int()를 이용해 프로그램이 출력한 address string을 int로 변환해줘야하는 경우가 있다.
int('a', 16) # => 10
과 같이 base를 입력해줄 수 있다.
WSL2에서 Zone.Identifier file들 지우기
Directory 내에 넘쳐나는 Zone.Identifier 파일들을 아래의 command로 한 번에 지울 수 있다.
find . -name "*:Zone.Identifier" -type f -delete
Leave a comment