跨站脚本攻击XSS
1.session和cookie
①cookie:客户端访问服务器时,服务器发送给客户端cookie,用来记录客户端用户的信息(比如账户密码等),客户端保存cookie值,以后客户端每次访问服务器时都会携带这份cookie,服务器根据cookie来识别用户。
②session:客户端访问服务器时,服务器端创建一个session保存在服务器端,然后给服务器发送一个特殊的cookie(sessionid),客户端器下次访问服务器时,服务器根据客户端cookie中的sessionid来区分不同的用户。
区别:①cookie存在于客户端,可以被伪造;session存在于服务器,不能被伪造
使用:可以将登陆等重要信息放在session中,将其它不重要信息放在cookie中。
1.1JS中操作cookie
①f12打开页面>>控制台>>document.cookie(或者alert(document.cookie)弹窗)
②设置cookie:document.cookie="username=xxx"
1.2 token和session和cookie比较
①token构成:1uid+2当前时间戳+3签名字符串(签名密钥在服务器端)+4其它参数
②token和cookie的比较:token里没有存放用户信息,token无状态,可以跨域
token和session的比较:服务器端不需要存储token,不占内存
cookie中可以存储token,类似于cookie中存储session
一文彻底弄懂cookie、session、token (baidu.com)
2.get和post
①get:参数显示在地址栏;表单内的各个字段和数据直接加在表单的ACTION属性所指的URL中,在URL中可以被看到;传送数据较小;安全性低;get请求的数据不会修改服务器的状态,一般是读取静态文件(比如查看图片,html文件)
②post:参数不显示在地址栏;将表单内的各个字段和内容放在HTML HEADER内传送到表单的ACTION属性所指的URL中;传送数据较大;安全性高;post请求一般会改变服务器状态,比如增加一条数据,更改数据库记录
3.HTTP请求过程
①浏览器根据域名解析ip地址:>>1首先搜索浏览器自身的DNS缓存;>>2如果没有找到就搜索操作系统自身的DNS缓存(windows:windows\system32\drivers\etc\hosts);>>3如果没有找到就查找本地域名服务器的缓存;>>4如果本地域名服务器没有找到就向根域名DNS服务器发送请求,根域名服务器返回一个负责该域名主服务器的ip;然后本地服务器拿到ip后进行查询,主服务器如果有则查询完毕,如果没有再查二级域,三级域,直到查到。
注意:主机请求本地域名服务器为递归查询(替主机查找),其余的查询为迭代查询(要么告诉结果,要么告诉下一步去哪里查询)
②然后HTTP客户端在80端口与WEB服务器进行TCP三次握手连接。
③客户端与服务器建立好连接以后,客户端向服务器发送一个HTTP报文请求。
④服务器收到报文后,进行HTTP解析,然后发送HTTP响应报文。
⑤浏览器获取到了域名的对应消息后,TCP四次挥手断开客户端与服务器的连接。
⑥服务器返回给客户端有HTML代码,CSS、JS代码。浏览器解析这些代码,将其呈现给用户。
3.1 HTTP请求报文格式
①第一行(起始行):请求方法,URL,协议版本;
②第二行(请求头部):首部HEADER
③空行
④主体内容(body)
3.2HTTP响应报文格式
①状态行:协议版本,状态码(1xx请求正在处理 2xx请求成功 3xx重定向 4xx客户端错误 5xx服务器端错误),状态描述
②响应头部
③空行
④响应body
3.3HTTP特点
①可靠传输(工作在tcp三次握手四次挥手之上)
②请求应答模式
③灵活可扩展
④无状态(每次请求都是独立的,因为每次请求完都要四次挥手)
4.XSS攻击
4.1定义
黑客向HTML内注入恶意的代码,当用户在访问网页时,控制用户(不用用户密码,就登陆了账号)
4.2分类
①反射型XSS:黑客向HTML页面插入恶意代码,然后将链接发给用户,用户点击链接,浏览器请求服务器,服务端响应这样的资源,变成一个网页发给客户端,客户端点击,执行了恶意的代码,受到攻击。
我请求,你响应,我受到攻击。
②持久型XSS:黑客通过表单提交恶意代码,保存至数据库中;用户正常查询;从数据库中查询到恶意代码,返回给用户浏览器;浏览器解析恶意代码,执行
③DOM型XSS:本质是反射型XSS,通过url传参实现攻击,但是它不经过服务器,只在前端完成。
4.3攻击结果
①获取cookie②重定向,网站钓鱼③注入客户端脚本代码
4.4防御
①cookie头加上httponly
②针对输入:利用正则表达式匹配恶意脚本 (把识别出来的用'' ''或者_替换)
>>>识别恶意脚本,定义恶意脚本的模式
>>>对脚本的各种变形也要识别:比如大小写,复写
③针对输出:对前端的js代码,html代码进行转义处理,比如< >;";';%等,否则它是一个脚本文件,出来后就还是一个脚本文件
④白名单规则过滤
(79条消息) XSS攻击_Adrenaline630的博客-CSDN博客_xss攻击
跨站请求伪造CSRF
与XSS的区别:①XSS需要在一个网站上注入HTML代码,然后获取用户的cookie,然后实现一些攻击。②CSRF不用获取用户的cooike,就可以冒充用户的身份,进行一些操作。
1.CSRF定义
服务器对用户的审核不严格,简单地说就是黑客伪造用户的身份做一些违法的事情。
2.CSRF攻击过程
用户访问一个网站A,网站A服务器会给用户浏览器发送cookie;用户没退出这个网站,在同一浏览器中,访问了恶意的网站B;网站B接受了请求后,返回给用户一些恶意的代码,并要求它访问网站A(有可能用户访问了网站B的什么图片);浏览器根据网站B返回的代码,在用户不知情的情况下访问了网站A(由于还是用户的cookie所以可以访问),网站B的恶意代码被执行。
3.典型CSRF攻击
①WeiboCSRF漏洞:你登陆了微博,没有退出登录,然后你点了一个链接,你可能就会自动关注一些账号,或者自动发一些微博。
②GmailCSRF漏洞:你登陆了邮箱,点了一个链接,然后有可能自动对Gmai服务器发送一个请求,比如转发规则,转到别的邮箱里,有可能你的一些验证码就转走了。
4.CSRF漏洞危害
①修改账户信息
②上传木马文件
③传播蠕虫病毒(比如微博,发了条链接的微博,别人打开,也中了病毒)
④和别的攻击手段结合,比如XSS
5.CSRF与XSS的区别
①CSRF借用用户的cookie,拿不到明文cookie;XSS直接拿走明文cookie。
②CSRF在第三方网站发起被攻击网站的请求(跨域),不是直接在浏览器上访问目标网站;XSS是直接把脚本代码注入到被攻击网站里
③XSS有两个角色,浏览器+被攻击网站 ,XSS攻击是从被攻击的网站发起的,比如说我要盗取你xx的cookie,我就将代码注入到xx网站;CSRF多了个第三方网站,攻击是由第三方网站发起的。
6.CSRF payload
①利用图片的img src属性
②构建一个超链接,用户点击,发起get请求,遭受攻击
③ 构建一个自动提交的隐藏表单,用户点击,发起get请求
7.CSRF的防御
7.1同源策略
同源:URL由协议,域名,端口,路径组成;如果两个URL的协议,域名,端口相同,则认为它们是同源的。
同源策略:浏览器的一个安全策略,限制了不同域的数据交互;如果非同源,浏览器在请求数据时,控制台就会报一个错误,提示拒绝访问,cookie无法获取,dom无法获得,ajax请求无法发送。
7.2防御
①referer:区分请求是从自己的前端页面发起的还是从第三方网站跳转的 //绕过:在http请求里加一个referer字段
②对cookie进行加密,客户端计算cookie的哈希,将cookie和哈希值一起发给服务端,服务端收到后进行计算比较。(因为第三方网站是拿不到用户的cookie的) //绕过:和XSS结合,XSS拿到cookie
③token:用户登陆以后服务端下发一个随机的token字段,并保存在session中>>客户端把token保存起来放在隐藏字段>>用户在第一次访问之后的每一次访问,都要携带token>>服务器端拿出token值进行比对,如果比对一致说明请求合法 //绕过:和XSS结合拿到token值,但因为有时间戳,还得保证速度。
④验证码
文件上传
(79条消息) 太厉害了,终于有人能把文件上传漏洞讲的明明白白了_在下小黄的博客-CSDN博客_文件上传漏洞
1.定义
用户在网站上传了一个可以执行的脚本文件,通过这个脚本获得了可以执行服务器端命令的能力。这个网站就可以被控制,称为所谓的“肉鸡”。
2.一句话木马
一个html代码上传一个php文件
一般页面的PHP代码
一句话木马代码
①post表示获取数据库中wuya后面的value值;
②eval表示把()里的内容作为代码执行
③@放在表达式前,该表达产生的错误有可能被忽略
④可以在上传的文件里写入操作操作系统的代码,php代码里有system函数可以操作操作系统
3.危害
①挂黑链接(让一些网站的排名在前)
②植入挖矿代码(替别人赚钱)
4.防御
①白名单只允许上传特定类型的文件
>>>在前端校验文件类型 //绕过:直接改js前端代码,使得可以上传php文件
>>>在后端也进行校验(摘取了http请求头里的content_type/accept里用来指定的数据类型)
//绕过:先上传php文件(理论上上传不成功);然后打开Burp suite中间抓包,在中间更改http请求包里的content_type格式;上传成功了
②黑名单不允许上传特定类型的文件 //绕过:>>>php等价扩展名 php3,php4,php5,phps,phtml >>>将php改成jpg,上传jpg文件,同时上传编译好的.htacess文件
5.流程
①找到上传的位置
②尝试绕过校验,上传文件(非常关键一步)
③获得文件位置
④蚁剑连接,管理文件
在上传成功以后,使用蚁剑工具链接上传以后的网址,然后在蚁剑内实施攻击(对后台数据库进行操作),因此文件上传相当于种植后门