置顶-项目发布-YML-AWD-FRAMEWORK

框架首发于 安恒网络空间安全讲武堂 :https://mp.weixin.qq.com/s/r5gc0nfids896thBIW7XFg

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

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

开发思路:

框架整体结构

|--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模块类型提供了一个创建命令行解析器的框架,在某部分函数出错时,不至于导致框架崩溃

使用方法和基本流程:

命令集合:

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地址和端口号,分割符为空格,两者皆支持范围添加,例如下面的例子

addip 10.10.10.10 80
addip 10.10.10.10-19 80
addip 10.10.10.10 80-90

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

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

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

addshell /a.php c post
addshell /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

坚持原创技术分享,您的支持将鼓励我继续创作!