【靶场:7题 配备的靶场叫 绕过防护getshell】
一、WAF:Web应用防火墙
是通过执行一系列针对http/https的安全策略来专门为Web应用提供保护的一款产品。
工作在应用层,对来自Web应用程序客户端的各类请求进行内容检测和验证。
二、post和报错注入
1、什么是post注入
post传参,注入点在post数据包中。
2、Burp安装配置【burpsuite】
原理:浏览器和相关应用程序的中间 拦截、修改、重放数据包的 代理工具【中间插一杠子】。
拦截IP+port传的数据包。
工具:burpsuite_community_v1.7.35.jar
使用:如上Burp所在目录,按住Shift键,鼠标右击,选择“在此处打开命令窗口(W)”,如下图所示:
如上图所示,点击“在此处打开命令窗口(W)”后,在命令窗口中,
输入 java -jar burpsuite_community_v1.7.35.jar,运行Burp了,操作如下图所示:
burpsuite pro v2.1.jar 需要1.8版本的jdk
使用:需要使用破解版(loader-keygen)去调用本体版(burpsuite pro)
直接双击破解版的jar文件就可运行,若运行不成功,可以在cmd中java -jar 破解版的jar。
(1)、Burp设置代理:
打开后,Proxy代理标签页的Options属性,默认拦截的IP+port。
(2)、浏览器设置代理:
方式一:打开火狐浏览器,选项中搜索代理,设置为手动代理(http代理,IP+port)。
方式二:打开火狐浏览器,扩展和主题,搜索proxy,选择 FoxyProxy Standard,安装完成后,会显示在浏览器的右上角,点击选项--》点击添加,新增一个代理,起个名字,配置代理。
(3)、抓包
浏览器、Burp代理配置好后,Burp的Proxy代理标签页的Intercept拦截属性:
Intercept is on是开始抓包,Intercept is off是关闭抓包;
Forward:对抓到的包进行放行;
Drop:直接丢弃抓到的包,客户端得不到响应;
Action:对找到的包进行处理【点击可以选择具体如何处理】。
如:Send to Repeater,他会把当前抓的包,复制一份放到Repeater转发器标签页中,以便多次尝试报错点,Repeater转发器中的Go表示放行该包。
在如下页面,可以多次尝试发送该post请求,判断是否存在注入点,给test后输入',是否报错,再输入-- a,再次显示是否正常。【注意在mysql中--空格,后面可以跟解释内容、或备注内容】。
接着判断字段个数,order by 5、order by 6,哪个开始报错了,说明此时超过字段数了,最后判断出来有5个字段,没有回显点,联合注再练习下,拼装user=test' union select 1,2,3,4,5查询下,发下union、select被过滤掉了,如下图所示:
尝试拼接出被过滤的union、select关键字,如 user=test' un union ion seselectlect 1,2,3,4,5
——对union进行了过滤,组装出来一个union
——对select进行了过滤,组装出来一个select
如下图所示:
注意:浏览器代理端口、Burp代理端口两边设置需要保持一致,如本文的8888,否则开启代理后,访问页面,报错:代理服务器拒绝链接,如下图所示:
(4)、https请求,CA证书配置:
https请求时,需要安装证书,确认Burp开启时,在浏览器中输入 IP:port 访问后,点击右上角的 CA Certificat 下载证书,证书如何安装可以百度一下。
3、POST注入、报错注入
报错注意原理1:windows资源管理器,非法路径报错。
【windows资管管理其中,路径中拼接~或!会报错(即windows文件目录中,不包含~或!时会报错),如下图所示】
post报错注入原理2:将数据库报的错,以非法路径报错的形式拼接展示出来。
数据库函数 extractvalue(目标xml文档,xml路径):对XML文档进行查询的函数,且xml路径出现非法路径时会报错,如extractvalue('test.xlm','D::\tools\~')或select extractvalue(1,0x7e)会报错。
注意: 0x7e 是~的十六进制
concat(str1,str2,...):将多个字符串链接成一个字符串,如: select concat('~',(select database()))。
报错回显如下语句:
select extractvalue(1,concat('~',(select database())))
select extractvalue(1,concat(1,(select database())))
如下报错获取用户名:
user=test' a and nd extractvalue(1,concat(0x7e,(seselectlect admin_name fr from om bees_admin),0x7e)) -- a
如下报错获取密码:
user=test' a and nd extractvalue(1,concat(0x7e,(seselectlect admin_password fr from om bees_admin),0x7e)) -- a
获取到的密码是md5密文,解密时发现只有31位,发现extractvalue报错显示内容最多显示32位,本身的~不可缺少!!,后面拼接了0-9,a-z尝试解密。
注意:and也被过滤掉了,所以这里a and nd组装了下and,from也被过滤掉了,fr from om组装了下from。
updataxml()和extractvalue()作用类似,提供数据库报错显示(数据库报错回显点)
靶场练习注意点:从传送门传过去后是网站首页,有订单、留言是post访问,但尝试后没有报错点;试着给网站首页访问url后面拼接了/admin后,跳转到登录页面,隐藏的post的请求,尝试后为字符型报错点。