当前位置:文档之家› 网络攻击技术-注入示例

网络攻击技术-注入示例


系统&应用软件安全
纵观当前软件,无论是系统软件还是应用软 件,存在安全缺陷的原因无非以下几种情况:编程 语言本身缺陷;设计阶段部署失误;编码阶段人为 原因,如故意留后门;测试阶段做的不够. 例如windows平台下很有名的FTP服务端 软件server-u,总是爆出漏洞,为攻击者获得 webshell后提权增加了可能性. 另外值得一提的是编程语言本身缺陷的问 题,例如对C语言中strcpy,strcat不合理的利用, 将导致缓冲区溢出.
一个通用SQL防注入脚本
Dim Tc_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数据 If Request.Form<>"" Then For Each Tc_Post In Request.Form For Tc_Xh=0 To Ubound(Tc_Inf) If Instr(LCase(Request.Form(Tc_Post)),Tc_Inf(Tc_Xh))<>0 Then Response.Write "<Script Language=JavaScript>alert('请不要在参数中包含非法字符 尝试注入!');</Script>" '处理get数据 If Request.QueryString<>"" Then For Each Tc_Get In Request.QueryString For Tc_Xh=0 To Ubound(Tc_Inf) If Instr(LCase(Request.QueryString(Tc_Get)),Tc_Inf(Tc_Xh))<>0 Then Response.Write "<Script Language=JavaScript>alert('请不要在参数中包含非法字符 尝试注入!');</Script>"
3、猜解字段里面的内容,提交: and (select mid(username,1,1) from admin)="a“ 通过以上方法继续猜解字段的内容就可以 轻松得到管理员的帐户密码,从而登录到后台 进行管理操作!当然这并不是攻击者的最终目 的,攻击者还会通过上传等方法来获取一个 webshell,以控制整个web的管理权限,甚至 还会再通过其他方法来得到服务器的系统权限! 这些会在后面进行一些说明。
一个经典的SQL注入漏洞
首先看一段登录验证代码:
<% on error resume next if Request("name")<>"" and Request("psw")<>"" then DataName="DB.db" adm=Trim(Request(“name”)) /*获取用户名,没有经过过滤*/ psw=Trim(Request("psw")) set conn=server.CreateObject("adodb.connection") connstr="Provider=Microsoft.jet.oledb.4.0;data source=" & server.MapPath(DataName) conn.open connstr set rs=conn.execute(“select * from [ADM] where adm=„”&adm&“‟ and psw=„”&psw&“‟”) /*把获取的用户名密码带入SQL语句中查询*/ if not (rs.bof and rs.eof) then Response.Write(“登录成功!") Response.end end if end if %>

绕过防注脚本继续注入
这段代码把SQL注入中要用到的关键 字基本都过滤了,但是作者忽略了一个重 要的参数获取方式:cookie!程序只对get 和post方式获取的参数进行了过滤,要是 通过cookie提交注入语句一样可以达到目 的!
Cookie注入漏洞的产生
因为防注代码的过滤,不能直接用get或者post方式 进行注入。那如何进行突破呢?在说明之前,先了解下 request获取变量的方式:request.form获取的是post数 据,request.querystring获取的get数据, request.cookies获取的是cookie中的数据。但是如果是 <%id=request(“id”)%>呢?这个时候程序是按以下顺序 来搜索集合:querystring,form,cookie, servervariable。当发现第一个匹配的变量的时候就认为 是要访问的成员。从上面的分析我们可以得到什么呢? 这里既然程序就没有限制参数的来源,我们就不要去通 过get的方式提交参数,而是在cookie里面加入参数id的 值,就可以绕过防注入代码的检测了!
这里id变量没有经过任何处理就传递给 了idid然后带入了查询语句,导致了漏洞的产 生,所以就可以在id变量这里插入SQL查询 语句来进行注入。 下面是详细的注入攻击过程: 1、猜解存储管理员帐户和密码的表段,提交: and 0<>(select count(*) from admin) 2、猜解admin表段中的字段,提交: and 1=(select count(*) from admin where len(username)>0)
thanks!
初看没有什么问题,应该输入正确的用户名密 码才能进入得到管理授权,但是实际上我们在用户 名和密码那里都填入 ‘OR‟„=‟ ,一样会成功登陆到 管理页面。为什么呢?我们把填入的 ‘OR‟„=‟ 带入 查询语句来看才发现原来整个语句已经被构造成了:
select * from admin where admin=''OR''='' and password=''OR''='‘ 意思是当admin为空或者空等于空,password为空 或者空等于空的时候整个查询语句就为真。很显然 空等于空,所以语句为真,我们也就满足了程序的 限制条件获得了 易,但是却道出了SQL注入技术的精髓所 在。那应该如何来修补漏洞呢?其实只需 要过滤掉其中的特殊字符就可以解决问题 了,这里我们就过滤掉其中的“‘”,即 是把程序接收参数的两行改为:
adm=replace(Trim(Request(“name”)) ,"'","" ) psw=replace(Trim(Request("psw")) ,"'","" )
普通的SQL注入攻击过程
先看一段很通用的文章读取的代码: <% dim idid idid=request(“id”) /*获取文章ID,没有限制获取方式*/ sql="select * from article where articleid="&id rs.open sql,conn,1,1 if rs.eof and rs.bof then response.write "没有找到相关文章。" response.end end if %>
网络边界安全
网络边界包括路由器,防火墙,入侵检测系统IDS,虚 拟专用网VPN,DMZ和被屏蔽的子网等. 路由器作为划分网段的设备,起着不可替代的作用. 可是上面安装的IOS与其他软件一样,也无法逃避存在安 全缺陷的命运.攻击者则可利用其脆弱点得到路由器的控 制权. 防火墙分为包过滤和应用代理2大类,但把以上两种 技术结合的防火墙已经出现,且日趋成熟.可是由于防火 墙自身局限性等特点,绕过防火墙对于富有经验的攻击者 而言简直易如反掌. IDS在设计上本就不完美,它只能根据数据库中已存 在的记录去判定什么是入侵行为,应该发出警报,而什么 不需要.
协议缺陷的利用
针对互联网目前广泛使用的TCP/IP协议族,各个层次 不同的协议均存在一定程度的缺陷.从而导致了诸如ARP 欺骗,DNS欺骗,DHCP欺骗,以及拒绝服务攻击,中间人攻 击等手段. 拒绝服务攻击根据利用方法不同又分为资源耗尽和 带宽耗尽.通常是由于攻击者对于攻击目标无计可施时所 实施的最卑劣的手段.往往会造成目标机器或网络崩溃, 瘫痪. 去年11月, 安全焦点web服务器被D持续近一个星期, 造成网站长时间不能访问就是典型的拒绝服务攻击. 中间人攻击(man in middle),攻击者通过嗅探,监听 等手段冒充服务器信任机对服务器实施欺骗,实现攻击者 的目的.
浅谈网络攻击手段
CUIT三叶草工作组
—黑萝卜[s.y.c]
当前流行攻击手段
针对web application的攻击 针对操作系统以及应用软件的攻击 针对网络边界(网络设备)的攻击 协议缺陷的利用 社会工程学&钓鱼
Web application安全
网络应用程序,一般指web服务器端的cgi程 序,常用的有asp, php, jsp以及.net.因此针对 web application的攻击也就演化为对脚本程序 安全缺陷的利用和攻击.通常出现这些脆弱点的 原因都是由于代码编写者,也就是脚本程序员的 安全意识不高,或者编码疏忽造成的.没有设计好 足够完整的黑列表,从而导致过滤不严,使得客户 端所输入的恶意代码,危险数据得以在服务器端 正常运行,进而操纵数据库,达到攻击者的目的.
相关主题