目录
一、文章简介
二、Web漏洞
1.SQL注入
(1)定义
(2)利用
(3)碰到的问题
(4)防御
(5)注入思路
(6)危害
2.任意文件读取
(1)定义
(2)利用
(3)思路
3.SSRF漏洞(服务器请求伪造)
(1)定义
(2)利用
4.命令执行漏洞
(1)定义
(2)利用
(3)思路
5.XSS(跨站脚本攻击)
(1)定义
(2)利用
(3)思路
(4)防御
6.web文件上传漏洞
(1)定义
(2)利用
(3)碰到的问题
7.反序列化漏洞
(1)反序列化定义
(2)利用
整合一些web漏洞,以及对漏洞的理解。
开发者程序编写过程中,对传入用户数据过滤不严格,将可能存在的攻击载荷拼接到SQL查询语句当中,再将这些查询语句传递到后端的数据库执行,从而引发实际执行的语句与预期不一致的情况。
1、数字型:输入点附近没有引号包裹($_GET['id'])运算模式能被运算,即1+1 => 2
2、字符型:($id)运算模式无法运算,即1+1 => 1+1
1、联合查询只有一行结果,无法显示所需要的
答:用 limit 进行参数限制 或者 另一条记录用一个很大的值使其无法被查询到
2、注入语法示例
答:
xxxxx'union select table-name,1 from information_schema.tables where table_schema='dvwa'#
xxxxx'union select column_name,1 from information_schema.columns where table_name='users'#
3、注入流程
答:
1、判断字符型还是数字型;
2、判断字段数量;
3、查看回显字段;
4、获取数据库和用户名;
5、查表名;
6、查表字段;
7、读取
注:复选框则通过Burpsuite抓包repeater;若引号无法使用,将表名改为database()自动获取,以及十六进制转换提交。
1、查询前的条件利用函数判断,函数过滤
2、输入转义、参数化查询
3、waf防护、云端防护
1、只过滤空格 => url编码代替空白符(如:%09)
2、将select替换为空 => 嵌套构造(如:selselectect)
3、大小写匹配 => 大小写混写(如:sElect)
4、正则匹配 =>构造绕过(如:正则'\bselect\b' => /*!50000select*/)
5、逃逸引号 => 编码绕过,\转义
6、字符串截断 =>\转义
7、报错注入函数:extractvalue()\updatexml()\floor()\exp()
获取敏感数据,权限提升,控制关键文件,控制整个数据库,执行系统命令
攻击者通过一些手段读取服务器上开发者不允许读到的文件。
1、php的 php://filter 伪协议
2、Python的 feature函数
3、java的 file://协议
4、Ruby on Rails远程代码执行漏洞(CVE-2017-14849;CVE-2018-3760;CVE-2019-5418)
5、node模板注入、代码注入
6、nginx配置错误导致目录穿越(/static../ => /static/../)
1、爆破目录
2、利用filter协议:php://filter/convert.Base64-encode
3、利用zip协议:zip://uploads/xxx.png#1.php
攻击者通过构造数据进而伪造服务器端发起请求的漏洞,通常是服务端提供了从外部服务获取数据的功能,但没对目标地址协议等参数进行过滤限制,导致攻击者可以自由构造函数,发起预期外的请求。
1、测试是否能控制支持常见协议(file://etc/passwd 、dict://xxx.xxx.xxx:xxxx/info 、gopher://xxxxx)
2、写入Crontab反弹shell攻击Redis
3、DNS重绑定
调用函数执行命令且未对输入做过滤处理。
构造使其能同时执行多条命令即可
1、黑名单关键字=>利用变量进行拼接;使用通配符(?/*);借用已有字符( substr() 截取)
2、无回显=>指令外带,在平台上获取执行结果(for /F %x in (xx) do xxxxx)or (curl xx/'xxx');时间盲注(ping -nc 5 xxxxx);命令写入web目录下(x.php?cmd=whoami>test)再访问文件。
3、正则限制=>找缺漏(如:正则未多行匹配,进行绕过)
4、限制命令长度=>利用上传的文件名字拼接
利用网页开发的漏洞,注入恶意代码到网页使用户加载并执行攻击者恶意制造的网页程序
1、存储型:恶意代码被服务器存储,在访问页面时会直接触发。
2、反射型:恶意代码未被服务器存储,每次出发通过GET/POST方式提交触发。
3、DOM型:在前端通过JS渲染完成数据交互,且不经过服务器,不需要与服务器交互。
1、特殊标签闭合实现payload逃逸
2、闭合引号在变量传入恶意代码
3、on事件;img标签;input标签的autofocus属性;
4、伪协议: javascript:xxx (如: javascript:alert(1) )
5、data伪协议(如:data:text/html;base64,PHNjcmlwdD5hbGVydCgieHNzIik8L3NjcmlwdD4=)
注:乱码为的base64编码
6、借助模板的二次渲染完成沙箱逃逸(jinjia2)
7、html编码
8、变量替代
9、闭合引号转义
10、JSONP命令接口(callback=xxxxxx)
注:JSONP:解决主流浏览器的跨域数据访问,指向一个接口(动态添加)
1、httponly
2、输入检查
3、输出检查(安全的编码函数)
实现文件上传时,没有对用户上传的文件做好处理
1、00截断:x.php/00.jpg=>x.php
2、转换字符集造成截断
3、文件后缀绕过(php3/php5/phtml/pht)
4、上传.htaccess/.user.ini
5、IIS解析漏洞(x.asp;a.jpg=>x.asp)
6、Nginx解析漏洞(先构造代码将后缀改为jpg,之后上传x.jpg文件,访问x.jpg/1.php,因为该文件不存在且要用php解析,故最后以php解析了x.php)
7、Apache解析漏洞(使用AddType时,x.php.xxx文件由于没有对应的处理器处理xxx,所以往左识别出php,交给php处理器处理)
8、Apache CVE-2017-15715漏洞(FilesMatch指令正则中$能匹配到换行符,导致.php\n的文件能被解析)
9、location匹配顺序导致绕过
注:location ^~:普通字符串匹配后不再进行正则匹配;location:大小写敏感,前缀匹配,不是完全匹配则会继续匹配;location ~:正则匹配,匹配成功则不考虑后面的
10、临时文件利用
11、死亡之die绕过:使用字符串过滤器把exit()处理掉(upload.php --data "filename=php://filter/write=convert.base64-decode/resource=x.php")
12、zip文件绕过;zip文件在文件被删除前访问文件生成另一个脚本文件到非上传目录中(不断上传访问最终成功);解压到一半失败的zip包;目录跳跃(当使用第三方解压方法时,文件名为../x.php)
1、web服务器中配置上传目录的脚本文件禁止访问
答:将目录穿越上传到根目录(../x.php)。
2、文件上传到OSS(云服务器)怎么办?
答:当网站把OSS绑定在自己的二级域名下时就能用了。
3、上传文件无法被解析访问
答:上传一个php文件配合文件包含实现解析(page.php?upload=x.php)
4、getimgesize检测文件是否为正常图片的绕过
答:php代码添加到图片内容后即可
5、imagecreatefromjpeg绕过
答:上传正常图片,下载回渲染后的图片,运行脚本处理,将代码注入图片,上传新生成的图
将对象的状态信息转换为可存储或者可传输的过程就是序列化,反序列化是为了方便对象的传输,获取之前的对象
1、__wakeup失效 CVE-2016-7124:属性个数不正确使wakeup失效后,利用destruct写入文件
2、bypass反序列化正则拦截逃逸:函数中存在"+"的判断,在对象名的长度前加上"+"号即可
3、字符逃逸CVE-2015-8562:类中不存在的属性也会进行反序列化,因字符数不对应出错,本身过滤函数使用后会变为2倍出错,故直接写入正确数量插入。(插入";i:1;s:8:"scanfsec";},长度为22,原序列添加22个x且长度加22*2=44个)