您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > Web编程常见漏洞与检测
Web编程常见漏洞与检测By:Neeao2008.9.21Web漏洞检测白盒检测对检测者的要求:——能读懂用此语言写的程序——明白漏洞成因——漏洞挖掘经验常用的web脚本语言:Asp/Php/Jsp/asp.net常见的web漏洞sql注入文件上传cookie欺骗XSS攻击文件包含其他Sql注入及其危害所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。通过递交参数构造巧妙的SQL语句,从而成功获取想要的数据。分为字符型注入和数字型的注入,由于编程语言不同,所存在的注入类型也不同。危害:--非法查询其他数据库资源,如管理员帐号。--执行系统命令--获取服务器root权限Sql注入原理Test.asp文件代码片段:sqlStr=“select*fromn_userwhereusername=‘”&username&”’andpassword=‘“&password&”’rs=conn.execute(sqlStr)正常的查询:test.asp?username=test&password=123sqlStr=“select*fromn_userwhereusername=‘test’andpassword=‘123’“使password=123‘or‘1’=‘1:Sql语句到数据库后:sqlStr=“select*fromn_userwhereusername=‘test’andpassword=‘123’or‘1’=‘1’“Or‘1’=‘1’始终成立。Asp表现存在数字型和字符型注入。(A)数字型字段=51Select*from表名where字段=51构造参数:ID=49And[查询条件]生成语句:Select*from表名where字段=49And[查询条件](B)字符型的另一种形式搜索语句:Select*from表名where字段like’%关键字%’构造参数:keyword=’and[查询条件]and‘%25’=’生成语句:Select*from表名where字段like’%’and[查询条件]and‘%’=’%’Asp注入的预防对于用户端输入的任意字符,包括GET提交,POST提交,Cookie提交,SERVER提交的都需要做严格过滤。对于数字型参数判断是否为数字:可用函数isNumeric来判断,返回值为true和false。对于字符型参数过滤单引号,使其无法闭合当前sql语句的单引号。例外:base64编码Sql通用防注入Php中的表现Php的魔术引号(magic_quotes_gpc)。php.ini-dist默认是开启此功能。如果安装php时使用此文件,将不会产生字符型注入,主要是数字型注入。数字型注入:select*fromguesswhereid=“.$id.”select*fromguesswhereid=$idGPC不起作用的情况数组$userid=$_POST[userid'];for($i=0;$icount($userid);$i++){$query=“select*fromuserwherei_hid='.$userid[$i].';编码函数引起base64_decode,base64编码后的单引号:Jw==mysql处理GBK编码字符%bf%27导致单引号被绕过的问题。其他数据库,如mssql。对于转义符反斜杠作为字符处理的。select*fromtestwheretitle='aaa\'or'1'='1‘Php注入的预防(一)确认GPC开启,若没开启则用addslashes函数过滤之,如下代码。if(!get_magic_quotes_gpc()){$lastname=addslashes($_POST['lastname']);}else{$lastname=$_POST['lastname'];}对于数字型参数可使用intval或floatval强制转换为数字型。注意mysql的版本以及默认字符集,Mysql4.1字符集连接字符串:mysql_query(SETcharacter_set_connection=$dbcharset,character_set_results=$dbcharset,character_set_client=binary;);Php注入的预防(二)Php5以上版本Mysqli扩展预防,参数化查询$city=Amersfoort;/*createapreparedstatement*/$stmt=$mysqli-prepare(SELECTDistrictFROMCityWHEREName=?)$stmt-bind_param(s,$city);$stmt-execute();$stmt-bind_result($district);$stmt-fetch();printf(%sisindistrict%s\n,$city,$district);$stmt-close();}Jsp表现由于java语言是强类型语言,所有变量定义前必须声明其类型,因而仅存在字符型的注入。字符型注入实例:Stringsql=select*fromtb_namewherename='+varname+'andpasswd='+varpasswd+';stmt=conn.prepareStatement(sql);构造参数varpasswd值为:'or'1'='1Sql语句经过解析后将是:select*fromtb_name='随意'andpasswd=''or'1'='1';Jsp预防采用jdbc的prepareStatement查询数据库,并且sql语句中不出现参数,如:sqlStr=“selectidfrominfowherecity=?andopen=?orderbyiddesc”;stmt=conn.prepareStatement(sqlStr);stmt.setString(1,city);stmt.setString(2,var1);Asp.net表现开发语言常用的有:vb.net和C#,都属于强类型语言,因而只存在字符型注入。注入原理,与asp的字符型注入一样。Asp.net注入预防使用Ado.net的参数化查询。strSQL=SELECT*FROMOrdersWHERECustomerID=@CustomerID;SqlCommandcmd=newSqlCommand(strSQL,cn);//创建一个sqlcommand对象。//创建新参数,参数绑定cmd.Parameters.AddWithValue(@CustomerID,ALFKI);sql注入的检测简单流程获取源码Asp/PhpJsp/asp.net反编译搜索sql查询语句存在变量语句Select/update/insert/delete查找变量来源/是否过滤过滤函数是否安全存在注入与否Sql语句一样,查询方法也一样。文件上传漏洞利用当前系统已有的上传功能,比如文件上传,图像上传等的漏洞来上传任意文件或者webshell。危害:直接上传webshell到服务器,甚至获取服务器root权限。各种语言表现大同小异。Asp上传漏洞表现经典的”\0”上传任意后缀文件。假设:filename=c:\nc.exe.bmp‘Checkthefileextensionifright(tFile,4)“.bmp”thenexitsubtFile=tFile&.bmpSetFSO=Server.CreateObject(Scripting.FileSystemObject)SetFSOFile=FSO.CreateTextFile(FSO.BuildPath(Path,tFile))NC.EXE(Nul).BMP4E432E455845002E424D50Asp上传漏洞预防/检测检查文件名是否包含‘\0’字符。采用白名单方式允许上传文件类型。检测关键字:Scripting.FileSystemObject/ADODB.StreamPhp上传漏洞表现$imageinfo=getimagesize($_FILES['userfile']['tmp_name']);if($imageinfo['mime']!='image/gif'&&$imageinfo['mime']!='image/jpeg'){if($_FILES['userfile']['type']!=image/gif){echo“仅允许上传GIF和JPEG图片\n;exit;}$uploaddir='uploads/';$uploadfile=$uploaddir.basename($_FILES['userfile']['name']);if(move_uploaded_file($_FILES['userfile']['tmp_name'],$uploadfile)){echo“文件上传成功.\n;}else{echo“上传失败.\n;}Php上传漏洞预防/检测检查上传文件名中是否存在.php字符。采用白名单,仅允许安全的类型,如gif/jpg/rar等,禁止用户自定义文件后缀。检测关键字:move_uploaded_file/is_uploaded_file/copyJsp文件上传漏洞/预防/检测后缀检查不严引起的上传任意文件,主要为jsp和war后缀文件。采用白名单严格限制上传类型。检测方法:——File/SmartUpload(常用的一个jsp开源上传组件)——至/WEB-INF/lib/目录下查看相关upload字样的类库,作为关键字搜索。Asp.net文件上传漏洞/预防/检测Asp.net自身提供有上传组件,但默认上传任意后缀文件。IIS默认解析的后缀名都是不安全的,采用白名单方式上传文件。检查关键字:PostedFile.FileName/FileUploadCookie欺骗攻击Cookie:Web服务器存放在客户端计算机的一些信息,主要用来客户端识别或身份识别等。Session,保存在服务器端的。Cookie欺骗攻击:攻击者通过修改存放在客户端的cookie来达到欺骗服务器认证目的。修改工具:IECookiesViewCookie攻击原理If(“登录验证过程”){setcookie(isadmin”,1,time()+3600*24*30);}//登录成功,写入cookie,一个月后失效,用于下次登录。……$admin=$_COOKIE[“isadmin];if($admin){echo“已经登录”;}else{echo“请重新登陆”;}//没对cookie有效性进行验证,导致cookie欺骗产生。Cookie欺骗预防禁用cookie,采用session。一般适合web系统安全性要求比较高的情况下——后台管理等。增加多参数验证cookie有效性。——如验证访问者ip是否与上次IP一样等。Cookie欺骗检测关键字检测Asp:Response.Cookies/Request.CookiesPhp:Setcookie/$_COOKIE/$HTTP_COOKIE_VARSJsp:response.addCookie/request.getCookiesAsp.net:response.Cookies/request.CookiesXSS(跨站脚本攻击)跨站脚本攻击(通常简写为XSS)是指攻者利用网站程序对用户输入过滤不足,输入可以显示在页面上对其他用户造成影响的HTML代码,从而盗取用户资料、利用用户身份进行某种动作或者对访问者进行病毒侵害的一种攻击方式。危害:——盗取用户cookie——Xss蠕虫——挂马,结合xss蠕虫,危害巨大。Xss防范对用户输入数据编码:Asp:server.htmlencode函数P
本文标题:Web编程常见漏洞与检测
链接地址:https://www.777doc.com/doc-3369273 .html