iwebsec靶场(XSS)
一、HTTP协议
1.HTTP请求方式
(1)常用
请求方式 | 含义 |
---|---|
GET | 请求从服务器获取资源 |
HEAD | 类似于GET请求,只不过不会返回实体数据,只获取报头 |
POST | 向服务器提交数据 |
PUT | 替换服务器的内容 |
(2)不常用
请求方式 | 含义 |
---|---|
DELETE | 请求服务器删除指定的资源 |
TRACE | 对链路进行测试或诊断 |
OPTIONS | 列出可对资源实行的操作方法,Allow字段里返回 |
CONNECT | 要求服务器和另一个服务器建立连接,充当代理 |
2.请求响应格式
(1)请求格式
(2)响应格式
3.特点
- 请求应答模式
- 灵活可扩展
- 可靠传输
- 无状态
二、客户端的cookie
- key/value格式的文本
1.产生的流程
-
浏览器第一次访问:
服务器在响应中通过Set-Cookie头字段,下发Cookie
-
浏览器保存在本地:
- 硬盘:有过期时间的Cookie;位置C:\Users\15542\AppData\Local\Google
Chrome\User Data\Default\ - 内存:没有过期时间的临时Cookie,退出浏览器即失效
- 硬盘:有过期时间的Cookie;位置C:\Users\15542\AppData\Local\Google
-
浏览器随后访问:
在请求头中用Cookie字段发给服务器
2.属性
参数 | 描述 |
---|---|
name=value | 一个name/value,就是一个cookie。name/value这个是必须的,其他的都是可选的。如果name重复,只取第一个 |
expires | cookie的过期时间(格林尼治时间),超过这个时间,cookie就会失效。如果不设置,代表是临时的cookie,cookie在浏览器关闭的时候就失效了。 |
max-age | 与expires作用相同,用来告诉浏览器此cookie多久过期(单位是秒)。max-age的优先级高于expires |
domain | cookie对哪个域名生效。如果没有设置,就设置为服务器的域名。如果是临时的cookie,就不能设置domain |
path | 除了匹配域名,还可以具体匹配到路径,如果域名和路径都匹配,那这个cookie就会起作用;如果是/,这个服务器所有的路径都可以使用这个cookie。如果没有设置,那个路径响应,path就是哪个值 |
secure | 只有HTTPS连接,才发送cookie到服务器 |
httponly | 告知浏览器不允许通过脚本document.cookie去更改这个值,同样这个值在document.cookie中也不可见 |
3.特点
- 明文
- 可修改
- 大小受限
4.用途
- 保持会话
- 记住密码
- 跟踪用户行为
三、服务器的session
- 把身份信息存储在服务器
1.session校验
- 开启会话:
- session_start();cookie/login.php
- 把session的字段值保存到以sessionid命名的文件
- 保存字段:
- $_SESSION赋值;cookie/login.php
- 校验ID:
- 从服务端的cookie中取出字段;cookie/index.php
2.session销毁
- session_destory();cookie/logout.php
3.cookie和session对比
四、Javascript操作cookie
1.客户端读取cookie
- alert(document.cookie);
2.客户端设置cookie
- document.cookie=“username=wpc”;
3.修改
- 新建一个同名的cookie,覆盖原来的cookie(属性必需一致)
4.删除
- 把过期时间设置为比当前时间早的时间
- setcookie(“username”,‘’,time()-1);
五、脚本注入网页:XSS
1.定义
- 恶意攻击者利用web页面的漏洞,插入一些恶意代码,当用户访问页面的时候,代码就会执行,这个时候就达到了攻击的目的。
- 除了JavaScript之外,这个脚本也可以是Java、VBScript、ActiveX、Flash等等
2.分类
(1)反射性(包括DOM型)
- 流程
(2)存储型
- 流程
- 利用点:文章、留言板、公告板、评论……
六、靶场地址:http://iwebsec.com/
七、反射型XSS漏洞
-
弹出cookie
/xss/01.php?name=<script>alert(document.cookie)</script>
八、存储型XSS
-
查看源码
<?php require_once('../header.php'); require_once('../sqli/db.php'); ?> <html> <head> <title>存储型XSS漏洞</title> </head> <h2>存储型XSS漏洞</h2> <div class="alert alert-success"> <p>请输入你的留言信息</p> </div> <form method="get"> <input type="text" name="name"> <input type="submit" value="submit"> </form> <body> <?php if(isset($_GET['name'])){ $name=$_GET['name']; $sql="INSERT INTO xss set name='$name'"; $result=mysql_query($sql); $sql="SELECT * FROM xss"; $result=mysql_query($sql); } else{ exit(); } if ($result) { ?> <table class='table table-striped'> <tr><th>id</th><th>name</th></tr> <?php while ($row = mysql_fetch_assoc($result)) { echo "<tr>"; echo "<td>".$row['id']."</td>"; echo "<td>".$row['name']."</td>"; echo "</tr>"; } echo "</table>"; } else { print_r(mysql_error()); } ?>
-
输入框中输入payload,代码被执行,而且被存入到了数据库中
<script>alert(document.cookie)</script>
九、DOM型XSS
1.DOM
-
DOM型XSS就是基于DOM文档对象模型的
-
对于浏览器来说,DOM文档就是一份XML文档,当有了这个标准的技术之后,通过JavaScript就可以轻松的访问它们了。
-
结构
2.利用原理
- 客户端JavaScript可以访问浏览器的DOM文本对象模型是利用的前提,当确认客户端代码中有DOM型XSS漏洞时,并且能诱使一名用户访问自己构造的URL,就说明可以在受害者的客户端注入恶意脚本。利用步骤和反射型很类似,但是唯一的区别就是,构造的URL参数不用发送到服务器端,可以达到绕过WAF、躲避服务端的检测效果。
3.利用
-
<svg/onload=alert(document.cookie)>
十、XSS修复实例
1.查看源码
<?php require_once '../header.php'; ?>
<html>
<head>
<title>XSS修复示例</title>
</head>
<h2>XSS修复示例</h2>
<div class="alert alert-success">
<p>/04.php?name=iwebsec </p>
</div>
<body>
<table class='table table-striped'>
<?php
if(isset($_GET['name'])){
$name=$_GET['name'];
echo "<h2>"."Hello ".htmlspecialchars($name)."<h2>";
}else{
exit();
}
?>
</table>
2.htmlspecialchars函数
-
htmlspecialchars() 函数把一些预定义的字符转换为 HTML 实体
预定义的字符是: & (和号)成为 & " (双引号)成为 " ' (单引号)成为 ' < (小于)成为 < > (大于)成为 >
3.原理
- htmlspecialchars函数将<>等字符进行了实体转移,从而使构造的payload失效