1.爬虫遍历(绕过路径访问控制方案)
2.目录遍历
3.越权
4.DOM-XSS
5.存储型xss
6.数字型-SQL
7.字符型-SQL
8. sqlmap漏洞利用,post,get
9.操作系统命令注入
10.文件上传 (zip炸弹)
11.中国菜刀
12业务逻辑 (json、不安全的客户端存储,购物车并发)
12.xxe注入
13.webservices检查
什么是MySQL的预编译?
所谓预编译就是将一些灵活的参数值以占位符?的形式给代替掉,我们把参数值给抽取出来,把SQL语句进行模板化。让MySQL服务器执行相同的SQL语句时,不需要在校验、解析SQL语句上面花费重复的时间。
sqlmap是什么工具?使用前提是
SQLMAP是一个自动化的SQL注入工具,其主要功能是扫描,发现并利用给定的URL和SQL注入漏洞,其广泛的功能和选项包括数据库指纹,枚举,数据库提权,访问目标文件系统,并在获取操作权限时执行任意命令。注意请求顾客同意才能使用。
使用前提:当你发现一个软件有sql注入的可能时就用(可以获取当时数据库的信息,表,字段)
什么是SQL注入?
SQL(Structured Query Language)是操作数据库数据的结构化查询语言,应用系统与后台数据库进行数据交互时会采用SQL语言。SQL注入是修改拼接SQL语句到URL、表单、数据等参数,传递给应用服务器,进而传给数据库服务器以执行数据库命令。攻击者通过SQL注入获取到服务器的库名、表名、字段名,从而获取到整个服务器中的数据,对应用系统的数据安全有极大的威胁。
怎么预防SQL注入?
1.查询语句使用参数化的查询接口。如用预编译preparedStatement();
2.特殊字符如 ‘’ ”<>&*;进行转义,编码;
3.确定每种数据的类型;
4.数据长度严格规定;
5.网站数据层编码统一;
6.严格权限;
7.避免网站显示错误信息;
8.网站发布前使用SQL注入检测工具。
PreparedStatement与Statemen在SQL 语句的执行过程的区别:
- (1)即时 SQL,大致的过程如下:
1. 词法和语义解析;
2. 优化 SQL 语句,制定执行计划;
3. 执行并返回结果;
如上,一条 SQL 直接是走流程处理,一次编译,一次运行,此类普通语句被称作 Immediate Statements。
- (2)预处理 SQL
一条 SQL 语句可能会被反复调用执行,或者每次执行的时候只有个别的值不同(比如 select 的 where 子句值不同,update 的 set 子句值不同,insert 的 values 值不同)。如果每次都需要经过上面的词法语义解析、语句优化、制定执行计划等,则效率就明显不行了。所谓预编译语句就是将此类 SQL 语句中的值用占位符替代,可以视为将 SQL 语句模板化或者说参数化,一般称这类语句叫Prepared Statements。预编译语句的优势在于归纳为:一次编译、多次运行,省去了解析优化等过程。
String query = "SELECT * FROM weather_data WHERE station = ?"; 是一个整体被编译,“?”作为一个占位符,传递参数替换占位符,而不再进行编译,所以可以有效组织sql注入的发生。
注入方式get和post区别
GET型注入漏洞
-
GET 是 HTTP 协议的传输方式。它的特点就是可以直接以 URL 的形式传输数据。而 GET型注入漏洞就是利用这一特点,对数据库进行注入测试。
POST型注入漏洞
-
在 HTTP 常用方法中,POST 方法提交的实体不存储在 URL 中,而是存储在 HTTP 协议实体内容中,数据放在请求体,在大多过程中,用户时无法感知的。
操作系统命令注入?
Command Injection,即命令注入攻击,是指由于Web应用程序对用户提交的数据过滤不严格,导致黑客可以通过构造特殊命令字符串的方式,将数据提交至Web应用程序中,并利用该方式执行外部程序或系统命令实施攻击,非法获取数据或者网络资源等。在WebGoat命令注入课程中,使用的是Java的命令注入。Java命令注入攻击存在的主要原因是Web应用程序员在应用Java语言的命令执行功能的类(如:java.Runtime)时,对用户提交的数据内容没有进行严格的过滤就带入函数中执行而造成的。
一个Web安全漏洞,它使攻击者可以在运行应用程序的服务器上执行任意操作系统(OS)命令,并且通常会完全破坏该应用程序及其所有数据。攻击者通常可以利用OS命令注入漏洞来破坏托管基础结构的其他部分,利用信任关系将攻击转移到组织内的其他系统。
当操作系统命令执行了,
1.具有时间延迟
2.外交互性
3.重定向
4.带外数据泄露
操作系统命令注入防御?
1.根据允许值的白名单进行验证。 用户白名单:防提权。命令白名单:允许查看某些文件。
2.客户端服务端都需要防御
3.验证输入仅包含字母数字字符,不包含其他语法或空格。4.抓包改包
什么是webshell原理
Webshell是一种运行在Web服务器上的脚本程序,通常由黑客使用来绕过服务器安全措施和获取对受攻击服务器的控制权。Webshell通常是通过利用Web应用程序中的漏洞或者弱密码等安全问题而被植入到服务器上的。一旦Webshell被植入到服务器上,黑客可以使用它来执行各种操作,例如上传或下载文件、执行命令、创建用户、修改系统配置等等。由于Webshell可以通过Web浏览器进行远程控制,所以它非常难以发现和防御。
Webshell种类繁多,主要分为以下几类:
基于脚本语言的Webshell:例如PHP、ASP、JSP等。这种Webshell的特点是非常灵活,可以通过执行脚本语言代码来执行各种操作。
基于系统命令的Webshell:例如基于Linux系统的Bash、基于Windows系统的CMD等。这种Webshell的特点是可以通过执行系统命令来执行各种操作。
文件上传型Webshell:这种Webshell的特点是可以通过上传恶意文件到服务器上来获取对服务器的控制权。
远程控制型Webshell:这种Webshell的特点是可以通过远程控制方式来获取对服务器的控制权。
后门型Webshell:这种Webshell的特点是可以在服务器上创建一个后门,以便黑客在以后的时间里再次获取对服务器的控制权。
以上只是Webshell的一些基本类型,实际上还有许多其他的Webshell类型。Web服务器管理员需要了解不同类型的Webshell,并采取相应的防御措施来保护服务器的安全。
什么是webshell工具
Webshell工具是一种用于测试和评估Web服务器安全性的软件工具。这些工具可以利用Web应用程序中的漏洞或者弱密码等安全问题,将Webshell植入到目标服务器上,从而获取对服务器的控制权。Webshell工具一般具有以下一些特点:
支持多种Web应用程序漏洞利用:例如SQL注入、文件包含、文件上传、命令注入等。
支持多种Webshell类型:例如PHP、ASP、JSP等。
提供一系列操作功能:例如上传文件、下载文件、执行命令、创建用户、修改系统配置等。
提供一些辅助功能:例如自动识别Web应用程序漏洞、自动破解密码、自动植入Webshell等。
提供一些保护措施:例如自动备份Webshell文件、自动清除Webshell文件等。
中国菜刀前提是文件上传出现漏洞
文件上传漏洞?
恶意执行也可以叫上传漏洞,顾名思义就是攻击者通过上传木马文件,直接得到WEBSHELL,危害等级非常高。导致该漏洞的原因在于开发者没有对用户上传数据文件进行有效防御不足,用户将木马上传服务器指定目录,再通过链接触发执行上传文件。
什么时候有?
1.上传功能
2.上传可执行文件
修复
1.自动改文件名称,后缀;
2.限制文件大小;
3.上传的文件和代码放在不同的服务器。
4.对文件进行重新编码(如增加水印)
5.其他:文件加密,文件前面验证,可信计算环境
绕过
zipp炸弹防御
拒绝服务攻击即攻击者想办法让目标主机停止提供服务,是黑客常用的攻击手段之一。一般通过网络发起,通过各种手段耗尽系统资源达到拒绝服务的目的,Zip炸弹是一种应用层拒绝服务攻击的手段。Zip炸弹将特殊构造的大文件压缩,系统在解压的时候如果没有检查校验,会造成系统内存和磁盘被沾满,无法为其他服务提供硬件资源。
防御:
1.首先是信任zip文件,可以通过增加zip密码的方式防止恶意zip文件被系统读取
2.不解压的情况下读取被压缩文件大小。
3.判断文件大小,20MB以内可以解压
4.进行递归时,判断深度。
防御要点:1.校验解压后文件大小 2.校验解压后的条目总数 3.解压时防止跨目录攻击 * 4.校验解压文件路径 5.校验文件路径长度
1.首先是信任zip文件,可以通过增加zip密码的方式防止恶意zip文件被系统读取
2.不解压的情况下读取被压缩文件大小。
3.判断文件大小,20MB以内可以解压
4.进行递归时,判断深度。
xxe注入是
XXE指的是XML在引入外部实体的时候产生的注入攻击。
防御
1.禁用外部实体
2.过滤和验证用户提交的XML数据
业务逻辑那三个改了什么? 怎么防御?
json Injection(json注入)
AJAX安全,通过使用AJAX方式,可以将前后端进行分离开发,降低系统的耦合度。Json格式类似hashmap,是key-value的方式进行数据传递,json注入经常发生在前端界面的计算和验证依赖后端的数据。黑客通过劫持回话,对json数据进行修改,然后返回欺诈数据数据对客户端、或者服务端。
BurpSuite拦截http通信数据包。在拦截数GET请求数据中点击右键Do intercept--Response to this request。这个设置功能是允许对返回值进行拦截和修改。
防御:
因为正常情况下,电商不能直接获取用户的银行卡账号和密码进行支付,电商在进行支付操作的时候需要调用银行的SDK或接口,将账单号、支付收款账户、金额等发送给用户,用户跳转到支付页面进行支付操作,支付成功后将交易流水号发送给电商,完成交易。所以交易过程中的数据加密显得很重要,这里为了演示方便使用base64对传输明文进行处理。新建方法base64_price。
在组装返回值的时候进行base64加密。
后端返回数据加密了,前端同样需要修改接收数据的方法进行解密,修改目录
/home/webgoat/.extract/webapps/WebGoat/plugin_extracted/plugin/JSONInjection/js的
jsonInjection.js文件,使用浏览器自带base64的解密方法atob,也可以使用开源的Base64.js
使用burp获取返回数据的时候,数据通过加密处理,增加被篡改的难度,如果要更加安全可以使用带时间戳的AES加密,攻击者解密的时候超出时间也可以判断数据被篡改。
Insecure Client Storage(不安全的客户端存储)
在服务端验证所有的用户输入信息总是不错的做法。客户端进行的任何验证信息都存在被逆向分析的脆弱性。本次课程中系统将优惠券存储在客户端,我们的任务是发现一个优惠券代码,以获得意想不到的折扣。
注入针对浏览器前端进行攻击,这里可以使用浏览器开发者模式进行调试,按F12或在浏览器工具箱中打开开发者工具,在查看器中,点击左上角箭头图标,打开“选取页面中的元素”功能,在查找输入框对应的元素。这里的元素的input,对应的事件是onkeyup也就是键盘弹起时,这个事件在每次键盘输入字符时触发。首先找到元素对用的js处理,这里在keyup事件中触发函数响应。
这里主要的注意点是onkeyup,在按键的时候触发
<input value="" οnkeyup="isValidCoupon(field1.value)" name="field1" type="TEXT">
开发者界面切换到Sources界面,在右侧事件监听中找到KeyBoard—keyup勾选对onkeyup事件进行监听。
打开client-side-validation项目下的clientSideValidation.js文件,代码中coupons存储各种优惠券代码加密信息,isValidCoupon中对加密信息进行解密,并对比用户输入信息,如果用户输入信息与优惠卷代码相同,发送请求获取优惠信息。这里是第一个漏洞,出现在优惠券信息存储在客户端,用户可以通过浏览器调试的方式将优惠券密文进行解析。
将返回的折扣与现有价格进行计算得出应付价格,这里是第二步漏洞,出现在优惠券计算在客户端进行,用户可以通过浏览器调试或修改的方式将计算方法改变,从而获取更大的折扣。
防御修复:将存储的验证信息和解密方法删除,直接将用户输入的优惠券代码发送给服务端进行校验。
Shopping Cart Concurrency Flaw (购物车并发缺陷)
线程安全是多线程编程时的计算机程序代码中的一个概念。在拥有共享数据的多条线程并行执行的程序中,线程安全的代码会通过同步机制保证各个线程都可以正常且正确的执行,不会出现数据污染等意外情况。
多线程操作的漏洞,需要在多人访问情况下实施,可以使用两个浏览器完成此次测试,首先分别登陆不同浏览器,进入课程界面,这里需要查看Cookies中的JEESIONID需要不同。在第一个用户通过浏览器中加入169元的货物,点击Purchase在付款界面等待,第二个用户通过浏览器中加入1799元货物,点击Update将货物加入购物车。
防御修复:购物车为每个用户服务,所以每个用户需要用独立的购物车,不能使用static修饰变量。
WebService
WebServices 通过使用 SOAP请求进行通信。这些请求被提交到一个尝试执行使用 Web 服务描述语言( WSDL)定义的函数的 Web 服务。
Create a SOAP Request (新建SOAP请求)
SoapUI发送webservice请求,SoapUI是一款多功能的接口测试工具,支持多种协议,