• 代码审计基础常识记录


    代码审计感觉学起来比较痛苦,但是木的办法,要想找到自己的0day,这一道坎感觉是无法越过了。或许也能加深我们对于漏洞原理的理解。

    代码审计前的准备

    1、熟悉网站结构,大体框架
    2、入口文件:index.php admin.php等等
    3、配置文件config.php、php.ini、user.ini,httped.conf
    4、过滤功能:就是对于参数获取之后有没有什么处理,比如替换、删除等等

    三种审计方法

    1、通读全部代码:公司企业使用的,比较费时,对于小的、代码量少的也可使用
    2、敏感函数查找分析:找到敏感函数,然后看看他的来源和处理过程,有没有人为可控的参数传入;我感觉我们私人审计可能这个方法用的会多点
    3、定向功能分析:根据程序的业务逻辑来审计(据说大佬都是用的这个方法)
    常见业务功能漏洞:
    程序初始安装、站点信息泄露、文件上传管理、登录认证权限管理、数据库备份恢复、找回密码、验证码

    PHP配置文件的分析

    几个重要的php.ini选项:

    1、Register Globals = Off  默认值预设为 Off(下面写的都是基本默认的)设定为 On 时,程序可以接收来自服务器的各种环境变量,包括表单提交的变量,容易产生变量覆盖(视情况,但是全局变量关掉会很麻烦)

    2、display_errors = On 错误等级决定是否可能泄露绝对路径(视情况,错误全关影响调试) E_ALL 最高级别,展示所有错误信息,审计时最好打开,网站上线时关闭

    3、short_open_tag = On 默认可用短标签 短标签有可能可以帮助我们渗透时免查、免杀;这个设置可以将<?php?>缩写为<??>;<?echo缩写为<?= 

    4、safe_mode = Off 默认关闭  安全模式,PHP 用来限制文档的存取、限制环境变量的存取,限制system()等函数执行 以及敏感文件的读取

    5、safe_mode_exec_dir = /var/www/html  这个目录下才可以执行(高版本PHP已废弃)

    6、disable_classes =      disable_functions = opendir,readdir,scandir,fopen,unlink   禁用某些类、函数 在php.ini设置

    7、file_uploads = on upload_max_filesize = 8M 设置上传及最大上传文件大小 

    8、upload_tmp_dir = 文件上传临时目录 Linux是/tmp windows是C:WindowsTemp

    9、open_basedir = .:/tmp/  用户访问目录限制  默认不配置是空的 一般都是只能访问网站目录  此配置可有效防止PHP木马跨站运行;Linux使用:分隔    windows使用;分隔

    10、magic quotes  魔术引号(宽字节注入大家不会陌生)   magic_quotes_gpc = On   5.4.0移除   虽然移除,但是这个功能很可能被开发者自定义使用

    11、open_base_dir 禁止使用目录以外的文件操作,有效的消除文件包含

    12、expose_php  设为 Off ,这样 php 不会在 http 文件头中泄露信息

    13、allow_url_fopen = On  一直都是开启的  可以远程打开url文件,但是这个选项不是执行远程文件的

    14、allow_url_include = Off 是否允许远程文件包含(PHP5.2以后默认关闭此功能)允许include、include_once等文件包含函数执行远程文件,所以这个选项比较重要,如果打开远程包含一句话木马就比较可怕了;关于远程文件包含推荐先知社区的伪协议文件包含文章

    15、log_errors = On  记录错误日志得就带上吧 

    其他:

    16、session.cookie_httponly = ON 时,客户端脚本(JavaScript等)无法访问该 cookie,打开该指令可以有效预防通过 XSS 攻击劫持会话ID

    17、session.cookie_domain 是否只包含本域,如果是父域,则其他子域能够获取本域的cookies

    18、如果使用 HTTPS,那么应该设置 session.cookie_secure=ON,确保使用 HTTPS 来传输 cookies

    各种漏洞的敏感函数

    1. 跨站脚本漏洞
    2. 文件包含(文件泄露)
    3. 文件操作(管理)
    4. 命令(代码)执行:命令执行和代码执行的原理其实有细微差别:详见
    5. SQL注入
    6. 变量覆盖
    7. 会话安全
    8. 特殊函数
    9. SSRF漏洞就找一些参数和功能点吧

    1、跨站脚本漏洞(就是直接echo能输出链接的诱骗别人去点的那种):

    echo、print、printf、vprintf、<%=$test%>

    2、文件包含(文件泄露):

    include、include_once、require、require_once、show_source、highlight_file、readfile、file_get_contents、fopen、file

    3、文件操作(管理):

    copy、file_get_contents、file_put_contents、file、fopen、move_uploaded_file、readfile、rmdir、rename、unlink&delete、fwrite、fread、chmod、fgetc、fgetcsv、fgets、fgetss、

    4、命令(代码)执行:

    eval():把给定的字符串作为PHP代码执行

    preg_replace():当与"/e"开关一起使用时,替换字符串将被解释为PHP代码(这个地方可能会不太好理解

    exec()、shell_exec() proc_open()、pentl_exec()  passthru()、 escapeshellcmd()

    passthru():执行指定命令,返回所有结果到客户浏览器 

     `` (反引号)  执行指定命令,返回所有结果到一个数组 

    system() 同passthru(),但是不处理二进制数据 

    popen()  执行指定的命令,把输入或输出连接到PHP文件描述符

    assert断言也具有把字符串当做代码执行的效果

    call_user_func、call_user_func_array、create_function 代码注入(闭合+exp+注释掉后面部分)

    array_walk()、 array_map()、array_filter()、usort()、ob_start()

    5、SQL注入:

    insert、delete、update、select(SQL语句查询的地方,看看有没有对变量过滤,有没有可乘之机)

    6、变量覆盖:

    $$(这个可能也不太好理解)、extract()、parse_str、mb_parse_str、import_request_variables、Register_globals=ON 时,GET 方式提交变量会直接覆盖

    7、会话安全:

    HTTPOnly 设置、domain 设置、path 设置设置设置、 cookies 持续时间 、 secure 设置、session 固定

    8、特殊函数:

    配置相关:ini_get()成功时返回配置选项的值

    数字判断:is_numeric()数字或数字字符串返回true,仅仅使用is_numeric()而不使用intval转换可能插入16进制字符串到数据库,造成二次注入

    变量覆盖:parse_str()

    列目录:glob()

    无参数函数获取信息:
    get_defined_vars() //返回包含所有定义的变量列表的多维数组,包括环境变量、服务器变量、用户自定义
    get_defined_constants()//返回当前所有已定义的常量名和值
    get_defined_functions() //返回一个包含所有已定义函数列表和多维数组
    get_include_files() //返回包含所有文件的文件名

    9、SSRF漏洞就找一些参数和功能点吧

    函数:curl等

    参数:share、wap、url、link、src、source、target、u、3g、display、sourceURl、imageURL、domain .......

    功能点:图片链接、分享、收藏下载

    最后附一张审计学习中比较全面的思维导图

  • 相关阅读:
    十三.基础邮件服务、parted分区工具、交换分区、链路聚合
    十二.虚拟Web主机
    十一.简单MariaDB数据库的管理
    十.iSCSI网络磁盘
    九.配置SMB共享(Samba共享)
    八.防火墙相关操作
    bzoj3132
    bzoj4753
    codeforces round #418 div 2
    ural1519
  • 原文地址:https://www.cnblogs.com/Qiuzhiyu/p/13068639.html
Copyright © 2020-2023  润新知