onenight

级别:中级站友 威望:0 经验:0 货币:84 体力: 来源:61.140.90.* 总发帖数:64 注册日期:2002-03-17
|
|
查看 邮件 主页 QQ 消息 引用 复制 下载
当今流行的网络数据库技术主要有三种:idc(互联网数据连接);rdo(远程数据对象);ado(高级数据对象)。
基于ado的数据库连接主要用在本地数据库操作上;基于rdo的数据库连接主要用在(asp)web
数据库上或vb的C/S数据库编程上。idc的是仅用于web数据库上。
关于asp+sql的侵入网上有很多经典教程,在本论坛里也有很多精辟的见解。我主要想说说idc数据库的原理,拓宽一下思路,大家一起来看看idc数据库连接有没有什么可以利用的地方。
先讲讲idc的工作原理: 一个典型的idc数据库操作(以下由查询为例加以介绍)是由以下几个文件构成的:
htm文件:用于和用户的交互,取得查询操作的信息。
idc文件:含有有odbc数据源及sql语句等信息的文本文件。httpodbc.dll将idc查询参数通过odbc数据源得到一个查询结果,并将此结果传递到模板文件(.htx)。
htx文件:模板文件,由html语句及含有查询结果的一系列变量组成。它向用户显示查询结果。
很明显基于idc技术的数据库连接和asp有很大不同,就是他不单纯由iis来控制整个操作。而是加上了httpodbc.dll来对idc文件进行解析。
一个search.idc文件实例: 括号为注释内容 Datasource:Ex1
(odbc数据源的名称,通过控制面板中的odbc数据源来添加)
Usernamescreen.width-300)this.width=screen.width-300'>a (用户名)
Password: (口令)
Templatescreen.width-300)this.width=screen.width-300'>earch.htx(查询结果输入那个模板文件)
SQLStatement:(sql语句,下面是详细内容,可以分段,但要用+号连接) +SELECT name,age,
sex, phone +from people +where name='%txtname%'
('%txtname%'即是从htm文件中获得的查询参数)
按照正常的攻击思路应该是在提交txtname这个参数时加入进攻的语句如:
http://127.0.0.1/scripts/search.idc?txtname=aa';exec
master.dbo.xp_cmdshell "net user onenight onenight/add"
可是这时httpodbc返回的内容是检索到0个记录(假设系统有aa这个记录)。怎么会有这种现象发生?首先让我们看看经过httpodbc解码后返回的txtname内容吧:
aa'';exec master.dbo.xp_cmdshell "net user wjd wjd/add"
请注意:aa'已经变成了aa'' 按照我的理解此时如果a'变成了a''sql
server应该提示错误才对,可sql提示的却是找到0个记录。看来另有蹊跷。打开sql.log分析以下刚才的查询:
inetinfo 28c-2b8 ENTER SQLExecDirect
HSTMT 015F25E0
UCHAR * 0x00B5ECE0 [ 117]
" SELECT NAME,AGE, SEX, PHONE, email from people where
name='aa'';exec master.dbo.xp_cmdshell "net user onenight
onenight/add"'" SDWORD 117
inetinfo 28c-2b8 EXIT SQLExecDirect with
return code 0 (SQL_SUCCESS)
HSTMT 015F25E0
UCHAR * 0x00B5ECE0 [ 117] " SELECT NAME,AGE, SEX,
PHONE, email from people where name='aa'';exec
master.dbo.xp_cmdshell "net user onenight onenight/add"'"
SDWORD 117
其中inetinfo说明连接的对象是iis。return code 0说明前面的 ENTER
SQLExecDirect 的语句执行成功。将sql语句剥离出来分析: SELECT NAME,AGE, SEX, PHONE,
email from people where name='aa'';exec master.dbo.xp_cmdshell "net
user onenight onenight /add"'
接合iis返回的信息我们可以分析出httpodbc.dll
做了什么工作: 它将凡是有单引号的地方再重复一次单引号,由此保证了整个字符串单引号的完整性进而逃脱了攻击。
[ 此消息由 onenight 在 2002-04-05.21:50:56 编辑过
] |