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 stringint로 변환해줘야하는 경우가 있다.

int('a', 16) # => 10 과 같이 base를 입력해줄 수 있다.

WSL2에서 Zone.Identifier file들 지우기

Directory 내에 넘쳐나는 Zone.Identifier 파일들을 아래의 command로 한 번에 지울 수 있다.

find . -name "*:Zone.Identifier" -type f -delete

Categories: ,

Updated:

Leave a comment