软件源代码漏洞及缺陷扫描技术15小时-2seay工具报告分析_第1页
软件源代码漏洞及缺陷扫描技术15小时-2seay工具报告分析_第2页
软件源代码漏洞及缺陷扫描技术15小时-2seay工具报告分析_第3页
软件源代码漏洞及缺陷扫描技术15小时-2seay工具报告分析_第4页
软件源代码漏洞及缺陷扫描技术15小时-2seay工具报告分析_第5页
已阅读5页,还剩64页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

源代码

及缺陷扫描技术如何参考自动化审核报告对源代码进行加固1Seay工具报告分析1232PHP下代码SQL注入产生和代码加固结束源代码 及缺陷扫描技术Seay工具报告分析Seay报告分析几个重要的php.ini选项命令注入eval注入客户端

植入XSSSQL注入跨

请求Session劫持文件上传3Seay报告分析几个重要的php.ini选项几个重要的php.ini选项7点击此处添加脚注信息Register

Globalsphp>=4.2.0,php.ini的register_globals选项的默认值预设为

Off,当register_globals的设定为On时,程序可以接收来自服务器的各种环境变量,包括表单提交的变量,而且由于PHP不必事先初始化变量的值,从而导致很大的安全隐患。几个重要的php.ini选项8点击此处添加脚注信息例1://check_admin()用于检查当前用户权限,如果是admin设置$is_admin变量为true,然后下面判断此变量是否为true,然后执行管理的一些操作。//ex1.php<?phpif

(check_admin()){$is_admin=

true;}if

($is_admin){do_something();}?>几个重要的php.ini选项点击此处添加脚注信息这一段代码没有将$is_admin事先初始化为Flase,如果register_globals为On,那么 直接提交h

/ex1.php?is_admin=true,就可以绕过

check_admin()的验证9几个重要的php.ini选项10点击此处添加脚注信息例2://ex2.php<?phpif

(isset($_SESSION["username"])){do_something();}else{echo"您尚未登录!";}?>几个重要的php.ini选项点击此处添加脚注信息当register_globals=On时, 提交h

/ex2.php?_SESSION[username]=dodo,就具有了此用户的权限。所以不管register_globals为什么, 都要记住,对于任何传输的数据要经过仔细验证,变量要初始化。11几个重要的php.ini选项12点击此处添加脚注信息安全模式PHP用来限制文档的存取,限制环境变量的存取,控制外部程序的执行。启用安全模式必须设置php.ini中的

safe_mode=On。几个重要的php.ini选项13点击此处添加脚注信息限制文件存取safe_mode_include_dir

="/path1:/path2:/path3“限制环境变量的存取

safe_mode_allowed_env_vars=string

指定PHP程序可以改变的环境变量的前缀,如:safe_mode_allowed_env_vars=PHP_,当这个选项的值为空时,那么php可以改变任何环境变量safe_mode_protected_env_vars

=

string用来指定php程序不可改变的环境变量的前缀几个重要的php.ini选项点击此处添加脚注信息3.限制外部程序的执行

safe_mode_exec_dir=string此选项指定的文件夹路径影响system.exec.popen.passthru,不影响s

_exec。disable_functions

=

string不同的函数名称用逗号隔开,此选项不受安全模式影响14几个重要的php.ini选项点击此处添加脚注信息magic

quotes用来让php程序的输入信息自动转义,所有的单引号,双引号,反斜杠和空字符,都自动被加上反斜杠进行转义magic_quotes_gpc=

On

用来设置magic

quotes

为On,它会影响HTTP请求的数据(GET.POST.

s)程序员也可以使用addslashes来转义提交的HTTP请求数据,或者用stripslashes来删除转义。15命令注入命令注入点击此处添加脚注信息PHP中可以使用下列函数来执行外部的应用程序或函数systemexecpassthrus

_exec17命令注入点击此处添加脚注信息string

system(string

command,

int

&return_var)command

要执行

令return_var

存放执行命令的执行后的状态值string

exec

(string

command,array

&output,

int&return_var)command

要执行

令output

获得执行命令输出的每一行字符串return_var

存放执行命令后的状态值void

passthru(string

command,

int

&return_var)command

要执行

令return_var

存放执行命令后的状态值strings _exec

(string

command)command

要执行

令18命令注入实例<?php$dir

=

$_GET["dir"];if

(isset($dir)){echo

"<pre>";system("ls-al

".$dir);echo

"</pre>";}?>提交h /ex1.php?dir=|

cat/etc/passwd提交以后,命令变成了system("ls-al|cat

/etc/passwd");点击此处添加脚注信息19eval注入eval注入点击此处添加脚注信息eval函数将输入的字符串参数当作PHP程序代码来执行。函数原型:mixed

eval(stringcode_str)eval注入一般发生在者能控制输入的字符串的时候。21eval注入点击此处添加脚注信息<?php$var

=

"var";if

(isset($_GET["arg"])){$arg

=

$_GET["arg"];eval("$var

=

$arg;");echo

"$var

=".$var;}?>/ex2.php?arg=phpinfo();漏当 提交

h洞就产生了22eval注入23点击此处添加脚注信息动态函数<?phpfunc

A(){dosomething();}funcB(){dosomething();}if(isset($_GET["func"])){$myfunc

=$_GET["func"];eval(

$myfunc.’();’);}?>eval注入点击此处添加脚注信息h程序员原意是想动态调用A和B函数,那 提交/ex.php?func=phpinfo

产生。24eval注入点击此处添加脚注信息防范方法尽量不要执行外部命令使用自定义函数或函数库来替代外部命令的功能使用escapes

arg函数来处理命令参数使用safe_mode_exec_dir指定可执行文件的路径25客户端 植入客户端 植入点击此处添加脚注信息客户端 植入(Script

Insertion),是指将可以执行的到表单、、动画或超

者所植入的文字等对象内。当用就会被执行。进而户打开这些对象后,开始

。27客户端 植入点击此处添加脚注信息可以被用作1.<script>植入的HTML

一般包括以下几种:标记的javascript和vbscript等页面 程序,在<script>

内可以指定js程序代码,也可以在src属性内指定js文件的URL路径。<object>

标记的对象。这些对象是java

applet、多文件和ActiveX控件等。通常在data属性内指定对象的URL路径。<embed>

标记的对象。这些对象是多

文件。例如:swf文件。通常在src属性内指定对象的URL路径。<applet>

标记的对象。这些对象是java

applet,通常在

codebase属性内指定对象的URL路径。<form>

标记的对象。通常在action属性内指定要处理表单数据的web应用程序的URL路径。28客户端 植入点击此处添加脚注信息客户端 植入的 步骤1.

者 普通用户后登陆

。2.打开留言页面,的js代码。其他用户登录

(包括管理员),浏览此留言的内容。隐藏在留言内容中的js代码被执行, 成功。29客户端 植入点击此处添加脚注信息<script>while(1){windows.open();}</script>无限弹框<script>location.href=”htt

”;</script>跳转 页面或者使用其他自行构造的js代码进行30客户端 植入点击此处添加脚注信息防范的方法一般使用htmlspecialchars函数来将特殊字符转换成HTML编码。函数原型:string

htmlspecialchars

(string

string,

int

quote_style,stringcharset)string

是要编码的字符串quote_style

可选,值可为

PAT、ENT_QUOTES、ENT_NOQUOTES,默认值

PAT,表示只转换双引号不转换单引号。ENT_QUOTES,表示双引号和单引号都要转换。ENT_NOQUOTES,表示双引号和单引号都不转换charset

可选,表示使用的字符集31客户端 植入点击此处添加脚注信息示例<?php

echo

htmlspecialchars(nl2br($row['question']),ENT_QUOTES);

?>32XSSXSS点击此处添加脚注信息XSS(Cross

Site

Scripting),意为跨

,为了和样式表css(Cascading

Style

Sheet)区别,缩写为XSS。跨站 是通过在网页中加入

代码,当

者浏览网页时

代码会被执行或者通过给管理员发信息

的方式诱使管理员浏览,从而获得管理员权限, 。攻击者利用跨站请求

能够轻松地强迫用户的浏览器发出非故意的HTTP请求,如诈骗性的电汇

请求、修改口令和的内容等请求。34XSS点击此处添加脚注信息跨站的一般步骤:1、 者以某种方式发送xss的http

给目标用户;2、目标用户登录此,在登陆期间打开了者发送的xss

;3、 执行了此xss;4、目标用户页面跳转到 者的

, 者取得了目标用户的信息;5、

者使用目标用户的信息登录

,完成

。35XSS点击此处添加脚注信息者可以构当有存在跨站造类似htmethod=”POST”>,跨站的程序出现的时候,/search.php?key=”进去了36XSS防御方法<?phpif

(isset($_POST['name'])){$str=trim($_POST['name']); //清理空格$str=strip_tags($str); //过滤html$str=htmlspecialchars($str); //将字符内容转化为html实体$str

=

addslashes($str);echo

$str;}?>点击此处添加脚注信息37SQL注入SQL注入点击此处添加脚注信息SQL注入(SQL

Injection),是

者在表单中提交精心构造的sql语句,改动原来的sql语句,如果web程序没有对提交的数据经过检查,那么就会造成sql注入。39SQL注入点击此处添加脚注信息SQL注入1、

者的一般步骤:有SQL注入 的站点,寻找注入点;2、 者构造注入语句,注入语句和程序中的SQL语句结合生成新的sql语句;3、新的sql语句被提交到数据库中执行处理;4、数据库执行了新的SQL语句,

SQL注入

。40SQL注入点击此处添加脚注信息$query

=

"select

*

from

postmessage

whereid

=".$_GET["id"];$result

=mysql_query($query)ordie("执行ySQL查询语句失败:".mysql_error());提交and1=1,语句变成select*

from

postmessage

where

id=71

and

1=1

这语句前值后值都为真,and以后也为真,返回查询到的数据提交and1=2,语句变成select*

from

postmessage

where

id=71

and

1=2

这语句前值为真,后值为假,and以后为假,查询不到任何数据41SQL注入点击此处添加脚注信息防范方法1、整型参数:运用intval函数将数据转换成整数函数原型:int

intval(mixed

var,int

base)var是要转换成整形的变量base,可选,是基础数,默认是1042SQL注入点击此处添加脚注信息2、浮点型参数:运用floatval或doubleval函数分别转换单精度和双精度浮点型参数函数原型:int

floatval(mixed

var)int

doubleval(mixedvar)var是要转换的变量3、字符型参数:运用addslashes函数43SQL注入点击此处添加脚注信息//执行mysql查询语句$query

=

"select

*

from

postmessage

whereid

=".intval($_GET["id"]);$result

=mysql_query($query)or

die("执行ySQL查询语句失败:".mysql_error());44SQL注入点击此处添加脚注信息if(get_magic_quotes_gpc()){$var

=

$_GET["var"];}else{$var

=addslashes($_GET["var"]);}45跨 请求跨 请求点击此处添加脚注信息CSRF(Cross

SiteRequest

Forgeries),意为跨请求 ,也有写为XSRF。

者 目标用户的HTTP请求,然后此请求发送到有CSRF

, 执行此请求后, 跨站请求

。 者利用隐蔽的HTTP连接,让目标用户在不注意的情况下单击这个 ,由于是用户自己点击的,而他又是合法用户拥有合法权限,所以目标用户能够在 内执行特定的HTTP

,从而达到 者的目的。47跨 请求点击此处添加脚注信息例如:某个购物商品时,采用h/buy.php?item=watch&num=1,item参数确定要 什么物品,num参数确定要数量,如果攻击者以隐藏的方式发送给目标用户 ,那么如果目标用户不 以后, 的数量就成了1000个。48跨 请求include_once("dlyz.php");//dlyz.php用户验证权限,当权限是admin的时候方可删除留言include_once("../conn.php");$del=$_GET["del"];$id=$_GET["id"];if($del=="data"){$ID_Dele=

implode(",",$_POST['adid']);$sql="deletefrom

book

where

id

in

(".$ID_Dele.")";mysql_query($sql);}点击此处添加脚注信息49跨 请求else{$sql="delete

from

book

where

id=".$id;//传递要删除的留言IDmysql_query($sql);}mysql_close($conn);echo

"";echo"alert(‘删除成功!’);";echo

"

location=’book.php’;";echo

"";点击此处添加脚注信息50跨 请求点击此处添加脚注信息利用方法:使用普通用户留言(源代码方式),内容为"delbook.php?id=2"/>"delbook.php?id=3"

/>"delbook.php?id=4"

/>"delbook.php?id=5"

/>4张

分别删除4个id留言,然后

返回首页浏览看,没有什么变化。。 显示不了51跨 请求点击此处添加脚注信息现在

再用管理员账号登陆后,来刷新首页,会发现留言就剩一条,其他在 中指定的ID号的留言,全部都被删除。者在留言中 隐藏的,此 具有删除留言的作用,而 者自己这些的时候,是不具 限的,所以看不到任何效果,但是当管理员登陆后,查看此留言,就会执行隐藏的 ,而他的权限又是足够大的,从而这些留言就被删除了52跨 请求点击此处添加脚注信息防范方法防范CSRF要比防范其他 更加 ,因为CSRF的HTTP请求虽然是

者 的,但是却是由目标用户发出的,一般常见的防范方法有下面几种:1、检查网页的来源2、检查内置的隐藏变量3、使用POST,不要使用GET53Session劫持Session劫持点击此处添加脚注信息服务端和客户端之间是通过session(会话)来连接沟通。当客户端的浏览器连接到服务器后,服务器就会建立一个该用户的session。每个用户的session都是独立的,并且由服务器来 。每个用户的session是由一个独特的字符串来识别,成为sessionid。用户发出请求时,所发送的http表头内包含sessionid的值。服务器使用http表头内的sessionid来识别时哪个用户提交的请求。55Session劫持点击此处添加脚注信息session保存的是每个用户的个人数据,一般的web应用程序会使用session来保存通过验证的用户账号和 。在转换不同的网页时,如果

需要验证用户 ,就是用session内所保存的账号和 来比较。session的生命周期从用户连上服务器后开始,在用户关掉浏览器或是注销时用户session_destroy函数删除session数据时结束。如果用户在20分钟内没有使用计算机的动作,session也会自动结束。56Session劫持点击此处添加脚注信息一旦获取到session

id, 者可以利用目标用户的身份来登录 ,获取目标用户的操作权限。1)者获取目标用户session

id的方法::尝试各种session

id,直到 为止;计算:如果session

id使用非随机的方式产生,那么就有可能计算出来;窃取:使用网络截获,xss

等方法获得。57Session劫持点击此处添加脚注信息//index.phpsession_start();//打开Session访客的Session

ID

是:echo

session_id();访客:echo

htmlspecialchars($_GET["user"],ENT_QUOTES);book商品的数量:echohtmlspecialchars($_SESSION["book"],

ENT_QUOTES);如果登录成功,使用$_SESSION["username"]保存账号$_SESSION["password"]

保存#_SESSION["book"]

保存 商品数目58Session劫持点击此处添加脚注信息开始//attack.phpsession_start();//打开Sessionecho"目标用户的Session

ID是:".session_id()."";

echo"目标用户的username是:".$_SESSION["username"]

.

"";echo"目标用户的password是:".$_SESSION["password"].

"";//将book的数量设置为2000$_SESSION["book"]

=

2000;59Session劫持点击此处添加脚注信息提交mhgr9nsg45

此ID为获取到的客户session

id,刷新客户页面以后 的商品变成了200060Session劫持点击此处添加脚注信息session固定可以使用把session

id发给用户的方式,来完成把此 发送给dodo这个用户显示然后 者再后,客户页面刷新,发现商品数量已经成了200061Session劫持62点击此处添加脚注信息防范方法1、定期更改session

id函数bool

session_regenerate_id([bool

delete_old_session])delete_old_session为true,则删除旧的session文件;为

false,则保留旧的session,默认false,可选在index.php开头加上session_start();session_regenerate_id(TRUE);这样每次从新加载都会产生一个新的session

idSession劫持点击此处添加脚注信息2、更改session的名称session的默认名

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论