AWD攻防框架-YML-AWD-FRAMEWORK
- 2019 年 10 月 8 日
- 筆記
花了大半個寒假的時間,終於完成了一直想寫的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 80addip 10.10.10.10-19 80addip 10.10.10.10 80-90
removeip 可以刪除掉自己機器的ip地址
確認ip地址無誤後,可以通過saveip將其保存下來
addshell命令可以添加對方機器上的預留shell,支援get和post格式,已下是輸入例子
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