专栏首页渗透云笔记代码审计安全实践

代码审计安全实践

第一次写文章,希望大牛们轻喷

一、代码审计安全

代码编写安全:

程序的两大根本:变量与函数

漏洞形成的条件:可以控制的变量“一切输入都是有害的 ”

变量到达有利用价值的函数(危险函数)“一切进入函数的变量是有害的”

漏洞的利用效果取决于最终函数的功能,变量进入什么样的函数就导致什么样的效果。

变量安全:

秉承一个原则 “一切输入都是有害的”

预定义变量[常规外部提交的变量]:

除了$_GET,$_POST,$_Cookie的提交之外,还来源于$_SERVER,$_ENV, $_SESSION 等register_globals = on [未初始化的变量] 当On的时候,传递过来的值会被直接的注册为全局变量直接使用,而Off的时候,我们需要到特定的数组里去得到它,PHP » 4.20 默认为off

变量覆盖[未初始化及覆盖前定义的变量]:

如:$$使用不当、遍历初始化变量、 extract() 、parse_str()等

变量的传递与存储[中转的变量]:

存储于数据库、文件[如配置、缓存文件等

函数安全:

“什么样的函数导致什么样的漏洞”

文件包含包含漏洞:require、include、require_once、include_once

代码执行执行任意代码漏洞:eval()、assert()、preg_replace()、create_function()

命令执行执行任意命令漏洞:exec()、passthru()、proc_open()、shell_exec()、system()、popen()

文件系统操作文件(目录)读写等漏洞:file_get_contents、file_put_contents、fopen、readfile

数据库操作SQL注入漏洞:select from、mysql_connect、mysql_query、mysql_fetch_row 数据显示 XSS漏洞:print、print_r、echo、print、sprintf、die、Var_dump、var_export

二、代码审计和漏洞验证:

环境:

PHP.ASP等语言环境

Apache.Tomcat.Ngin等中间件

Mysql.Oracle等数据库

工具:

Notepad++、Sublime等代码编辑器

Seay.RIPS等代码审计工具

Burp等漏洞验证工具

三、常见漏洞挖掘与防范:

根据功能点定向审计,例如在文件上传功能模块、文件管理功能模块、登录功能等模块进行漏洞挖掘验证。

通读全部代码

四、安全编程规范:

1.SQL注入防护

(1)采用预编译,在Java Web开发一般在采用预处理,在sql语句中放入?占位符,然后通过后面的传参传递参数,可在一定程度上防止SQL注入。

(2)过滤函数和类, 使用pdo的prepare方式来处理sql查询,但是当PHP版本<5.3.6之前还是存在宽字节SQL注人漏洞,原因在于这样的查询方式是使用了PHP本地模拟prepare,再把完整的SQL语句发送给MySQL服务器,并且有使用setnames'gbk'语句,所以会有PHP和MySQL编码不一致的原因导致SQL注人

(3) GPC/RUTIME魔术引号

通常数据污染有两种方式:

1、是应用被动接收参数,类似于GET、POST等;

2、是主动获取参数,类似于读取远程页面或者文件内容等。

所以防止SQL注入的方法就是要守住这两条路

→ magic_ quotes_ gpc 负责对GET、POST、COOKIE的值进行过滤。

→ magic_ quotes_ runtime 对从数据库或者文件中获取的数据进行过滤。

2. 反引号命令执行

反引号(`)也可以执行命令,它的写法很简单,实际上反引号(`)执行命令是调用的shell_exec()函数。

这段代码正常执行的情况下是会输出当前用户名的,而我们在php.ini里面吧PHP安全模式打开一下,再重启下WebServer从新加载PHP配置文件,再执行这段代码的时候,我们会看到下面这个提示:

Waring:shell_exec() [function.shell_exec]: Cannot execute using backquotes inSafe Mode in D:\www\test\1.php on line 2

这个提示说明反引号执行命令的方式是使用的shell_exec()函数。

3.命令执行漏洞防范规范:

(1) 命令防注入函数: PHP在SQL防注入上有addslashes()和mysql_[real_]escape_string()等函数过滤SQL语句,输人一个string类型的参数,为要过滤的命令,返回过滤后的sting类型的命令,过滤后的string类型的命令,过滤的字符为

’&’、’;’、’|’、’*’、’?’、’~’、’<’、’>’、’^’、’(’、’)’、’[’、’]’、’{’、’}’、’$’、’\’、’\x0A’、’\xFF’、’%’、单引号和双引号仅仅在不成对的时候被转义。

(2) 参数白名单: 参数白名单方式在大多数由于参数过滤不严产生的漏洞中都很好用是一种通用修复方法,我们之前已经讲过,可以在代码中或者配置文件中限定某些参数,在使用的时候匹配一下这个参数在不在这个白名单列表中,如果不在则直接显示错误提示即可。

本文分享自微信公众号 - 渗透云笔记(shentouyun)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-11-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 使用 Ghidra 分析 phpStudy 后门

    这次事件已过去数日,该响应的也都响应了,虽然网上有很多厂商及组织发表了分析文章,但记载分析过程的不多,我只是想正儿八经用 Ghidra 从头到尾分析下。

    Seebug漏洞平台
  • Android 技能树 — 最全的AndroidVideoCache解析

    因为最近项目正好涉及到音乐播放器的音频缓存,当然我们要做的第一步当然是百度或者谷歌常用的缓存库,起码我是不愿意自己写的,多麻烦!!! 百度以后:

    青蛙要fly
  • 百度搜索高级语法

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

    周小董
  • 一处反序列化任意文件写入的漏洞分析

    近日在审计某 CMS 时,发现一处反序列化任意写入文件的操作。其中的场景蛮有意思的,将其简化抽取出来做个 CTF 的题目丢给学弟(比较简单),在此做个记录。

    信安之路
  • [视频教程] 基于redis的消息队列实现与思考

    使用redis的list列表来实现消息队列功能,相信大家都听过消息队列,但是在业务中可能并没有真正去使用它。在公司项目中正好有个场景使用到了消息队列,因此就来说...

    陶士涵
  • IT兄弟连 HTML5教程 CSS3揭秘 CSS规则的组成

    CSS和HTML一样都是由W3C制定的标准,本章中介绍的特性和功能还是来源于CSS1和CSS2(CSS2是根据CSS1扩展的)。W3C也有新的版本更新,称为CS...

    ITXDL
  • 一个100%Go语言的Web-Term-SSH 堡垒机项目

    Docker pull docker pull mojotvcn/sshfortress

    landv
  • Linux yum 命令

    yum (全称Yellow dog Update)命令是 RedHat 和 Fedora 以及 SUSE 中基于 rpm 软件包管理器。全称 Yellowdog...

    用户1679793
  • Joomla 3.4.6-RCE漏洞复现

    Joomla是一套全球有名的CMS系统,基于PHP语言加上MySQL数据库所开发出来的WEB软件系统,目前最新版本是3.9.12。可以在多种不同的平台上部署并且...

    墙角睡大觉
  • 测试开发进阶(二十九)

    rest_framework.generics.ListCreateAPIView

    zx钟

扫码关注云+社区

领取腾讯云代金券