Upload files to "/"
This commit is contained in:
146
verify_exp.py
Normal file
146
verify_exp.py
Normal file
@@ -0,0 +1,146 @@
|
|||||||
|
|
||||||
|
import os
|
||||||
|
import shutil
|
||||||
|
import sys
|
||||||
|
import subprocess
|
||||||
|
import re
|
||||||
|
import time
|
||||||
|
RED = '\033[91m'
|
||||||
|
GREEN = '\033[92m'
|
||||||
|
YELLOW = '\033[93m'
|
||||||
|
BLUE = '\033[94m'
|
||||||
|
RESET = '\033[0m'
|
||||||
|
|
||||||
|
|
||||||
|
INJECT_SCRIPT_NAME="inject_tmp.py"
|
||||||
|
WIN_FILE_NAME="win"
|
||||||
|
VERIFY_TIMEOUT=0.5
|
||||||
|
|
||||||
|
def init_exp_all(src_path,dest_path):
|
||||||
|
print(f"Try to copy exp ({src_path} -> {dest_path})")
|
||||||
|
try:
|
||||||
|
for f in os.listdir(src_path):
|
||||||
|
if(f[-3:]==".py"):
|
||||||
|
src_file_path=os.path.join(src_path,f)
|
||||||
|
dest_file_path=os.path.join(dest_path,f)
|
||||||
|
shutil.copy(src_file_path,dest_file_path)
|
||||||
|
print(f"{GREEN}Copy successful ({src_file_path} -> {dest_file_path}){RESET}")
|
||||||
|
except Exception as msg:
|
||||||
|
print(f"{RED}{msg}{RESET}")
|
||||||
|
print(f"{RED}Exp copy failed{RESET}")
|
||||||
|
return -1
|
||||||
|
|
||||||
|
def init_exp(elf_path,dest_path):
|
||||||
|
elf_path+=".py"
|
||||||
|
dest_path=os.path.join(dest_path,'exp.py')
|
||||||
|
print(f"Try to copy exp ({elf_path} -> {dest_path})")
|
||||||
|
try:
|
||||||
|
shutil.copy(elf_path,dest_path)
|
||||||
|
print(f"{GREEN}Copy successful ({elf_path} -> {dest_path}){RESET}")
|
||||||
|
except Exception as msg:
|
||||||
|
print(f"{RED}{msg}{RESET}")
|
||||||
|
print(f"{RED}Exp copy failed{RESET}")
|
||||||
|
return -1
|
||||||
|
|
||||||
|
def verify_exp(elf_path,exp_name=""):
|
||||||
|
tmp_py=""
|
||||||
|
try:
|
||||||
|
dir_path=os.path.dirname(elf_path)
|
||||||
|
|
||||||
|
#确定exp的脚本
|
||||||
|
if(exp_name == ""):
|
||||||
|
script_exp_name=[]
|
||||||
|
for f in os.listdir(dir_path):
|
||||||
|
if(f[-3:]==".py"):script_exp_name.append(f)
|
||||||
|
script_counts=len(script_exp_name)
|
||||||
|
assert(script_counts),"There is no python script under the directory"
|
||||||
|
if(script_counts==1):
|
||||||
|
exp_name=script_exp_name[0]
|
||||||
|
else:
|
||||||
|
print(f"{YELLOW}There are multiple scripts, please select one{RESET}")
|
||||||
|
for i in range(script_counts):
|
||||||
|
print(f"{i} -> {script_exp_name[i]}")
|
||||||
|
idx=int(input("idx:"))
|
||||||
|
assert(0<=idx<script_counts),"Index wrong"
|
||||||
|
exp_name=script_exp_name[idx]
|
||||||
|
|
||||||
|
print(f"{BLUE}[*]Found {exp_name} -> Attack ...{RESET}")
|
||||||
|
|
||||||
|
exp_path=os.path.join(dir_path,exp_name)
|
||||||
|
#注入判断语句
|
||||||
|
with open(exp_path,"r") as f:
|
||||||
|
script_content=f.read()
|
||||||
|
#匹配连接的变量名称
|
||||||
|
pattern = r"^(?!#)\s*(\w+).interactive"
|
||||||
|
match=re.search(pattern ,script_content,re.MULTILINE)
|
||||||
|
assert(match),f"Failed to match the script RE"
|
||||||
|
|
||||||
|
# print(script_content)
|
||||||
|
|
||||||
|
PID_virtualname=match.group(1)
|
||||||
|
#注入利用win文件判断,先清除win文件
|
||||||
|
if( os.path.exists(WIN_FILE_NAME) and os.path.isfile(WIN_FILE_NAME) ):os.remove(WIN_FILE_NAME)
|
||||||
|
|
||||||
|
script_split=script_content.split("\n")
|
||||||
|
inject_payload=f"""\n
|
||||||
|
\t{PID_virtualname}.sendline(b"clear;echo 'Successful Attack {elf_path}' >> {WIN_FILE_NAME};")
|
||||||
|
\tstrs={PID_virtualname}.recvuntil(b'mowen',timeout={VERIFY_TIMEOUT})
|
||||||
|
\tif(strs==b''):{PID_virtualname}.close()
|
||||||
|
except:
|
||||||
|
\tpass
|
||||||
|
finally:
|
||||||
|
\t{PID_virtualname}.close()
|
||||||
|
"""
|
||||||
|
tmp_py=os.path.join(dir_path,INJECT_SCRIPT_NAME)
|
||||||
|
with open(tmp_py,"w+") as f:
|
||||||
|
f.write("try: \n")
|
||||||
|
for s in script_split:
|
||||||
|
if("interactive" in s):
|
||||||
|
f.write(inject_payload+"\n")
|
||||||
|
continue
|
||||||
|
f.write("\t"+s+"\n")
|
||||||
|
|
||||||
|
print(f"Inject payload successful! Start program...")
|
||||||
|
#启动elf
|
||||||
|
cmd=[elf_path]
|
||||||
|
elf_process=subprocess.Popen(cmd,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
|
||||||
|
|
||||||
|
#开始执行exp
|
||||||
|
print(f"Run payload...")
|
||||||
|
|
||||||
|
cmd=f"cd {dir_path} ;python3 {INJECT_SCRIPT_NAME};"
|
||||||
|
old_time=time.time()
|
||||||
|
subprocess.run(cmd,check=True,shell=True,capture_output=True)
|
||||||
|
run_time=time.time()-old_time
|
||||||
|
print(f"run end process({run_time:.3f})")
|
||||||
|
|
||||||
|
assert(os.path.exists(WIN_FILE_NAME)),f"Failed to attack"
|
||||||
|
|
||||||
|
with open(WIN_FILE_NAME,"r") as f:
|
||||||
|
print(f"{GREEN}{f.read()}{RESET}")
|
||||||
|
|
||||||
|
#关闭进程
|
||||||
|
elf_process.kill()
|
||||||
|
elf_process.wait()
|
||||||
|
except AssertionError as msg:
|
||||||
|
print(f"{RED}{msg}{RESET}")
|
||||||
|
return -1
|
||||||
|
except Exception as msg:
|
||||||
|
print(f"{RED}{msg}{RESET}")
|
||||||
|
return -1
|
||||||
|
finally:
|
||||||
|
# with open(tmp_py,"r") as f:
|
||||||
|
# print(f.read())
|
||||||
|
#删除文件
|
||||||
|
if(os.path.exists(WIN_FILE_NAME)):os.remove(WIN_FILE_NAME)
|
||||||
|
if(os.path.exists(tmp_py)):os.remove(tmp_py)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
elf_path=sys.argv[1]
|
||||||
|
init_exp(os.path.dirname(elf_path),"./")
|
||||||
|
verify_exp(elf_path)
|
||||||
Reference in New Issue
Block a user