世事洞明皆学问,人情练达即文章。这篇文章主要讲述网络安全学习-WEB安全常见漏洞相关的知识,希望能为你提供帮助。
注入类漏洞SQL注入漏洞
定义sql注入漏洞,就是将用户可控的数据拼接到了sql语句当中,一起提交到了数据库执行。
攻*击者通过注入语句,改变sql执行的逻辑,通过控制部分sql语句,攻击者可以查询到数据库钟任何自己需要的数据,利用数据库的一些特性们,可以直接获取数据库服务器的系统权限。
漏洞分类
提交的参数类型
示例-报错型
以上注入,又被叫做万能密码,可以实现一些网站用户登录
实例-bool型在靶场环境,输入http://localhost:81/sqli/Less-8/?id=1打开该平台,这时会向数据库送人一条查询:
SELECT * FROM table_name WHERE id=1
显示如下界面
当攻击者使用嵌入()的查询,即:
http://localhost:81/sqli/Less-8/?id=1
黄色文本消失,也没有得到任何错误信息,使用其他攻击方式的情况于此相同。
攻击者可以通过盲注来进行验证,该注入查询返回的一定是TRUE或者FALSE。
再次验证是否为布尔型注入,插入判断语句:
http://localhost:81/sqli/Less-9/id=1 AND 1=1 --+
其中 --+在数据库中代表注释的意思
对应的后端数据库查询为:
SELECT * FROM table_name WHERE id=1 AND 1=1
【网络安全学习-WEB安全常见漏洞】获取数据库名等信息
首先确定数据库中字符串长度,简单来说就是获取数据名的长度。
http://localhost:81/sqli/Less-9/id=1 AND (length(database())=1 -+
确定页面没反应,则认为返回的是FALSE,意味着当前数据库名的长度不等于1
尝试判断数据库名的长度为2
http://localhost:81/sqli/Less-9/id=1 AND (length(database())=2 --+
当尝试判断数据库名的长度为8的时候,
http://localhost:81/sqli/Less-9/id=1 AND (length(database())=8 --+
此时页面有变化,显示TRUE.可以判断出数据名为8。通过一些自动化工具,自动化遍历出该信息。
计算机无法理解人类的语言,可以通过ASCII码,将字符集中的每一个符号都对应一个整数,比如字母,数字,标点符号,特殊字符和操作符号。
可以使用ASCII码枚举出这8个字符。
下一条查询使用关键字ascii substr检查出当前数据库名中的第一个字符串对应ASCII码是否大于100
http://loaclhost:81/sqli/Less-8/?id=1 AND (ascii(substr((selectdatabase()),1,1))) >
100 --+
可以看出第一个字符串的ASCII的码确实大于100.
同理,可以尝试判断第二个字符的ASCII是多少
http://loaclhost:81/sqli/Less-8/?id=1 AND (ascii(substr((selectdatabase()),2,1))) >
101 --+
按照如上方法,可以得到全部8个字符
sql注入工具
sqlmap
自己开发脚本
sql注入安全方法措施
XSS-跨站脚本攻击
XSS漏洞,从本质上来说就是将数据注入到了静态脚本代码中,(html或者javascript等),当浏览器渲染了整个HTML文档的过程中,
触发了注入的脚本,导致了XSS攻击的发生
XSS的危害客户端
服务器端
XSS的分类
代码一般存在于连接中,请求这样的链接的时候,跨站代码经过服务端反射回来,这类跨站代码一般不存储到服务端
这时利用起来最方便的跨站类型,跨站代码存储于服务端,比如数据库中
一种基于DOM的跨站,这是客户端脚本自身解析不正确导致的安全问题。
反射性XSS过程如下
利用页面参数调用
使用alert 弹框测试
存储型XSS
存储型XSS可能出现的位置用户注册类,用户名,注册邮箱,手机号,个人说明,留言评论,发布文章公告
基于DOM型XSS不可控的危险数据,未经过过滤传入存在缺陷的,javascript代码处理,最终春发DOM XSS漏洞
与前面两种XSS的区别就在于xss代码不需要服务器解析响应的直接参与,触发xss靠的是浏览器端的DOM解析。
通过前端脚本修改页面的DOM节点形成的XSS,代码可见,从前端获取到的DOM中的数据在本地执行,从效果上来说也是反射型XSS
XSS的防范措施程序开发者:
跨站脚本伪造CRSF
缺陷代码举例A站点
恶意站点上的代码
CSRF和XSS的区别攻击流程
区别
CSRF防护
文件上传漏洞
非法文件长传产生的主要原因就是在服务器端没有对用户上传的文件类型进行校验或者校验不完整,导致用户可以长传恶意脚本到服务器
文件上传绕过
代码实例
可以利用该漏洞上传webshell,病毒以及其他恶意代码能够进行进一步提权,获取数据库信息(拖库)甚至拿到服务器权限
防护在不影响业务的前提下
路径遍历漏洞原因服务器端,接受浏览器传来的文件名称,在服务器端拼凑成文件的绝对路径,并且输出流下载
防护方法1
方法2:
针对文件的访问,直接给出文件路径的链接,如:
<
a href ="http://xx.xx.xx.xx//upload/file1.jgp">
失效的身份认证和会话劫持
越权垂直越权漏洞也叫权限提升漏洞,由于WEB应用程序没有做权限控制或者仅仅在菜单上做了权限控制,导致的恶意用户只要猜测其他管理页面的URL,就可以访问或者控制其他角色拥有的数据或者页面,达到权限提升的目的
水平越权漏洞WEB用用程序接收到用户请求,修改某条数据的时候,没有判断数据的所属人,或者判断数据所属人的时候,从用户提交的REQUEST参数(用户可以控制数据)中,获取了数据所属人的ID,导致恶意攻击者可以通过变换数据ID,或者更换所属人id,导致恶意攻击者可以通过变换数据ID,或者变换所属人id,修改不属于自己的数据,恶意用户可以栓除或者修改其他人的数据。
远程命令执行漏洞
strust2远程命令执行攻击者通过构造特定数带入OGNL表达式即可能被解析并且执行,而OGNL可以用来获取和设置java对象的属性,同时也可以对服务器端对象进行修改,所以只要绕开strust2的一些安全策略,攻击者甚至可以执行系统命令进行系统攻击
在strust2中,DefaultActionMapper类支持以action,redirect:.redirectAction作为导航或者是重定向前缀,但是这些前缀后面同时可以跟OGNL表达式,由于strust2中没有对这些前缀进行过滤,导致利用OGNL表达式调用java静态方法执行任意系统命令。
java反序列化漏洞
该方法对参数指定的obj对象进行序列化,把字节序列写到一个目标输出流中,按照java的标准约定是给文件一个.ser扩展名
该方法从一个源输入流中读取字节序列,再把他们反序列化为一个对象,并将其返回.
如果java应用对用户输入,即不可信数据做了反序列化处理,那么攻击者可以通过构造恶意输入,让反序列化产生非预期的对象,非预期的对象在产生过程中就有可能带来任意代码执行.
推荐阅读
- 时间服务器 ntp和chrony
- Gitlab的基本使用
- kubeadm init初始化失败运行reset后需要执行的clean up 命令
- MYSQL随笔十二 磁盘坏道
- 我们为什么要学习Linux()
- 牛逼!Linux命令速查手册出炉!
- httpd开启ssl认证
- STM32+华为云IOT设计的动态密码锁
- 进程管理