前言:第一次使用markdown
,文章里面可能有各种尝试,看官见谅。web安全基础需要各位看官有一定html/js/php等基础知识(我也是萌新),知识多而杂,需要多看多动手。
全称:Cross Site Script
中文名称:跨站脚本
危害:盗取用户信息、钓鱼、制造蠕虫等
概念:黑客通过“HTML注入”篡改网页,插入了恶意脚本,当用户在浏览网页时,实现控制用户浏览器行为的一种攻击方式。
xss三种类型
XSS类型 存储型 反射型 DOM型
触发过程 1.黑客构造XSS脚本 正常用户访问携带 正常用户访问携带
2.正常用户访问携带 XSS脚本的URL(参数) XSS脚本的URL(哈希)
XSS脚本的页面
数据存储 数据库 URL URL
谁来输出 后端WEB应用程序 后端WEB应用程序 前端JavaScipt
输出位置 HTTP响应中 HTTP响应中 动态构造的DOM节点
DOM型: 用户访问应用 浏览器通过js解析URL内容输出到DOM中 触发XSS
个人理解(欢迎指正):主要利用闭合标签,闭合正常标签,并加入恶意代码
或添加构造恶意代码。
">来先闭合掉a标签。然后再用script来运行js代码
onclick="alert(1)";>123//点击123触发onclick来运行js,然后把后面的内容来注释掉
前人已经对XSS有了比较深入的总结
链接:XSS的原理分析与解剖 XSS的原理分析与解剖二
防御xss
原则1:不要在页面中插入任何不可信数据,除非这些数已经据根据下面几个原则进行了编码
原则2:在将不可信数据插入到HTML标签之间时,对这些数据进行HTML Entity编码
原则3:在将不可信数据插入到HTML属性里时,对这些数据进行HTML属性编码
想知道如何防必然对攻要有深刻理解,有时间拜读此文防御XSS的七条原则
全称:Cross-site request forgery
中文名称:跨站请求伪造
危害:执行恶意操作(被转账,被发垃圾评论等)、制造蠕虫...
概念:利用用户已登录的身份,在用户毫不知情的情况下,以用户的名义完成非法操作
CSRF攻击攻击原理及过程如下:
1.用户C打开浏览器,访问受信任网站A,输入用户名和密码请求登录网站A;
2.在用户信息通过验证后,网站A产生Cookie信息并返回给浏览器,此时用户登录网站A成功,可以正常发送请求到网站A;
3.用户未退出网站A之前,在同一浏览器中,打开一个TAB页访问网站B;
4.网站B接收到用户请求后,返回一些攻击性代码,并发出一个请求要求访问第三方站点A;
5.浏览器在接收到这些攻击性代码后,根据网站B的请求,在用户不知情的情况下携带Cookie信息,向网站A发出请求。网站A并不知道该请求其实是由B发起的,所以会根据用户C的Cookie信息以C的权限处理该请求,导致来自网站B的恶意代码被执行。
从上图可以看出,要完成一次CSRF攻击,受害者必须依次完成两个步骤:
1.登录受信任网站A,并在本地生成Cookie。
2.在不登出A的情况下,访问危险网站B。
看到这里,你也许会说:“如果我不满足以上两个条件中的一个,我就不会受到CSRF的攻击”。是的,确实如此,但你不能保证以下情况不会发生:
1.你不能保证你登录了一个网站后,不再打开一个tab页面并访问另外的网站。
2.你不能保证你关闭浏览器了后,你本地的Cookie立刻过期,你上次的会话已经结束。(事实上,关闭浏览器不能结束一个会话,但大多数人都会错误的认为关闭浏览器就等于退出登录/结束会话了)
3.打开的第三方网站,可能是一个存在其他漏洞的可信任的经常被人访问的网站。
CSRF 攻击的应对之道
1.验证 HTTP Referer 字段
2.在请求地址中添加 token 并验证
3.在 HTTP 头中自定义属性并验证
文章链接如下CSRF 攻击的应对之道
4.服务端的CSRF方式方法很多样,但总的思想都是一致的,就是在客户端页面增加伪随机数
浅谈CSRF攻击方式
全称:Click Jacking
中文名称:点击劫持
危害:点击覆盖不可见的框架,造成各种精心设计的风险如何删除、点赞、下载、转账等
概念:它是通过覆盖不可见的框架误导受害者点击。虽然受害者点击的是他所看到的网页
,
点击劫持其实是一种视觉上的欺骗手段,攻击者将一个透明的、不可见的iframe覆盖在一个网页上,通过调整iframe页面位置,诱使用户在页面上进行操作,在不知情的情况下用户的点击恰好是点击在iframe页面的一些功能按钮上。例:
Flash点击劫持
点击劫持与CSRF攻击有异曲同工之妙,他们都是在用户不知情的情况下诱使用户完成一些动作。CSRF在攻击过程中如果出现与用户交互的页面,则攻击有可能无法完成。而点击劫持恰恰是利用与用户交互而完成的攻击,因此在Flash中这类点击劫持现象更为严重。攻击者利用简单的Flash小游戏诱使用户点击,经过一系列点击后达到控制用户电脑的目的。
推荐文章链接小漏洞大危害 、 浅析点击劫持攻击、点击劫持
尤其当网址变成短链接,就更具有迷惑性了
定义:借助未验证的URL跳转,将应用程序引导到不安全的第三方区域从而导致安全问题。
跳转实现
1.Header头跳转
$url = $_REQUEST["url"]; 获取用户请求链接
header("Location: $url"); 跳转到链接地址
2.Javascript跳转
var site = getQueryString("site"); js脚本获取用户请求链接
window.location.href=site; 跳转到链接地址
3.META标签跳转
$url = $_REQUEST["url"]; 获取用户请求链接
5秒后跳转到链接地址
推荐文章链接URL重定向/跳转漏洞解释说明及修复方案、前端一波骚操作
SQL Injection 服务端漏洞
是一种常见的Web安全漏洞,攻击者利用这个漏洞,可以访问或修改数据,
或者利用潜在的数据库漏洞进行攻击。
正常登录的流程
POST请求登录,把用户名和密码交给服务器,服务器通过PHP代码实现获取到浏览器POST的用户名和密码,会经过一次MD5处理,服务器会把用户名和密码经过MD5处理后的密码拼接到要执行的SQL语句中。
1.POST请求登录,
2.获取请求参数,
3.参数带入代码,
4.执行查询,
5.验证查询结果,
6.根据返回结果判断是否登录成功
$username = $_POST['username'];
$password = MD5($_POST['password']);
SQL注入过程
1.获取用户参数
2.拼接到代码当中
3.SQL语句按照我们构造参数的语义执行成功
admin' -- 注释-- (双横杠空格)代表注释符 ‘为了闭合前面单引号
查询数据库中是否有admin用户,用户存在时返回结果根本没有验证密码
$check_query = mysql_query("select id from teacher where name='admin' -- and passwd='$password' limit 1");
利用脚本
username = admin' and 1=2 union select version()
username = admin' and 1=2 union select user()
SQL必备条件
1.可以控制输入的数据
2.服务器要执行的代码拼接了控制的数据
SQL注入的本质
数据和代码未分离即数据当作了代码来执行
SQL注入的危害
1.获取数据库信息
2.管理员后台用户名和密码
3.获取其他数据库敏感信息:用户名、密码、手机号码、身份证、银行卡信息......
4.获取服务器权限
5.植入Webshell,获取服务器后门
6.读取服务器敏感文件
7.万能密码
推荐文章链接认识SQL注入的类型、手工注入语句大全
应用有时需要调用一些执行系统命令的函数,如PHP中的system、exec、shell_exec、
passthru、popen、proc_popen等,当用户能控制这些函数中的参数时,就可以将恶意系统命令
拼接到正常命令中,从而造成命令执行攻击,这就是命令执行漏洞。
攻击过程
黑客-> 构造命令-> web应用程序-> 拼接命令并执行注入命令-> 并把结果返回到页面
WEB应用如何命令注入
命令注入条件:
1.调用可执行系统命令的函数
2.函数或函数的参数可控
3.拼接注入命令
举例
1.下面代码无法执行其他命令,不满足上面命令注入的第二个条件,函数或其参数可控
");
}
?>
2.参数可控,可以拼接
". htmlspecialchars($url) . ""
. " 的响应头如下:
";
// 输出命令执行结果
foreach($output as $value){ ---输出命令结果
echo htmlspecialchars($value);
echo "
";
}
?>
推荐文章链接 命令执行
常见文件操作漏洞:
1.文件上传漏洞
2.任意文件下载
3.文件包含漏洞
利用文件操作漏洞:
1.文件上传
1.1上传Webshell
1.2上传木马
...
2.文件下载
2.1下载系统任意文件
2.2下载程序代码
...
文件操作漏洞原因:
文件处理不当
1.可以上传可执行脚本
2.脚本拥有执行权限
推荐文章链接 文件上传漏洞及解析、任意文件查看与下载漏洞
后记
纸上得来终觉浅,实践出真知,我也需要多动手,望君亦如此。第一篇算是偏技术文贴,要发了,
但没刚写那么激动,我会继续写的。