代码审计安全实践

一、代码审计安全

代码编写安全:

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

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

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

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

变量安全:

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

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

除了$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类型的命令,过滤的字符为

   网络安全入门学习路线

其实入门网络安全要学的东西不算多,也就是网络基础+操作系统+中间件+数据库,四个流程下来就差不多了。

1.网络安全法和了解电脑基础

其中包括操作系统Windows基础和Linux基础,标记语言HTML基础和代码JS基础,以及网络基础、数据库基础和虚拟机使用等...

别被这些看上去很多的东西给吓到了,其实都是很简单的基础知识,同学们看完基本上都能掌握。计算机专业的同学都应该接触了解过,这部分可以直接略过。没学过的同学也不要慌,可以去B站搜索相关视频,你搜关键词网络安全工程师会出现很多相关的视频教程,我粗略的看了一下,排名第一的视频就讲的很详细。 当然你也可以看下面这个视频教程仅展示部分截图: 学到http和https抓包后能读懂它在说什么就行。

2.网络基础和编程语言

3.入手Web安全

web是对外开放的,自然成了的重点关照对象,有事没事就来入侵一波,你说不管能行吗! 想学好Web安全,咱首先得先弄清web是怎么搭建的,知道它的构造才能精准打击。所以web前端和web后端的知识多少要了解点,然后再学点python,起码得看懂部分代码吧。

最后网站开发知识多少也要了解点,不过别紧张,只是学习基础知识。

等你用几周的时间学完这些,基本上算是具备了入门合格渗透工程师的资格,记得上述的重点要重点关注哦! 再就是,要正式进入web安全领域,得学会web渗透,OWASP TOP 10等常见Web漏洞原理与利用方式需要掌握,像SQL注入/XSS跨站脚本攻击/Webshell木马编写/命令执行等。

这个过程并不枯燥,一边打怪刷级一边成长岂不美哉,每个攻击手段都能让你玩得不亦乐乎,而且总有更猥琐的方法等着你去实践。

学完web渗透还不算完,还得掌握相关系统层面漏洞,像ms17-010永恒之蓝等各种微软ms漏洞,所以要学习后渗透。可能到这里大家已经不知所云了,不过不要紧,等你学会了web渗透再来看会发现很简单。

其实学会了这几步,你就正式从新手小白晋升为入门学员了,真的不算难,你上你也行。

4.安全体系

不过我们这个水平也就算个渗透测试工程师,也就只能做个基础的安全服务,而这个领域还有很多业务,像攻防演练、等保测评、风险评估等,我们的能力根本不够看。

所以想要成为一名合格的网络工程师,想要拿到安全公司的offer,还得再掌握更多的网络安全知识,能力再更上一层楼才行。即便以后进入企业,也需要学习很多新知识,不充实自己的技能就会被淘汰。

从时代发展的角度看,网络安全的知识是学不完的,而且以后要学的会更多,同学们要摆正心态,既然选择入门网络安全,就不能仅仅只是入门程度而已,能力越强机会才越多。

尾言

因为入门学习阶段知识点比较杂,所以我讲得比较笼统,最后联合CSDN整理了一套【282G】网络安全从入门到精通资料包,需要的小伙伴可以点击链接领取哦! 网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!

猜你喜欢

转载自blog.csdn.net/qq_53058639/article/details/129648723