版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、sql注入:SQL注入天书疯狂代码 HYPERLINK http:/w/ http:/w/:http:/sp/Article16281.html引言随着B/S模式应用开发发展使用这种模式编写应用员也越来越多但是由于这个行业入门门槛不高员水平及经验也参差不齐相当大部分员在编写代码时候没有对用户输入数据进行判断使应用存在安全隐患用户可以提交段数据库查询代码根据返回结果获得某些他想得知数据这就是所谓SQLInjection即SQL注入SQL注入是从正常WWW端口而且表面看起来跟般Web页面没什么区别所以目前市面都不会对SQL注入发出警报如果管理员没查看IIS日志可能被很长时间都不会发觉但是SQL注入
2、手法相当灵活在注入时候会碰到很多意外情况能不能根据具体情况进行分析构造巧妙SQL语句从而成功获取想要数据是高手和“菜鸟”根本区别根据国情国内WebSite用ASP+Acs或SQLServer占70%以上+MySQ占L20%其他10%在本文从分入门、进阶至高级讲解下ASP注入思路方法及窍门技巧注入文章由NB另位朋友zwell撰写希望对者和员都有用处了解ASP注入朋友也请不要跳过入门篇部分人对注入基本判断思路方法还存在误区大家准备好了吗?LetsGo.入门篇如果你以前没试过SQL注入话那么第步先把IE菜单=工具=ernet选项=高级=显示友好HTTP信息前面勾去掉否则不论服务器返回什么IE都只显示
3、为HTTP500服务器不能获得提示信息第节、SQL注入原理以下从个Web开始(注:本文前已征得该站站长同意大部分都是真实数据)在WebSite首页上有名为“IE不能打开新窗口多种解决思路方法”地址为:htt/showdetail.as=49在这个地址后面加上单引号服务器会返回下面提示:JETDatabaseEngine80040e14串语法在查询表达式ID=49中/showdetail.asp行8从这个提示能看出下面几点:1.WebSite使用是Acs数据库通过JET引擎连接数据库而不是通过ODBC2.没有判断客户端提交数据是否符合要求3.该SQL语句所查询表中有名为ID字段从上面例子得到资料
4、可以知道SQL注入原理就是从客户端提交特殊代码从而收集及服务器信息从而获取你想到第 2节、判断能否进行SQL注入看完第节有些人会觉得:我也是经常这样测试能否注入这不是很简单吗?其实这并不是最好思路方法为什么呢?首先不定每台服务器IIS都返回具体提示给客户端如果中加了c(参数)的类语句话SQL注入是不会成功但服务器同样会报错具体提示信息为处理URL时服务器上出错请和系统管理员联络其次部分对SQL注入有点了解员认为只要把单引号过滤掉就安全了这种情况不为少数如果你用单引号测试是测不到注入点那么什么样测试思路方法才是比较准确呢?如下:htt/showdetail.as=49htt/showdetail
5、.as=49;and1=1htt/showdetail.as=49;and1=2这就是经典1=1、1=2测试法了如何判断呢?看看上面 3个返回结果就知道了:可以注入表现:正常显示(这是必然不然就是有了)正常显示内容基本和相同提示BOF或EOF(没做任何判断时)、或提示找不到 onerrorresumenext)(判断了rs.eof时)、或显示内容为空(加了不可以注入就比较容易判断了同样正常显示和般都会有定义提示或提示类型转换时出错当然这只是传入参数是数字型时候用判断思路方法实际应用时候会有型和搜索型参数我将在中级篇 “SQL注入般步骤”再做分析第 3节、判断数据库类型及注入思路方法区别数据库、
6、注入思路方法都是有差异所以在注入的前还要判断下数据库类型般ASP最常搭配数据库是Acs和SQLServer网上超过99%WebSite都是其中的如何让告诉你它使用什么数据库呢?来看看:SQLServer有些系统变量如果服务器IIS提示没关闭并且SQLServer返回提示话那可以直接从出错信息获取思路方法如下:htt/showdetail.as=49;anduser0这句语句很简单但却包含了SQLServer特有注入思路方法精髓也是在次无意测试中发现这种效率极高猜解思路方法让我看来看看它含义:首先前面语句是正常重点在anduser0知道user是SQLServer个内置变量它值是当前连接用户名类
7、型为nvarchar拿个nvarchar值跟数0比较系统会先试图将nvarchar值转成型当然转过程中肯定会出错SQLServer出错提示是:将nvarchar值”abc”转换数据类型为列时发生语法呵呵abc正是变量user值这样不废吹灰的力就拿到了数据库用户名在以后篇幅里大家会看到很多用这种思路方法语句顺便说几句众所周知SQLServer用户sa是个等同Adminstrators权限角色拿到了sa权限几乎肯定可以拿到主机Administrator了上面思路方法可以很方便测试出是否是用sa登录要注意是:如果是sa登录提示是将 ”dbo”转换成列发生而不是”sa”如果服务器IIS不允许返回提示那
8、如何判断数据库类型呢?可以从Acs和SQLServer和区别入手Acs和SQLServer都有自己系统表比如存放数据库中所有对象表Acs是在系统表msysobjects中但在Web环境下读该表会提示“没限”SQLServer是在表sysobjects中在Web环境下可正常在确认可以注入情况下使用下面语句:htt/showdetail.as=49;and(selectcount(*)fromsysobjects)0htt/showdetail.as=49;and(selectcount(*)frommsysobjects)0如果数据库是SQLServer那么第个页面和原页面htt/showdet
9、ail.as=49是大致相同;而第 2个由于找不到表msysobjects会提示出错就算有容错处理页面也和原页面完全区别如果数据库用是Acs那么情况就有所区别第个页面和原页面完全区别;第 2个则视乎数据库设置是否允许读该系统表般来说是不允许所以和原也是完全区别大多数情况下用第个就可以得知系统所用数据库类型第 2个只作为开启IIS提示时验证进阶篇在入门篇学会了SQL注入判断思路方法但真正要拿到WebSite内容是远远不够接下来就继续学习如何从数据库中获取想要获得内容首先先看看SQL注入般步骤:第节、SQL注入般步骤首先判断环境寻找注入点判断数据库类型这在入门篇已经讲过了其次根据注入参数类型在脑海
10、中重构SQL语句原貌按参数类型主要分为下面 3种:(A)ID=49这类注入参数是数字型SQL语句原貌大致如下:Select*from表名where字段=49注入参数为ID=49And查询条件即是生成语句:Select*from表名where字段=49And查询条件(B)Class=连续剧这类注入参数是型SQL语句原貌大致概如下:Select*from表名where字段=连续剧注入参数为Class=连续剧and查询条件and=即是生成语句:Select*from表名where字段=连续剧and查询条件and=搜索时没过滤参数如keyword=关键字SQL语句原貌大致如下:Select*from表
11、名where字段like%关键字%注入参数为keyword=and查询条件and%25=即是生成语句:Select*from表名where字段like%and查询条件and%=%接着将查询条件替换成SQL语句猜解表名例如:ID=49And(SelectCount(*)fromAdmin)=0如果页面就和ID=49相同介绍说明附加条件成立即表Admin存在反的即不存在(请牢记这种思路方法)如此循环直至猜到表名为止表名猜出来后将Count(*)替换成Count(字段名)用同样原理猜解字段名有人会说:这里有些偶然成分如果表名起得很复杂没规律那根本就没得玩下去了说得很对这世界根本就不存在100%成功下
12、手技术不叮无缝蛋无论多技术多高深都是别人写得不严密或使用者意识不够才有得有点跑题了话说回来对于SQLServer库还是有办法让告诉表名及字段名在高级篇中会做介绍最后在表名和列名猜解成功后再使用SQL语句得出字段值下面介绍种最常用思路方法Ascii逐字然这种思路方法速度很慢但肯定是可行思路方法法虽举个例子已知表Admin中存在username字段首先取第条测试长度:htt/showdetail.as=49;and(selecttop1len(username)fromAdmin)0先介绍说明原理:如果top1username长度大于0则条件成立;接着就是1、2、3这样测试下去直到条件不成立为止比
13、如7成立8不成立就是len(username)=8当然没人会笨得从0,1,2,3个个测试如何样才比较快就看各自发挥了在得到username长度后用 mid(username,N,1)截取第N位再asc(mid(username,N,1)得到ASCII码比如:id=49and(selecttop1asc(mid(username,1,1)fromAdmin)0同样也是用逐步缩小范围思路方法得到第1位ASCII码注意是英文和数字ASCII码在1-128的间可以用折半法加速猜解如果写成测试效率会有极大提高第 2节、SQL注入常用有SQL语言基础人在SQL注入时候成功率比不熟悉人高很多及命令有必要提高
14、下自己SQL水平特别是些常用Acs:asc()SQLServer:unicode()作用:返回某ASCII码Acs:chr(数字)SQLServer:nchar(数字)作用:和asc相反根据ASCII码返回Acs:mid(串,N,L)SQLServer:sub(串,N,L)作用:返回串从N个起长度为L子串即N到N+L的间串Acs:abc(数字)SQLServer:abc(数字)作用:返回数字绝对值(在猜解汉字时候会用到)Acs:AbetnBAnQLServer:AbetnBAndC作用:判断A是否界于B和C的间第 3节、中文处理思路方法在注入中碰到中文是常有事有些人碰到中文就想打退堂鼓了其实只
15、要对中文编码有所了解“中文恐惧症 ”很快可以克服先说点:Acs文ASCII码可能会出现负数取出该负数后用abs取绝对值汉字不变SQLServer文ASCII为正数但由于是UNICODE双位编码不能用ascii取得ASCII码必须用unicode返回unicode值再用nchar取得对应中文了解了上面两点后是不是觉得中文猜解其实也跟英文差不多呢?除了使用要注意、猜解范围大点外思路方法是没什么两样高级篇看完入门篇和进阶篇后稍加练习般WebSite是没问题了但如果碰到表名列名猜不到或作者过滤了些特殊如何提高注入成功率?如何样提高猜解效率?请大家接着往下看高级篇第节、利用系统表注入SQLServer数
16、据库SQLServer是个功能强大数据库系统和操作系统也有紧密联系这给开发者带来了很大方便但另方面也为注入者提供了个跳板先来看看几个具体例子:“netusernamepassword/add”-分号;在SQLServer中表示隔开前后两句语句-表示后面语句为注释所以这句语句在SQLServer中将被分成两句执行先是Select出ID=1然后执行过程xp_cmds这个过程用于系统命令于是用net命令新建了用户名为name、为passwordwindows帐号接着:“netlocalgroupnameadministrators/add”-将新建帐号name加入管理员组不用两分钟你已经拿到了系统最
17、高权限!当然这种思路方法只适用于用sa连接数据库情况否则是没限xp_cmds0前面有个类似例子anduser0作用是获取连接用户名db_name是另个系统变量返回是连接数据库名数据库名todisk=c:inetpubwwwroot1.db;-这是相当狠招从拿到数据库名加上某些IIS出错出绝对路径将数据库备份到Web目录下面再用HTTP把整个数据库就完完整整 网络地址思路方法(如202.96.回来所有管理员及用户都览无遗!在不知道绝对路径时候还可以备份到xShare1.db)但成功率不高(SelectTop1namefromsysobjectswherextype=Uandsus0)0前面sys
18、objects是SQLServer系统表着所有表名、视图、约束及其它对象xtype=Uandsus0表示用户建立表名上面语句将第个表名取出和0比较大小让报错信息把表名出来第 2、第 3个表名如何获取?还是留给聪明读者研究吧(SelectTop1col_name(object_id(表名),1)fromsysobjects)0从拿到表名后用object_id(表名)获取表名对应 1换成2,3,4.就可以逐个获取所猜解表里面字段名IDcol_name(表名ID,1)代表该表第1个字段名将以上6点是我研究SQLServer注入半年多以来心血结晶可以看出对SQLServer了解程度直接影响着成功率及猜
19、解速度在我研究SQLServer注入的后我在开发方面水平也得到很大提高呵呵也许安全和开发本来就是相辅相成吧第 2节、绕过限制继续注入在入门篇提到有很多人喜欢用号测试注入所以也有很多人用过滤号思路方法来“防止”注入这也许能挡住些入门者但对SQL注入比较熟悉人还是可以利用相关达到绕过限制目在“SQL注入般步骤”节中我所用语句都是经过我优化让其不包含有单引号;在“利用系统表注入SQLServer数据库”中有些语句包含有号举个例子来看看如何改造这些语句:简单如wherextype=UU对应ASCII码是85所以可以用wherextype=char(85)代替;如果是中文比如 wherename=用户可以用wherename=nchar(29992)+nchar(25143)代替第 3节、经验小结1.有些人会过滤Select、Update、Delete这些关键字但偏偏忘记区分大小写所以大家可以用selecT这样尝试下2.在猜不到字段名时不妨看看WebSite上登录表单般为了方便起见字段名都
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026 小儿自闭症感统干预课件
- 2026 学龄前自闭症感统趣味课件
- 对外经济贸易大学《财务会计》课件财务报表分析
- 外科半年工作总结
- 2025灌溉工程(水泵安装)合同
- 黑龙江2026年注册会计师CPA《会计》历年真题汇编
- 2026年教师课堂纪律管理培训计划
- 生产车间作业环境通风系统自查报告
- 通信企业安全生产标准化规范
- 河南2026年选调生《申论》考前冲刺卷
- 雅马哈电吹管知识讲座
- 探伤室检测方案
- 热电阻检定标准
- 酒店明住宿清单(水单)
- 外科学椎间盘突出症
- 传感器技术与应用-说课
- GB/T 13816-1992焊接接头脉动拉伸疲劳试验方法
- 碳捕集、利用与封存技术课件
- 新生儿听力筛查(共29张)课件
- (精心整理)数学史知识点及答案
- GB 5749-2022 生活饮用水卫生标准
评论
0/150
提交评论