黑客技能:xss 攻击入门
xss 表示 Cross Site Scripting(跨站脚本攻击),它与 SQL 注入攻击类似,SQL 注入攻击中以 SQL 语句作为用户输入,从而达到查询/修改/删除数据的目的,而在 xss 攻击中,通过插入恶意脚本,实现对用户游览器的控制。
xss 攻击可以分成两种类型:
非持久型攻击
持久型攻击
下面我们通过具体例子,了解两种类型 xss 攻击。
1.非持久型 xss 攻击
顾名思义,非持久型 xss 攻击是一次性的,仅对当次的页面访问产生影响。非持久型 xss 攻击要求用户访问一个被攻击者篡改后的链接,用户访问该链接时,被植入的攻击脚本被用户游览器执行,从而达到攻击目的。
假设有以下 index.php 页面:
该页面显示两行信息:
从 URI 获取 'name' 参数,并在页面显示
显示跳转到一条 URL 的链接
① 200 多本网络安全系列电子书② 网络安全标准题库资料③ 项目源码④ 网络安全基础入门、Linux、web 安全、攻防方面的视频⑤ 网络安全学习路线图【戳此白嫖】
这时,当攻击者给出以下 URL 链接:
当用户点击该链接时,将产生以下 html 代码,带'attacked'的告警提示框弹出:
除了插入 alert 代码,攻击者还可以通过以下 URL 实现修改链接的目的:
当用户点击以上攻击者提供的 URL 时,index.php 页面被植入脚本,页面源码如下:
用户再点击 "Click to Download" 时,将跳转至攻击者提供的链接。
对于用于攻击的 URL,攻击者一般不会直接使用以上可读形式,而是将其转换成 ASCII 码,以下 URL 同样用于实现链接地址变更:
2.持久型 xss 攻击
持久型 xss 攻击会把攻击者的数据存储在服务器端,攻击行为将伴随着攻击数据一直存在。下面来看一个利用持久型 xss 攻击获取 session id 的实例。
session 背景知识
我们知道 HTTP 是一个无状态维持的协议,所有请求/应答都是独立的,其间不保存状态信息。但有些场景下我们需要维护状态信息,例如用户登录完 web 应用后,再一定时间内,用户再进行登录,应不需要再输入用户名/密码进行鉴权。
这时我们用 cookie 和 session 解决状态维护问题,当用户首次登入时,服务器为该用户创建一个 session ID,同时向游览器传送一个 cookie,cookie 保存会话连接中用到的数据,session ID 作为会话标识,游览器后续的请求均基于该 session ID。
攻击者可以提供一个攻击链接,当用户点击该链接时,向攻击者自己的服务器发送一条保存有用户 session ID 的信息,这样就可以窃取到用户的 session ID,得到用户的执行权限。
现有以下 login.php,其根据 user_name 在数据中查找相应的 pass_word,然后将用户提供的 password 与查数据库所得的 pass_word 进行比较,如果验证成功则创建对应于 user_name 的 session。
View Code
另有以下 home.php,其根据登入的用户是 admin 还是其他用户,显示不同内容,对于 admin,其列出所有用户,对于其他用户,提供包含输入框的 form,可在数据库中插入新的用户名信息。
View Code
注意以上场景中,对 admin 和其他用户进行了不同的权限设置,admin 可以看到所有用户列表,下面我们来看如何获取 admin 的 session ID,从而使得其他用户也能获得 admin 的权限。
首先,攻击者以一个普通用户登录进来,然后在输入框中提交以下数据:
攻击者提交了条带<a>标签的数据,该条数据将保存在数据库中,而当 admin 用户登入时,包含 "bangerlee" 的用户列表将显示,如果 admin 用户点击 "bangerlee" 时,在 "attacker-site.com" 所在的服务器上,攻击者就可以窃取到 admin 的 session-id:
有了该 session-id,攻击者在会话有效期内即可获得 admin 用户的权限,并且由于攻击数据已添加入数据库,只要攻击数据未被删除,那么攻击还有可能生效,是持久性的。
当然,不是只有持久型 xss 攻击才能窃取 session ID、用户的 cookie 信息,用非持久型 xss 也可以,只要引导用户点击某链接,将 document.cookie 信息传到指定服务器即可,以上仅作为说明持久型 xss 攻击的举例。
评论