前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >AWD攻防框架-YML-AWD-FRAMEWORK

AWD攻防框架-YML-AWD-FRAMEWORK

作者头像
安恒网络空间安全讲武堂
发布2019-09-29 13:49:34
2.4K0
发布2019-09-29 13:49:34
举报

花了大半个寒假的时间,终于完成了一直想写的awd线下半自动框架,编写过程中学到了很多,也感谢一些师傅的指点,文末会分享部分原创核心函数

框架已在我自有服务器搭建的awd环境下经过数次调试,修补了绝大部分致命bug

开发思路:

框架整体结构

代码语言:javascript
复制
|--main.py(主函数及cmd交互模块)||--code--addshell.py(自写第三方库文件)||--data(存放用于加载数据的TXT文件)||--html(用于存放站点源码)

开发思路和部分模块工作原理

ip和shell存储模块

为了方便后续维护和新功能的添加,将以TXT文件读写的方式存储和读取ip和shell信息,方便在程序退出第二次使用时,快速加载已储存的ip和shell信息

ip录入模块

由于线下awd赛事靶机ip的不同(正式比赛中可能是范围类ip,小型比赛中可能是范围类端口),框架同时支持范围ip和端口的添加,两类例子如下

ip范围:

端口范围:

不死马上传模块

不死马是awd线下赛中一大杀器,其删不掉,改不了的特性往往能在线下赛中打乱对手的比赛心态,为了提高框架在各类环境成功生成不死马的几率,作者使用了直接在靶机上命令执行的方式(网上流行的不死马PHP启动文件的方式其实对于框架编写来说更加简单,但是其触发过程中可能遭遇目标靶机waf的拦截),在成功添加了基础shell后,可以直接使用不死马模块进行不死马上传,为适应各类基础shell,上传支持post和get两种方式。

核心代码如图

流量混淆模块

在获取站点源码结构时本来想利用自己的靶机做目录遍历然后返回路径列表,后来为了提升效率选择了将源码放在本地进行遍历,在使用模块前需要在库中attack_all()函数中修改框架所在路径,如图

为了模拟真实流量,在每段正常发送的URL后都会添加?shell=(随机字符串),已达到隐藏获取flag真实流量的目的,相应代码如图

获取flag及提交模块

获取flag前需要再次添加shell,可以是生成的不死马shell,设置再次添加是为了当比赛中直接有可获取flag的后门时可以直接使用收发flag模块

同时为了避免框架出现不可预期错误,程序会将最新flag保存在data目录下,在flag获取模块中,自动的过滤了重复的flag,减轻了框架在本地环境下的运行负担

交互体验

为了框架的运行稳定性,使用了cmd模块,cmd模块类型提供了一个创建命令行解析器的框架,在某部分函数出错时,不至于导致框架崩溃

使用方法和基本流程:

命令集合:

代码语言:javascript
复制
    Command          Tips    -------       -----------    addip         添加shell ip和端口    addshell      添加shell路径    saveshell     保存shell到文件    showip        查看ip列表    removeip      移除某个ip    clearip       清除ip列表    saveip        将ip保存到文件    updead        上传bash不死马文件(.crons.php)    loadip        加载储存的IP列表    loadwebshell  加载储存的shell列表    liuliang      进行流量混淆(请先添加ip或loadip)    addflagshell  添加获取flag的shell    saveflagshell 将获取flag的shell储存到文件    loadflagshell 加载储存的flagshell列表    getflag       获取flag(demo: getflag-cat /flag  注意分隔符是"-")    exit          退出

添加ip时需要添加ip地址和端口号,分割符为空格,两者皆支持范围添加,例如下面的例子

代码语言:javascript
复制
addip 10.10.10.10 80addip 10.10.10.10-19 80addip 10.10.10.10 80-90

removeip 可以删除掉自己机器的ip地址

确认ip地址无误后,可以通过saveip将其保存下来

addshell命令可以添加对方机器上的预留shell,支持get和post格式,已下是输入例子

代码语言:javascript
复制
addshell /a.php c postaddshell /a.php c get

其中c为a.php的密码

添加完成后通过saveshell保存下来

如果希望维持权限,可以通过Updead上传不死马文件

flagshell是特定的shell文件,因为用Python去实现菜刀的功能很麻烦,所以获取flag 暂时通过命令执行的方式进行获取,添加flagshell的语法和addshell一样

getflag需要附带获取flag的命令,添加后会提示输入提交flag的地址,这时需要用yml-flag来代替flag当做命令输入,如下图的演示

这样就可以进行自动获取和提交了

关于流量混淆模块:

本人项目是在E盘写的,所以要正常使用该模块需要放在E盘下,并将站点源码放入html目录

进行流量混淆时,需要先加载ip列表(loadip)而后使用命令liuliang进行流量混淆

为了程序更好的兼容,将程序打包成了exe可执行程序,无需安装Python环境即可使用

同时也将源码全部打包,欢迎各位大佬完善和指点

程序源码在github:https://github.com/yemoli/yml-AWD-FRAMEWORK

已打包为exe格式的文件在百度网盘:https://pan.baidu.com/s/17UWvbfer8vlCcKw3NaJ2Eg

提取码1q3j

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-02-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 恒星EDU 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 框架整体结构
  • 开发思路和部分模块工作原理
    • ip和shell存储模块
      • ip录入模块
        • 不死马上传模块
          • 流量混淆模块
            • 获取flag及提交模块
            • 交互体验
            • 使用方法和基本流程:
            相关产品与服务
            命令行工具
            腾讯云命令行工具 TCCLI 是管理腾讯云资源的统一工具。使用腾讯云命令行工具,您可以快速调用腾讯云 API 来管理您的腾讯云资源。此外,您还可以基于腾讯云的命令行工具来做自动化和脚本处理,以更多样的方式进行组合和重用。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档