Web前渗透
一、SQL注入
原理:
攻击者在输入框里输入恶意的SQL语句,导致能和正常的SQL语句拼接在一起,且拼接好的SQL语句能被数据库执行,导致数据泄漏,这种注入就叫做SQL注入
防护方式:
1、使用addlashes将单引号进行转义
2、将id类的转换成整数
3、对输入的数据进行一个长度的判断,通常长度不会太长
4、设置黑白名单,禁止information_schema、order by、union等等
5、在SQL语句的后面加一个die()函数
绕过方式:
1、联合查询
先使用order by进行列数的判断,接着使用union select来获取有用的信息
2、报错注入
常用的函数就是updatexml、extractvalue、floor,将数据库信息在报错信息中展现出来
3、布尔盲注
针对无回显的时候,通过对数据库名字长度、字符位置等等的判断,如果判断正确则直接回显我们所查询的信息,如果错误就不会回显信息,针对这种情况,我们可以进行爆破
4、时间盲注
也是针对无回显的时候,如果我们判断对了数据库的长度或者字符的位置,那么将会执行sleep函数,如果sleep(5),那么我们就等5秒页面就会刷新成功
5、SqlMap
-u 指定url进行扫描
指定文件批量检测,将需要扫描的url复制粘贴到txt文件中,然后使用-m进行扫描
指定post请求,就是将http请求数据包的内容放到一个txt文件中,然后使用-r进行检测
绕WAF,就是在sqlmap -u 后面加脚本文件
6、更新注入
核心就是构建报错注入的payload,也就是报错注入,通过报错来将信息展现在报错信息里面
7、堆叠注入
攻击者通过SQL注入漏洞,将多个SQL语句堆叠在一起的注入,通常用;分开
8、URL解码注入
就比如说我们输入%2527,第一次解码是将%25解码成%,然后和后面的27拼接成%27,接着将%27进行解码成',和前面的'进行闭合导致的注入
9、二次注入
将已存储在数据库里的内容再次读取出来,然后进入到SQL语句中执行的注入
10、宽字节注入
当你输入1'的时候,由于有addlashes进行转义,导致变成了'1\'',而数据库里没有这个名字的数据,所以不会查询到信息
当我们输入1%bf'的时候,在gbk的编码环境下,我们的%bf会和\(%5c)形成一个新的字符,从而吃掉了这个转义字符,导致我们的单引号可以进行闭合,然后就注入成功了,能够查到信息了
11、HTTP头注
如何绕过WAF
1、双写绕过
2、大小写绕过
3、编码绕过
4、特殊字符绕过:
空格、&&、||、内联注释、00截断、%省略(如果是iis或者asp的环境,%有可能会被省略)
如何getshell
1、先看看是否有读写权限,如果有的话,我们就直接使用into outfile写入一句话木马,然后使用蚁剑进行连接
2、当然也可以读取文件,使用目录遍历
二、XSS注入
分类:
反射型XSS:
攻击者构造一个恶意的urlxss发送给受害者,诱使受害者去点击,点击之后恶意代码就会在受害者的浏览器上执行,从而达到攻击的效果
存储型XSS:
常用于剪贴板,攻击者将构造好的js代码上传到剪贴板中,每当有一个用户来访问的时候,就会将保存好的恶意代码传到用户的浏览器上去执行,进而达到攻击的效果
DOM型XSS:
通过输入<>,看看输出位置在哪,然后进行拼接,使其拼接成一个浏览器能够执行的js代码,从而达到攻击的效果
原理:
攻击者将恶意的JavaScript代码植入到用户的浏览器里面去,然后诱惑用户去点击,用户一旦点击,那么恶意的JavaScript代码就会在用户的浏览器里执行,从而达到了攻击的效果
防护方式:
1、使用html实体编码,将我们输入的<>等等都进行实体编码,不要与我们原有的JavaScript代码产生交集
2、正则表达式或字符判断,如果是超链接的话,需要在链接属性上加一个对http或https的正则表达式来进行限制,不然直接就可以使用javascript:alert(1)进行注入了
3、设置httponly,防止获取到用户的cookie值
4、使用CSP内容安全策略
绕过方式:
1、进行前端限制
2、字符过滤,双写、大小写,通过注释符进行绕过、换行符绕过
3、实体转移,也就是将JavaScript代码转换成16进制,然后进行注入测试
4、看看是否将<>进行过滤或转义,如果没有直接<img src=1 οnclick=alert(1)>
如何getshell:
获取到用户的cookie,使用beef或者blue来监听上线的用户,从而收集到他们的cookie值,然后使用他们的cookie值进行破坏等等,如果收集到了root权限的cookie,那我们就能为所欲为了
三、文件上传漏洞
原理:
由于应用程序没有对用户上传的文件的后缀名进行过滤,导致可以上传恶意文件,获得对服务器的控制
绕过方式:
1、禁用js代码
2、通过MIME数据格式进行绕过
3、通过content-type进行绕过
4、图片马绕过
5、双写绕过
6、条件竞争
7、空格绕过
8、点绕过
9、点空格点绕过
10、大小写绕过
防护方式:
1、限制文件类型
2、将上传功能通过ajax的方式进行上传
3、限制能够访问的文件
4、对一些特殊的字符进行绕过
5、尽量不要让普通用户接触到htaccess特征文件
如何Getshell:
通过上述绕过方式来上传一句话木马,使用蚁剑进行连接,获得访问文件以及获得命令行的权限
四、文件下载漏洞
原理:
由于应用程序没有对用户的输入进行一个严格的过滤,导致攻击者可以随便下载该服务器上的文件
绕过方式:
1、使用目录遍历进行绕过
防护方式:
1、过滤.,使其不能进行目录遍历
2、正则表达式严格判断用户输入数据的方式
3、在php.ini中限定访问文件的范围
4、将文件存储到数据库中,使用id=整数的形式进行下载
五、文件包含漏洞
原理:
由于Web应用程序没有将用户输入的数据进行严格的判断,导致用户输入的数据能够接触到危险函数include等等,从而使其输入的文件能够被执行,导致服务器沦陷
绕过方式:
1、包含web日志
如果中间件是apache的话,我们可以在访问服务器的时候进行抓包,将我们的一句话木马写入到请求中,然后执行,使其进入到日志文件中,通过访问就可以getshell了
2、包含登录日志
22端口和3306端口
也是将我们的一句话木马写入到登录请求中,然后去访问我们的日志文件进而getshell,前提是这两个的日志是开启的
3、包含mysql日志
进入到mysql之后,我们可以执行select 加上我们的一句话木马,然后进入到我们的mysql.log中进行查看,如果完好无损,则可以访问给该文件进行getshell
4、包含上传文件
就比如包含一张图片马,上传成功之后我们去访问这个图片马,进而可以getshell
5、包含临时文件
也就是条件竞争,争取在恶意文件被删除的时间内能够访问到,只要shell不断,就可以保持连接
6、包含session文件
session文件一般都保存在服务器中,其路径也是固定的,因此只要找到一个控制session文件写入的点,就能够利用包含漏洞getshell
防护方式:
1、过滤特殊字符.,防止进行目录遍历
2、正则严格判断输入数据的格式
3、在配置文件中限定访问文件的范围
4、将文件放入数据库中,通过?id=整数来读取
六、CSRF
原理:
攻击者利用服务器对用户的信任,伪造一个恶意链接,然后发送给受害者,受害者一旦点击就被攻击了,也叫做one click攻击
漏洞挖掘方式:
1、去抓取一个正常请求的数据包,如果该数据包里面没有Referer和Token,说明极有可能存在CSRF漏洞
2、如果数据包中有Referer字段,但是去掉Referer字段再重新提交还有效的话,大概率是有CSRF漏洞的
3、也可以使用CSRF检测工具
防护方式:
1、可以使用验证码
2、在请求地址中添加token并验证
3、验证HTTP Referer字段
4、对来源进行限定
5、敏感信息的修改不应该是GET,而是POST
七、SSRF
原理:
服务器提供了向其他服务器请求资源的功能,由于没有对目标地址进行严格的过滤与限制,导致攻击者可以随意传入任意地址来让后端服务器发送请求,并返回对目标地址的请求的数据
绕过方式:
1、将IP地址改为十进制
2、重训构造一个URL地址
3、使用短网址
防御方式:
1、限定协议为HTTP、HTTPS、不允许其他协议
2、设置URL或IP地址白名单,非白名单不允许访问
3、限制内网IP访问
4、统一错误信息,避免用户根据错误信息来判断远程服务器的端口状态
5、限定请求的端口
6、尽量让参数不可控
7、对目标地址做好过滤
八、PHP反序列化
原理:
序列化就是将对象转换成字符串。反序列化就是将字符串转换为对象,PHP反序列化又分为两种,一种是有类,另一种是无类,如果源码会将输入的值进行反序列化,那我们就需要提前将数据序列化后再传入,想要利用到的方法就是魔术方法
九、XXE
原理:
XML外部实体注入,发生在应用程序解析XML输入的时候,没有禁止外部实体的加载,导致可以加载恶意外部文件,造成文件读取、命令执行等等危害