0x00 動态加載子產品
在python腳本中,直接使用import os、import subprocess或from os import system這種方法很容易被規則檢測,即使使用其它執行指令的函數,依然容易被檢測。所幸python中可以動态加載子產品,而python的内置魔數方法_import_,可以直接根據字元串導入子產品
>>> a = __import__('o'+'s')
>>> a
<module 'os' from 'C:\Python27\lib\os.pyc'>
>>> a.system('whoami')
desktop-9*****8\h*********
// 從os.system()變成了a.system()
通過這種方法,對os字元進行加密或編碼,可以進一步避免被檢測,且這裡替換變量名,将"os"替換為"a"可以執行指令了,但system函數依然存在,還是有被檢測到的風險。
0x01 擷取子產品中的方法
hasattr(子產品, "成員"):在某個子產品中檢查是否含有某個成員
getattr(子產品, "成員"):在某個子產品中擷取成員
setattr(子產品, "成員", "value"):在某個某個子產品中設定成員
delattr(子產品, "成員"):删除某個子產品中的成員
到這裡,就可以用python完成類似于java的反射機制,可以使用getattr方法直接擷取某個子產品的方法或屬性,而使用setattr和delattr方法可以對子產品的成員進行修改和删除。
>>> a = __import__("o"+"s")
>>> a
<module 'os' from 'C:\Python27\lib\os.pyc'>
>>> s = getattr(a,'sys'+'tem')
>>> s
<built-in function system>
>>> s('who'+'ami')
desktop-9*****8\h*********
類似于java的的反射機制,使用字元串導入子產品和方法,可以逃逸靜态檢測
0x02 eval函數的調用示例
python中一些内置函數和方法歸納在_builtins__子產品中,使用dir(__builtins_)即可檢視,eval函數便在其中
>>> e = getattr(__builtins__, 'ev'+'al')
>>> e
<built-in function eval>
>>> e('__import__("os").system("whoami")')
desktop-9*****8\h*********
這種方法下,調用eval函數但不出現eval字眼,且對e函數内的字元串進行加密或編碼後,可以逃逸靜态檢測
0x03 tips
python中函數名和括号間可以添加一個或多個空格,這種情況下也許可以逃逸一些檢測方法
>>> e ('__import__("os").system ("whoami")')
desktop-9*****8\h*********
作者:bitterz
位址:https://www.cnblogs.com/bitterz/
本文版權歸作者和部落格園所有,歡迎轉載,轉載請标明出處。
如果您覺得本篇博文對您有所收獲,請點選右下角的 [推薦],謝謝!