版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第1章绪论1.1项目背景及意义SQL注入攻击是一种非常有效且破坏性很大的渗透手段。它是针对于数据库的一种攻击手段,通过利用数据库的外部接口把恶意代码插入到SQL语言中使数据库服务器解析并执行,以达到入侵目标数据库及至整个操作系统的目的。了解和熟悉SQL注入原理,掌握防御SQL注入攻击的原理和技巧就变得至关重要。SQL注入攻击的普遍性、难捉摸性、简易性等特点让其成为了网络中黑客主流攻击方式之一。因为SQL注入是从正常的Web平台入口进行请求访问,和请求正常的Web页面没有什么区别,所以目前市面上除了专门的Web防御防火墙外,大部分防火墙都不会对这类SQL注入攻击进行监控和发出警报,若网站管理员没有经常查看IIS日志的经验和习惯,有可能被入侵很长一段时间后都没有任何发觉。由于现在广泛流行的恶意攻击工具,SQL注入在近年来呈现一种增长的趋势。据OWASP(开放式web应用程序安全项目)每隔三年更新一次的“十大安全隐患列表”,在近几次公布的总结Web应用程序最可能、最常见、最危险的十大安全隐患中,SQL注入攻击一直排列靠前。OWASPTOP102023中列出的最严重的Web应用程序的漏洞中,注入(Injection)风险位居第一。Web应用的发展越来越成熟,应用的各项技术发展得也越来越复杂。它们涵盖了从外部动态展示INTERNET和内部工作网络到以WEB协议方式传递数据的企业工作应用(如文档管理系统等)。这些系统的实用性及其数据存储、处理内容的机密性和敏感性对于企业的主要业务而言都非常重要。当前市面的注入攻击检测工具只能对单个网页或者单个URL进行检测和注入,无法对整个网站的漏洞进行检测。而漏洞扫描工具可以对整个网站漏洞进行扫描却无法进行进一步的注入攻击检测。很大程度上不能满足开发人员和管理人员对网站SQL注入漏洞全面了解的要求。本研究的最终目的是分析SQL注入攻击的类型、关键技术和原理,并研究SQL注入在实际应用中的操作方法,在此基础之上,设计并开发了一套自动注入工具。因为恶意攻击者不仅可以通过SQL注入攻击对Web应用数据进行盗取、篡改信息,还可以进一步对于服务器进行恶意操作,并且植入木马或者后门程序,甚至控制整个服务器,这就严重影响了应用的正常运行以及对于应用的信息安全带来严重后果。所以,对于功能齐备的SQL注入攻击扫描与检测工具的研究与开发具,具有非常重要的现实意义。应用程序开发者或网站管理人员使用此工具对自已的网站进行安全检测,以达到减小SQL注入的可能性。同时,在渗透测试工作中,对于安全测试也具有很大的帮助。1.2研究内容1.2.1自动注入攻击工具的研发本研究首先理解Web应用的工作原理,首先简要概述Web应用系统通用的架构模式,理解了构建模式后能更清晰的了解SQL注入的产生过程,然后从Web应用的代码层来分析介绍是什么引起了通用的SQL注入,然后研究介绍SQL注入漏洞的利用过程。从框架到利用逐步分析SQL注入的过程和利用,然后根据分析的内容构建SQL注入的自动化检测及注入攻击利用框架。SQL注入原理SQL注入的原理,是将SQL代码插入或者非正常时添加到应用的参数当中,并且进行了一定的拼接传入到了后台的数据库服务器,最终使服务器执行了该拼接的恶意SQL命令。所有的是通过SQL语句执行的应用过程均存在被攻击的威胁,因为SQL的多样多变性语言结构特征使得攻击者可以拼接构建丰富的代码编码手段等来拼接语句来欺骗服务器。SQL注入攻击的主要方式就是直接将命令插入到应用服务的表单参数中传入到后台数据库查询字符串中,这些参数就会被带入到后台数据库服务器进行执行解析,攻击者便可以构造恶意命令来达到攻击目的。1.2.3SQL注入检测技术检测发现SQL注入漏洞有一条简单的规则:SQL注入是通过发送特殊数据来触发异常操作。该规则包括如下含义:检测Web应用上所有的输入数据;集合SQL语法,归类所有可能触发异常的数据类型;检测数据库服务器应用响应中的异常。首先需要清楚Web浏览器向Web服务器发送请求的过程。不同的服务应用会有不同的体现方式,它们均处在基于Web的环境中,所以基本原理是相同的。亏识别和检测扬应用接受的易所有数据,理攻击一般都艰会修改这些颈数据,所以暖需要识别并畅分析服务器易对它们的响卸应。有时响莫应中会直接顽包含来自数甚据库的SQ惜L错误,有装时需要不断祥的方式来检晌测和确定响间应中细微的嚷差别。漫1.3梯章节安排鼻本论文章节浙安排如下:末第一章绪术论:综述此质研究设计的搜背景意义以妥及研究内容割。茂第二章S婚QL注入技拢术研究:主买要对SQL侵注入攻击方欣式过程和攻佳击特点进行忆归类、识别盲,首先理解骑Web应用昆的工作原理垄,概述We至b应用通用察的构建方式其,为理解S学QL注入的亮产生过程提男供一些背景纪知识,接下己来从Web正应用的代码岸层介绍引发水SQL注入腹的因素以及胡哪些开发实筛践和行为会言引发SQL疤注入。分析可SQL注入北过程和利用去,并架构如辆何将SQL讲注入的发现筋过程自动化支以提高检测紧简单SQL肌注入的框架的。帆第三章S子QL注入攻亲击技术研究嫂:根据SQ呢L注入技术丽,研究利用准数据库中的贵功能来攻击挤系统端口的千技术。数数牙据库大多均冻带有丰富的捐数据库编程吧功能,可以纹利用SQL满注入漏洞来吗访问文件系子统以执行有绣效的任务,努可以在基础欧操作上执行谣各种命令,陪扩大范围攻兄击的利用技邻术细节。当逮发现SQL墓注入漏洞以牌及初步的利感用获取数据岩后,可以利眯用SQL注障入漏洞来访赌问文件系统见来扩大渗透阵范围。还可扩以在操作系询统上执行各咽种命令,攻火击可以使用序它们扩展数造据库的可达象区域并在更振大的范围内巴发动攻击。斩第四章注不入高级技巧梦研究:We悟b应用通常耕会使用过滤详应用,设计享这些过滤的射目的就是防衣御SQL注服入在内的常模见攻击。这桶些过滤方式跨可以是位于迷web应用厘的代码层中撕,也可以通筐过第三方的音外部实现,苗如Web应牛用防火墙(恩WAF)或阻入侵防御系爸统(IPS悉)。当注入贪攻击碰到这呀些防御应用看,若想进一给步利用漏洞厕,则需要寻掠找一种能避贸开过滤器防亿护的高级方非法以便恶意适输入传递给蝶易受攻击的坦代码。奖第五章自拘动注入工具皱框架设计:英根据项目的令设计需求,停以及Pyt徒hon编程棉语言的特点惑,对自动注丸入攻击工具嫌整体框架进航行分析和设肺计。并且分迈析功能模块袖中的重点和州关键技术。组第六章S摇QL注入测纤试:自动注红入攻击实例露测试。瓜第2章浩SQL注入笋技术舟2.1偏Web应用须工作原理和扩架构简析是姨不论律是用争何种脚本辫语言元开发贼的Web应摸用,正都有一个共盟同点虫:具有交互昂性并且嫂大多气是数据库驱并动的。举基于狂数据库驱动丝的Web应似用印一般都减包含三层:烫apre粪senta煌tion莫tier姜(菌表示层炉,后Web浏览也器或呈现引榆擎)、a抱logic醋tier贡(依逻辑层着,萌如C#、A煤SP、.N闪ET、PH符P、JSP屡等编程语言汗)和as寺torag佣etie凶r亡(振存储层榜,肌如Micr矩osoft故SQL耕Serve塞r、MyS术QL、Or赢acle等嫂数据库)。证Web浏览迅器(表示层右,如Int仪ernet粘Expl草orer、毛Safar江i、Fir夺efox等论)向中间层佳(逻辑层)诚发送请求,影中间层通过味查询、巨解析领数据库(存排储层)来响古应该请求。袭图2-1莫简单的三层丝架构搁郑Web差三层法架构而解决方案蠢没有尚扩展性,研屋究人员不断与地对是Web搞三层架构进放行改进恩优化挺,在可嚼维护性锻和可黑扩展性的等基础上房建立坝了一种新概湾念:n层应衫用开发模式格。其中篮有墨一种州就是Web系四层变架构炉解决方案,洲该方案在W课eb服务器践和数据库之奉间使用了一槽层中间件糟服务器刘(通常称为轿应用服务器垂)。下图枪2娇-2中,W回eb浏览器般(表示层)避向中间层(陡逻辑层)发悼送请求,后荡者一次调用厘由位于应用组层的应用服因务器所提供终的API,爪应用层通过却查询、更新越数据库(存抱储层)来响玻应该请求。贱图2-2唯四层架构柔2.2潜识别SQL及注入摆SQL注入洪就是程序员导对程序中动谱态的SQL聚语句没有作顷严格的过滤神或检测,导充致黑客能在谈注入点提交统非法的SQ美L语句,导夹致程序和服端务器的信息雄被泄漏。由泰于SQL注膛入的入门门裁槛低,隐蔽秋性好,破坏亩性大,杀毒迁软件无法查密杀,是当前历最主流的入盆侵手段。只SQL注入福攻击的本质拦,就是服务沟器将用户传助入的数据在数数据库中当诉成了SQL我代码执行。某这里便有两纤个关键因素软:第一个是跃用户有权限关输入数据;荡第二个是服娃务器应用数乌据执行了用冻户传入的数什据。视婶挎识别数据输逃入漂Web环境搂是一种C/余S(客户端肝/服务器)勒架构。客户猛端使用浏览挠器向Web摊服务器发送棒请求并等待押响应。We寨b服务器接劫收到请求后蛾,甜通过查询、负解析镜数据库岩,将响应发厅送回客户端匆。很明显,成双方便必须伪使用一种协抛议作为双方塌的约定,这遍种传输协议缺就是HTT蒙P。让首先,必须坛识别远程W客eb应用所德接收的所有晒数据输入。崭协赵议定义了可定以发送给服倦务器的操作甩方式,这里仪只关注研究著与SQL注鹊入攻击相关亿的两种方法夫:GET和体POST。触GET请求隶:对GET是向群服务器发索弃取数据的一甲种请求,是捡一种请求服枕务器的HT肌TP方法。据使用GET担请求时,信桂息是显示在鸽URL中的斑。GET请艘求对用户是鸟透明的,如注下例,WE炸B服务器的衔GET请求拖如下所示:纽GET/牌gener您al/vo严te/sh棵ow/we研bst/l他ist.p归hp?VO愁TE_ID陵=131杀/失1.1迹User-夺Agent半:Ope园ra/9.腐80(W联indow胜sNT德6.1;丛U;Ed反ition蜻IBIS缎;zh-沿cn)P匀resto撒/2.10质.229希Versi徒on/11劳.62钉Host:习**.s甩wust.疾edu.c掉n瓜Accep域t:te折xt/ht伏ml,a张pplic依ation略/xml;龙q=0.9斤,app设licat户ion/x鄙html+匹xml,胸image稼/png,誉imag示e/web付p,im岔age/j叠peg,爪image鹿/gif,责imag播e/x-x玻bitma旅p,*/春*;q=0抛.1狭Accep休t-Lan亡guage罢:zh-而CN,zh娱;q=0.存9,en;羽q=0.8欠Accep纯t-Enc钳oding滚:gzi薪p,de沾flate他Cooki势e:SI银D_414根3=82b恨90aee跳;SID沉_99=b透fb67d成86;U酒I_COO云KIE=0康;LWr校7_213舌2_ula溪stact射ivity刑=85eb赌vMTfO腰WVLvx柿gzzzV题4uv0P较kMG14搅SL7yU遍g9SVB竞P%2Bz桨MNhDt猎paSVL况;PHP刺SESSI孔D=073独edfe7次894ac赠b322b滨a1061真678e8鹅2090;钩lzst剑at_uv此=1073事52912雾92559探57456否7|287认9946打Proxy草-Conn益ectio渣n:Ke脂ep-Al杜ive忘该请求中与形数据查询相袜关的参数在融URL中,朵格式如下所菠示:巷list.泳php?V减OTE_I旁D=131赢上述示例中脚包含一个参弊数:VOT墓E_ID。迁服务器应用步将会把参数表值带入数据姑库中解析执缠行,然后将感响应结果返胀回给客户端枪。令POST请搏求:陕POST请嗓求是作为H锦TTP消息重的实际内容秆发送给we傅b服务器的世方租法。在浏览懒器中填写表形单并点击S勇ubmit谁按钮时通常传使用该方法心。下面的例粪子是浏览器衔发送给远程追WEB服务荐器的内容,朴请求如下所计示:拔POST睁/gene述ral/v剃ote/s厦how/w绣ebst/胁pl_wr暮ite.p诸hp?IT学EM_ID絮=345妇/观1.1谣User-陕Agent拜:Ope枕ra/9.肌80(W晨indow挑sNT辅6.1;驱U;Ed悠ition产IBIS饱;zh-莲cn)P个resto毕/2.10港.229旦Versi特on/11蜂.62这Host:摇**.s腾wust.姑edu.c永n头Accep译t:te述xt/ht抓ml,a技pplic投ation梨/xml;恨q=0.9骂,app开licat切ion/x即html+睬xml,旺image浑/png,竟imag柱e/web痕p,im诸age/j俊peg,抢image成/gif,乖imag爬e/x-x政bitma锅p,*/惰*;q=0中.1忌Accep喊t-Lan跌guage谋:zh-瞧CN,zh腰;q=0.轿9,en;重q=0.8仗Accep获t-Enc税oding门:gzi夹p,de羽flate毙Refer倾er:h拖ttp:/粒/**.s侧wust.输edu.c店n/gen剩eral/薪vote/丙show/醋webst蚊/pl_w圈rite.额php?I落TEM_I收D=345请Cooki山e:SI护D_414上3=82b沈90aee图;SID诱_99=b断fb67d融86;U慕I_COO贿KIE=0授;LWr胃7_213引2_ula彼stact台ivity复=85eb棵vMTfO阀WVLvx互gzzzV奋4uv0P章kMG14叙SL7yU呈g9SVB垮P%2Bz奖MNhDt荐paSVL滥;PHP违SESSI习D=073伤edfe7谊894ac凤b322b着a1061漫678e8眯2090;深lzst握at_uv缠=1073斜52912止92559术57456片7|287扭9946货Conne烛ction局:Kee乡p-Ali批ve黑Conte完nt-Le冒ngth:家40干Conte欲nt-Ty陈pe:a袋pplic旺ation亦/x-垂conte你nt=PO罩ST+TE拉ST&su胶bmit=库+%CC%扫E1+%B她D%BB+呀其他注入数刊据:厉除了GET修或POST叉参数传输检绍索数据外,芬请央求的其他内肾容也可能会背触发SQL从注入漏洞。杜Cooki投e就是个很林典型的例子渠。Cook热ie由服务巡器发发送到扣用户端的浏论览器,并会若在用户端每炊次请求中都辰会回发给服涉务器。Co槽okie一椒般被用于辨排别用户身份破、进行se脚ssion自跟踪而储存血在用户本地神终端上的数己据。由此可调见,用户完阵全可以控制岗发送给服务剑器的Coo弱kie内容趁,所以Co群okie也枯作为一种有式效的用户数页据输入方式坊和易受注入么影响的对象压。如:磨GET繁/烈1.1加Host:诞xxx.名swust件.edu.糠cn确User-馅Agent戴:Moz呼illa/产5.0(沉X11;筝Ubunt妹u;Li啄nuxi玉686;酸rv:19锁.0)G荒ecko/的20230勿101F程irefo献x/19.翅0住Accep房t:te蚕xt/ht名ml,ap汗plica柔tion/隶xhtml玻+xml,篮appli歌catio骑n/xml印;q=0.绘9,*/*棵;q=0.身8盖Accep震t-Lan旺guage降:en-雅US,en咏;q=0.谊5炎Accep嫁t-Enc见oding急:gzi汽p,de武flate宗Cooki伞e:__假utma=奴23550阔4861.踪10458停63906炒.1362答72115舒8.136甩39221艺47.13遣64178醋877.1俘7;__算utmz=盾23550撒4861.融13638宪78397担.13.3王.utmc垫sr=xx俭x.swu锯st.ed凭u|截utmcc亩n=(re行ferra肿l)|ut洋mcmd=锡refer珍ral|u孔tmcct烈=/app势/proc瑞ureme慈nt/bi数ds/;徐s_nr=院13641正97401累953-R门epeat弃;s_v洞num=1菌36479碎96003丝37%26爹vn%3D剑19;s尽_vi=[蔑CS]v1军|289C膊C3EC8亿51D1C重92-40捉00013久26012鸽B18C[真CE];岛fsr.r点={"d"养:90,"湾i":"d迫04601柔2-551捕64494奥-d970倒-1460院-e761勺9","e至":136躲33304痒79331吵};el车f_e=h慢ack@x左xx.sw酱ust.e务du科;elf孩_s=ab高;elf撇_h=86侍b9fa3体3b1b6蹲52a3c翁73ea8怖2f5e6嫩263be动Conne悔ction中:kee谋p-ali输ve神该应用系统瞒存在一个c贺ookie绿注入漏洞,捏漏洞代码下犁图2-3,惠程序代码没泼有任何过滤充就将用户传资入的coo脾kie参数锻带入到数据饲库中进行执蔬行。用户只涝要利用抓包凡工具将传入婆的数据包截掘下来修改c捞ookie植字段的数据烟就可以将恶表意命令传入暴到后台数据窜库进行执行要。迎图2-3葛存在漏洞的喜代码文件漫厦挪操作请求参峰数络下面先通过嚼介绍一个非悦常简单的例耍子来熟悉S贪QL注入漏沃洞。偶以我们学校蛾:妨//**.唯swust流.edu.芒cn/为例针。浏览到某纽页面的UR侨L如下:丈:置//**.揭swust干.edu.判cn/ge桶neral说/vote缩/show吵/webs卖t/lis基t.php斯?VOTE妻_ID=1喇31案List.铲php页面壳收到一个名灵为VOTE由_ID的参灾数。挑现在开始开要始手动修改哄VOTE_水ID参数的倡值,将其改旁为意外的数自值。按照下柿列方式进行个首次尝试:侨:超//**.滋swust卖.edu.勒cn/ge指neral婶/vote粪/show鼻/webs糕t/lis匀t.php谁?VOTE烤_ID=a强ttack必er昌上例中使用斤不存在的类稻型名向服务驱器发出请求竿。服务器返悲回如下图2耀-4响应:走图2-4烈服务器响应钟结果1立该警告是当肾用户尝试从挂空结果集中栗读取记录时半,数据库返咳回的一个M期YSQL数妨据库错误。甘该错误表明西远程应用未问能正确处理松意外的数据唱。拖继续进行推无理操作,现葛在向之前发恰送的值添加帐一个单引号购('),发元送下列请求阔:旅:事//**.荡swust斗.edu.典cn/ge惯neral郑/vote俘/show血/webs宣t/lis童t.php益?VOTE雁_ID=a菌ttack旬er'萝下图2-5戚是服务器的混响应:蓝图2-5蔽服务器响应轨结果2交服务器返回痒下列错误:旁请联系管理熄员狱错误#10项64:歪Youh议avea疲nerr嫂orin姥your俯SQL爬synta钟x;ch烘eckt君hema目nual溉that虚corre壁spond造sto款your坚MySQL炭serv饲erve拳rsion浑for痰ther赶ight累synta堡xto雅usen轿ear'灿\''a被tlin黄e1籍SQL语句黑:SEL结ECTE哪ND_DA烧TEfr竭omVO特TE_TI群TLEw置here盟VOTE_成ID=at寸tacke摄r\'奋文件:D:塘/***r卖oot/g屯enera跨l/vot阿e/sho版w/web荐st/li扯st.ph齿p骂不难发现,室有些应用在而处理用户数册据时会返意细想不到的结歪果。WEB节检测的异常潮并非都是由丽SQL注入嘴漏洞引起的群,还会受到交很多其他因化素的影响。金这里还可以堆通过进行另禾一个测试来筛识别SQL练Serv滨er和Or仔acle中旧的漏洞。向馅Web服务腹发送下面两兰个请求:馒:嘴//**.梦swust句.edu.悟cn/ge爆neral兆/vote油/show核/webs铸t/lis役t.php废?VOTE画_ID=1邻31漏:景//**.捉swust哗.edu.顷cn/ge减neral鹅/vote榆/show晚/webs芝t/lis天t.php恭?VOTE膛_ID=1版3'+'1醉在MYSQ洁L中,与其陕等价的请求挎为:阵:小//**.禽swust袄.edu.膝cn/ge著neral屡/vote涨/show赔/webs盐t/lis煎t.php眼?VOTE养_ID=1便31硬:材//**.棍swust丹.edu.钻cn/ge柱neral度/vote镜/show黎/webs悲t/lis肆t.php熄?VOTE悠_ID=1团3'屠'1劣如果两个请亚求结果相同振,则很可能够存在SQL皆注入漏洞。劫荐阴数据库响应疫测试SQL蹦注入攻击漏着洞时,可能都会从WEB盾服务器收到坑不同的数据涝库错误响应筝,所以对于灿这些错误的刺意义需要熟碧悉和掌握。皂图2-6展煌示了产生S也QL注入错冶误的过程和购WEB服务斯器对错误进京行处理得过胃程。马图2-6姿产生SQL沈注入错误的呀过程中的信小息流镜产生SQL丽注入错误的坊过程中发生心了以下事件承:北用户端发送宪请求数据,呈尝试触发S需QL注入漏忍洞。假设用籍户发送了一槐个带单引号检的值。忙WEB服务辨器接收到用括户端的请求验数据,并向回数据库服务肥器发送SQ瓣L查询。本把例中,在W足EB服务器达执行的SQ定L语句中包侮含了用户输蛇入参数并且票构造了一条那SQL查询俱,该查询因嘱末尾存在单验引号而导致陕语法错误。批数据库服务没器接收执行宴了格式不正喷确的SQL报查询,并向赛WEB服务谜器返回一条暖错误消息。稼WEB服务磨器接收到的馅来自数据库胖的错误向用沃户发送HT虾ML响应。环下面列举常纽见的SQL顺错误。乌SQLS肿erver绘错误需在请求中插乞入一个单引姿号在参数中稀会产生数据辱库错误。寨对于SQL榆Serv押er中,远铜程应用返回鸡类似于下列糖内容的错误丸,图2-7器所示:'峡图2-7拍SQL谁Serve为r错误嫁通过上面的坏例子,我们苏可以确定运炭行在数据库辟上的远程S蝴QL语句与仿下面的内容茫相似:坐SELEC法T*修FROM伴News魄WHERE认Arti母cleID游='265灭0''烛该Web应循用未检测单附引号,所以膏数据库服务更器响应返回书了一个错误虑。殿MYSQL劲错误哈下面介绍一情下典型的m啄ysql错饺误。MYS饥QL可以在纯很多架构和获操作系统下它执行,兼容吓性很好,常姓见的配置是废在装有li蒸nux操作童系统的ap冲ache灾web服务锻器上运行p暂hp,但它瓶也可以出现毅在很多其他堪场合中。锄下列错误通羽常表明存在跳MYSQL杏注入漏洞:颂Warni偶ng:my器sql_f吨etch_拍array慰(1):s雨uppli笔edar你gumen园tis耐nota耻vali党dMyS纯QLre枣sult因resou除rcei叨n/va贼r/on柄line么9箩骂自动寻选找SQL注森入芦刘对于SQL哈注入工具的溜开发,如何霞的适度的自价动化SQL董注入的请求败是其中的关源键。识别数惰据输入是可刊以自动化的对内容,它涉前及搜索WE祝B站点和寻动找GET及计POST请铲求。数据注饮入也可以自仙动完成,因探为上一阶段战已经获取了董发送请求所愧需要的所有款数据。若想微自动寻找S陵QL注入漏鲁洞,主要问溪题在于检测召远程服务器雄响应中的异焰常。溉屈对于管理员蚂来说,区别捡一个错误页福面或其他类握型的异常页油面非常容易苍;但对于程昂序来说,要售识别出服务伐器异常输出扫,有时会非德常困难。两胜某些情况下案,应用可以低很容易地检燕测到数据库杆发生了错误闲,如以下情暖形下:惜腰WEB应用警服务器返回想由数据库产购生的SQL艘错误;退宽WEB应用冶服务器返回螺5控00内部服宰务器无法执老行错误;娇疑某些SQL绞盲注情况下待。谊奥但对于其他效情况,应用己系统将很难鲜识别存在的竿漏洞,而且怎很容易出现书遗漏。所以怜,自动发现株SQL注入举存在着一定健的局限性,援自定义的测圈试和手动测痛试也显得非果常重要。露2.3镰SQL盲注减爹很多时候,估WEB服务童器为了安全恭设置关闭了床错误回显,猾但是这可以卖阻挡住SQ砌L注入攻击晶吗?当发现渡一个SQL障注入点,但宝应用只提供尾了一个自定偷义的通用的秆错误页面;沟或者虽然提绿供了正常的阳页面,但与哥期望的测试抢响应存在一民些小的差异灿。基于这种思情况下的S鸦QL注入攻脚击测试,都诉属于SQL隐盲注。廊连所谓祝“征盲注悟”坑,就是在在疲注入攻击W吊eb应用时飞,攻击语句瘦被带入到后涨台数据库中炼执行,但是盟服务器查不缴会返回错误毫或者执行结晓果的回显的胳情况下进行期的注入攻击扣。服务器没握有了攻击者递期望的错误肿回显,对于醋攻击者来说炕没有了非常宴重要的SQ限L注入攻击斩“鼠调试信息阔”饿,所以攻击赔者必须找到律一个方法来架从侧面验证糟注入的SQ砖L语句是否转得到成功执展行。钞马根注入带判定被的参数(T模iming酬Atta凑ck)握笔当已经识别输可能存在S隙QL注入漏太洞,但又没圣有正常的回蚁显的时候,透要想进一步丙确认和检测兰漏洞,一般魂可以提交包达含副作用的火查询参数。貌比较老的技腾术是使用t睬iming演atta幅ck,计时刮攻击。格2023年孝3月27日共,一个叫T予inKod做e领[很4俩]银的黑客在著亡名的安全邮僵件列表Fu幕llDi秃sclos币ure上公跳布了他入侵涉mysql铲的塘细节。这次忘入侵事件,堤就是因为一芒个SQL盲困注漏洞引起域的。悔据黑客公布利描述,当时舰这个漏洞是星出现在下面系这个页面,锄如图2-8兄:乌图2-8今mysql女漏眯洞页面必可以看到网括址URL:绝index辰.html催?id=1炕170,通仓过修改参数卵id后的数衔值,服务器宜将返回不同达的查询的客答户信息。这纤个漏洞中,损id=这个行参数链接就舅是一个很隐溜蔽的衰“巡SQL盲注塞”达漏洞,攻击谱者通过精心让构造id参摧数的URL策,就可以进还行SQL注构入攻击。利抓用通常的S府QL语句比失如命“口and1箭=2币”宰在此链接下研是无法看出卸异常的,因短为应用服务过器不会返回迟任何异常的牺数据。在这澡里,Tin滚Kode丑[邪4鞭]罩利用夕“文SQL盲注来”延的一个技巧号:Timi疫ngAt鸭tack,呼用来确认漏搜洞是否存在殿。亦在MYSQ站L数据库中陷,有个函数滑:BENC裙HMARK丙(),可以雪用来测试函急数性能。同病时它含有两拔个参数:啦BENCH属MARK(靠count樱,expr芹)付函数执行的社结果,是将蚊表达式ex嫌pr执行c科ount次用。比如:软mysql挽>SEL肯ECTB瘦ENCHM企ARK(1老00000贩0,ENC艘ODE('雹hello吊','dl惰lk));纱+----枣-----始-----绵-----耍-----静-----准-----骆-----滥-----苹-----斤-----羡-----辣-----萍-----返-----储-----湿-----请-+盖|扇BEN停CHMAR啦K(100盗0000,旁ENCOD矩E('he蚂llo',叉'dllk吊'))稻苦饱|艘|垒业绕券挎支耳泛蛾蚊宋0|阴+----勿-----期-----枕-----筒-----奖-----胁-----呀-----踪-----舱-----就-----菠-----哨-----俭-----稻-----独-----饮-----守-+龟1row件ins袜et(4拥.97s巩ec)岗就将ENC渣ODE('嫌hello滚','dl单lk)执行准了1000亦000次,牙共用4.9日7秒。稳因此,攻击宋者就可以利膛用MYSQ者L数据库中膊的这个函数趴BENCH丈MARK(历),在传入灵到后台服务束器的参数中瞒让同一个S呢QL函数在虏数据库中执诸行若干次,控然后通过服纹务器执行该揪SQL语句卸的时间的长昆短变化,就茄可以用来侧边面判别出S惰QL注入攻太击语句是否头已经成功的两执行。这个掉攻击利用技辨巧在盲注中红被称为Ti粪ming问Attac卷k。痛在此次my初sql.c习om的攻击箱中,攻击者钓接下来就是喷利用Tim夸ingA缴ttack茎攻击。比如瞧构造的攻击翻参数id值扩如图2-9做:沾图2-9宫Timin继gAtt漆ack攻击从语句1究这段攻击P歉ayloa问d首先进行革的是判断库御名的第一个梢字母是否为涉小写的w,仿即CHAR基(119)捡。如果判断资结果为真,蔽就会执行后朋面的BEN景CHMAR扑K()函数懒,执行该函省数就会造成慢较长的延时端;如果判断放结果为假,霜则该攻击语零句很快就会眉被执行完毕披,页面将很毒快得到加载鬼。这样,攻岩击者就可以违通过构造攻府击Payl截oad猜解章遍历出所有夹的库名字母慕,直到将整窑个数据库名俊全部猜解完奸成为止,然喂后进一步可辞以猜解遍历行出数据表明君、列明和数是据内容,将姻可以将整个医数据中的内笨容下载过来垃。表同时,攻击象者还可以通烧过以下Pa蔑yload绑获取到更多错有用信息,分图2-10租:牧图2-10伪Timi躁ngAt懂tack攻长击语句2于此外,攻击钓者可以通过悬利用Dum厌pFil傍e的方法如怖图图2-1劫1,来写入帜一个web厉shell栽木马:勇图2-11极Dump志File写伤如webs顺ehll述Timin茎gAtt娇ack是S舍QL盲注中斗的一种高级虎技巧。在各版种不同的数热据库中,都笔有与BEN吓CHMAR螺K()函数掩类似的东西祥。苹如MYSQ莲L:BEN顾CHMAR拖K(100波0000,旅MD(1)慧)or顷SLEEP骂(5)宗Postg菊reSQL废:PG_S采LEEP(凶5)or吨GENE根RATE_赔SERIE岭S(1,1见00000顾0)辈MSSQ垦LSer肆ver:W澡AITFO昂RDEL烧AY'0肌:0:5'订如,在Mi刃croso块ftSQ掌LSer峡ver中,勤可使用如下属SQL代码纱来产生一个售8秒的暂停导:邀WAITF疼ORDE粱LAY'惭0:0:8搏'糟同样,对于港MYSQL全数据库,攻歌击者也可以想使用SLE壁EP()函展数(该函数妙适用于MY芒SQL5.糠0.12及程以后的版本葵)来进行T槽iming四Atta柜ck。齐同时,攻击惭者还可以利天用应用服务蓝器的回显输盲出来进行判炮断。例如,楚若将注入下紫面的字符串僵:帖'AND勺'1'=嗓'2炸插入到一个翼搜索字段中芬,将产生与惹'OR雄'1'='烦1纽不同的结果访响应。禁脊学Param去eter喝Split商ting本andB巨alanc肠ing技术喂如果注入带滚判断的函数煮不起作用,构可以尝试奉“式param连eter例split舅ting劝andb仔alanc尤ing狗”拿(参数拆分顽与平衡)技颤术。霸拆分是指拆灭分正常的参浑数输入,平房衡则是指保骑证最终的查皆询与正常的漠输入是一致阴。其基本思燕想是:将正受常的请求参纹数进行拆分并,然后使用鼠SQL语句贫关键字对它拴们进行修改若,最终需保象证与原数据地不同,使得偏后台数据库豪服务器解析悠执行带入的疯参数时,与餐正常的参数至请求一样的右同时也带入茅了尘“环非法漠”爱的请求。或例如,在h伐ttp:/纵/**.s睡wust.消edu.c降n/vie嗽w_rev首iew.p复hp?id饥=5这个U企RL中,将负id参数的精值插入到一兆条SQL语何句中构成下遮列查询:学SELEC雪Trev涨iew_c衫onten辱t,rev速iew_a巷uthor魄FROM娱revi碧ewsW阅HERE绳id=5姻如果使用2守+3替换5险,那么输入陶应用中的参棚数将不同于疫原始请求中漠的输入,但唤SQL数据润执行在结果捉上是等价相陪同的:裁SELEC露Trev芝iew_c盖onten傻t,rev处iew_a猫uthor筹FROM佣revi咐ewsW遥HERE矿id=2+伤3哈这种方式不可仅仅只局限育于数字值型爹。仙假设htt毛p://*苹*.swu情st.ed代u/捉view_逼revie贱w.php姜?Auth虎or=dl密lk这个U释RL返回与余某一数据库题项目相关的御信息,我们掏将Auth战or参数的亭值放到一条亮SQL查询耻中构成下列恳查询:某SELEC促TCOU镜NT(id锯)FRO捆Mrev神iews通WHERE筐revi柔ew_ao据uthor眯='d幸llk'瓦可以使用特去定的数据库蜂运算符将d掉llk字符限串拆分,向事Web服务针应用提供与帖dllk相液对应的不同赞的参数输入幻。对于再o颤racle沫数据库的利世用中,可以涌使用萄“牛||展”蹄运算符来链土接两个字符张串:慎SELEC我TCOU粥NT(id受)FRO命Mrev岛iews勺WHERE浸revi墨ew_ao普uthor暖='d奔l'||'备lk'勾它与之前的溪第一个查询筐在最终执行咬的参数是等壳价的。苗下表2-1掏是带子查询潮占位符的拆陶分字符串参户数:革表2-1税带子查询占崭位符的拆分剖字符串好第3章曲SQL注入纪攻击技术研肃究艰3.1犯识别数据库示要成功进行店SQL注入番攻击,还有脏重要的一点送就是需要探总测出服务器插正在使用的迈数据库系统裤DBMS。偏若是攻击者攻连数据库系乘统都无从判元断,就不可最能构造出有烤效的内“归恶意窗”饥参数来进行悟SQL注入碧,也就无法宗实施攻击。涛通常WEB纲架构技术可潮以使我们猜糟测验证出数陕据库系统。您例如,AS窄P和.NE负T的WEB五服务应用通丰常使用的事餐Micro孔soft崇SQLS猾erver纽作为数据库钢系统,而P鲁HP应用则情很可能使用闯MYSQL束数据库。如甘果是用JA逗VA、JS寿P等编写的同,那么很有丝可能使用的杠是Orac广le数据库啄。味在识别SQ塑L注入漏洞鸦所存在的数姓据库中,如硬果不是SQ彩L盲注,通孔常情况下可善以很快的判裹断出数据库船系统。如果雾数据库响应瓶返回出SQ观L注入的错些误消息,一冈般都会在报饭错的响应中载可以找到是候何数据库系预统的线索。涨如图3-1殃SQL傅Serve撒r错误信息装:介图3-1遥SQLS刮erver喂错误信息积根据报错信透息可以很直狗接的就判断漆数据库类型塑为Micr亦osoft机SQL链Serve穷r。牢这种方法就暖是添加一个挥单引号将使摩得构造的S许QL语句参仇数带入到数柜据库服务器裕当作SQL次语句来执行司,这将产生夺一条语法错殖误而暴露出显错误信息。眼如图3-2咬SQL秩Serve斥r错误信息蝴:茅:考//**.敲swust窑.edu.轿cn/ge刊neral虏/vote乓/show威/webs袖t/lis显t.php摘?VOTE先_ID=1蓄31'礼图3-2攀SQLS筋erver旬错误信息耗在错误消息内中明确提到隔了干“肌MySQL赵”单,还附加了特一些关于出秘错内容的有再用细节。如嘴下表3-1堪返回各种D笛BMS所对均应的查询:威表3-1洒返回各种D材BMS所对怕应的查询雪例如,对于召SQLS谦erver伸2000沈SP4来断说,执行S敬ELECT蛮@@ver醉sion查陪询时,将得巩到如图3-露3所示信息袭:漏图3-3越SQLS享erver鞠2000德服务器返回趴信息漫如果应用服绸务器并不能语直接的在响戴应中返回所攀想要的数据孕信息,则需崇要一种间接喉的方法来触愈发获得想要度的信息。不宅同的数据库垒,在语法查攻询方式上有些略微的不同霞,不同的数习据库系统就伴会有不同的榆查询方式。君比如一个简无单查询如下毁:非SELEC拦T'so胁mestr迅ing'剪该查询语句鸟对于大多数闯主流的数据绝库系统都是昨有效的,对摩于不同的数润据库系统,幕将查询的字夺符串分成两郑个字串的S挂QL语句的瓶时候还是存究在有细微的料差异的,就众SQLS匀erver锦、Mysq养l、Ora竖cle来说择,如下表3怠-2:咏表3-2赢字符串分成纸两个字串的暴SQL语句乒假设Web桌应用中没有龄可以利用的马SQL注入盆字符串参数茎,则可以使蛮用之前数字奖参数类似的黄技术。这样悬的话就需要急一条针对特颠定情况特定恋技术的SQ菌L语句,使干得在服务器下经过执行S编QL语句后于计算后生成劈一个数字。仿在下表3-骂3所示列举也的SQL语哭句中,在对铃应的数据库芽系统上执行驰对应的SQ逢L语句后都厘会生成一个喇整数,而若微在其他不同扫的数据库下勤执行语句的甜话,就将会条产生错误。部表3-3押从数字函数风推断DBM截S版本黑3.2霉注入语句获宏取数据奶UNION益语句是数据笨库管理员经丢常使用函数昂之一。使用督UNION旦的SQL语能句,可以连芳接两条或多烘条SELE巷CT语句的膝联合查询得丢到结果。基射本语法如下姓所示:弱SELEC半Tcol福umn-1液,colu姐mn-2,巴...,c津olumn弄-NFR黎OMta跳ble-1UNION灿SELEC临Tcol欢umn-1妙,colu苍mn-2,盛...,c栋olumn录-NFR请OMta中ble-2货执行该查询意后,返回结窑果得到的是春由两个SE固LECT语各句返回结果蛙组成的表。将通常在默认堪情况下,得槐到的返回结呆果中只会包族含不同的数同值。如果想烂在查询的结炎果中将重复筒的值也显示垄出来,只需蜘要稍微修改劈下语法即可束:竞SELEC爬Tcol孝umn-1锄,colu擦mn-2,宝...,c究olumn匀-NFR敏OMta排ble-1樱UNION文ALL晒SELEC煤Tcol浮umn-1船,colu蓄mn-2,见...,c群olumn路-NFR岸OMta呀ble-2摧在SQL注论入测试攻击甩中,数据库趋的UNIO纸N查询方法虑对于攻击来普说作用很大馒:如果服务狸器可以正常酸返回第一个迹查询得到的哭数据,若想瓜修改加入数鸡据库UNI孩ON查询,紫便可以利用事读取到攻击闲者想要读取健的该数据库吃用户,然后邻就可以访问毯的其他的任鹊何一张数据会表。响如,如果想讽要找到li屋st.as由p页面执行虹的查询的数坚据表所返回车的列数,则逝可以按下列拆方式请求U含RL,直到蜡不再返回错先误位置信息疫:霜:典//**.婚swust网.edu.旅cn/li信st.as骗p?Id=手12+un旗ion+s米elect溉+null团--之:爽//**.警swust惜.edu.煌cn/li袍st.as左p?Id=曾12+un样ion+s心elect酱+null膊,null沫--猪:佩//**.治swust翻.edu.棍cn/li吗st.as脚p?Id=遵12+un疯ion+s笔elect扒+null音,null赤,null习--裳获取列的另罚一种方法是裤使用ORD剂ERBY桥语句,OR类DERB界Y语句并不吼是通过注入腾另一个查询羊语句来获得达查询结果。瓶通过增大O榨RDER忘BY子语耗句中代表列享的数字就可知以来识别查谷询中的列数萝,如下所示园:吓:秃//**.但swust兔.edu.来cn/li浓st.as挽p?Id=磨12+or皱der+b叉y+1匠:晒//**.斧swust胳.edu.赠cn/li就st.as立p?Id=抚12+or阅der+b滥y+2耗:妇//**.矩swust谷.edu.船cn/li辞st.as贫p?Id=盐12+or市der+b凑y+3...竹若在以上使羡用ORDE菌RBY圈9查询时收乘到第一个错患误回显,就胡意味着查询僚的数据库中岁包含的数据胀有8列。陡当攻击识别递出数据库的帆列数后,接域下来就是选恢择数据中的丽其中一列或俘几列来继续宴攻击查询数无据库中的数负据了。挎因此,如果蛇攻击者想提稿取一个数据拴库字符串值险,就可以通漫过它来保存位正在寻找的贡数据,以便狗找到一个字逮符串类型的敏列。攻击者悼可以用NU蛋LL来很容菜易的实现,孔只需要重复滤的使用字符薪串示例替换筛掉NULL菊即可。例如顾,如果原始书的数据查询遭中包含4列宅数据,则可叔以做如下尝县试获得字符尸串类型的列题:母:退//**.紫swust近.edu.热cn/li障st.as使p?Id=氧12+un烧ion+s富elect丝+'dll币k',nu奋ll,nu因ll,nu术ll研:子//**.沟swust绍.edu.蛋cn/li锻st.as艇p?Id=骨12+un兽ion+s懂elect僻+null条,'dll羊k',nu己ll,nu魔ll毕:裙//**.肺swust号.edu.泻cn/li队st.as搏p?Id=搜12+un顷ion+s挣elect翼+null界,null品,'dll胁k',nu遗ll鸣:纠//**.阁swust宾.edu.择cn/li削st.as混p?Id=据12+un伯ion+s浑elect漏+null吓,null袍,null眠,'dll矩k'域只要数据库旁没有返回错昌误,就可知舅道刚才存储姥dllk值址的列保存的苦一个字符串里,因此就可浙以用它来显剧示需要的值怠。例如,若环数据中第二棍列可以保存汤一个字符串让字段,则当璃请求下面的烈URL即可咏存储到第二泄列中:浩:香//**.浴swust腔.edu.棍cn/li宰st.as口p?Id=鹿12+un辆ion+s恰elect锻+null北,syst尘em_us趁er,nu伍ll,nu绍ll野而下列UR醉L则可以同盗时检索当前畏用户名和当卸前数据库名氏:哀:孝//**.疾swust羽.edu.掉cn/li遍st.as飞p?Id=薄12+un桥ion+s军elect哄+null疑,syst灾em_us沈er,db显_name讯(),nu弟ll语攻击者通过芳精心构造使铃用UNIO狼NSEL厦ECT的S调QL语句注悄入,就可以睬获取整张数脱据表。假设象攻击者已经嫌得到当前数错据库包含一郊张名为us须ers的表给,表中包含愤useri翅d、fir装st_na鼠me、和s韵econd鸡_name氏列。则可以贱使用下面的匪方式来获取擦用户名:截:瓜//**.匙swust研.edu.样cn/li扯st.as邀p?Id=烫12+un轻ion+s杀elect怎+user颠id,fi普rst_n之ame,s完econd薯_name澡,null搭+FROM萌+user录rs律使用UNI每ON注入任镇意查询来攻肾击数据库,够是一种既快屋捷又有效的辩攻击手段技取巧。但该方题法并不通用皮,WEB应尼用也没那么白容易就轻易江的泄漏数据掠库数据。网在Micr运osoft戒SQL成Serve县r中,对于冷攻击者来说日,攻击者最稿想了解的是子当前执行数碌据库查询的润应用用户是晒否是以系统束管理员帐户蓝(SA)运表行的。因为饼权限的不同魄,所能进行拦的查询和操号作就不同,挑在后续的扩意大渗透中,术在数据库上伶执行的敏感率的提权操作昏也会有所不孟同,对于攻娘击者的攻击祝的程度也不祝同。为确定倾是否为SA谦权限,可以吉使用下列注纤入语句查询签:虚IF(s骑ystem凡_user购='s祝a')W叼AITFO值RDEL耍AY'0个:0:5'白--辞该查询将转填换为下列U侍RL:吼:充//**.享swust狠.edu.格cn/li晕st.as赞p?id=耍12;if峰+(sys递tem_u拳ser=赛'sa'拾)+WAI承TFOR+炊DELAY鸦+'0:0济:6'-绍-冲语句中的S景ystem糟_user畏在SQL恶Serve梢r中是T-瑞SQL函数饥,这个函数脏在数据库中膛执行完成后喘会返回数据窝为当前登录荐的用户名。莫该Payl笋oad的执填行,是根据稿syste咳m_use资r函数执行三的值来判定炉是否执行W政AITFO食R函数(等邻待6秒)。琴攻击者可以银通过Web富应用查询后筐返回的结果促加载HTM迷L数据所花在费的时间来尸判定是否为闷SA用户。塑该Payl显oad的S絮QL查询语槽句尾部的两遵条横线是注裤释作用,可跃以注释掉所债有可能影响贯原查询结果赌的除伪造拼遭接的SQL乌攻击查询代剃码。棋上面基于时搭间的判定的恢技巧很灵活事,但是基于真时间判定的亡的方法不适巴合提取大量点信息。可以稼利用基于错妄误的判定的跃方法,如:找:赵//**.挖swust痰.edu.杜cn/li外st.as口p?id=忠12/is扒_srvr债oleme巨mber(岩'webd波min')梳is_sr佛vrole蛇membe疗r()也是沟SQLS西erver虫中的T-S稼QL函数,废当它被执行数,可以返回舟下列值:理1:用户属焦于该组。粱0:用户不之属于该组。歼NULL:少该组不存在割。亭我们假设用桌户属于we待badmi仅n组,那么性URL中的声id的参数粗应该等于1铜2/1,因馒此,Web且应用就会正奏常返回数据澡页面。如果尖当前的用户股并不是we储badmi静n组中的成度员,那么此脸时URL中拨的id值就翁是12/0租;这样的话访将会导致S知QL语句查济询失败,W浮eb应用返收回的结果是估一个错误。头对于返回的奇错误来说,朋错误的具体践消息内容肯茅定会各有千犯秋:错误可雀能只是由W追eb服务器虹相应错误返泪回的导‘候500i透ntern华alse张rver渗error着’伶,错误信息闲也有可能包素含了完整的腾SQLS点erver护错误消息,颂甚至由于管杨理员的限制节,错误的信谷息是管理员姨主动设置的马自定义的4灭04错误页嘉面。止对于WAI岭TFOR的逢基于时间的枯方法来说,偶基于错误来漠判定的方法对有个很大的结优点就是效发率,基于时悦间的方法涉修及查询延迟绢的问题,基解于错误的判沃定的方法的活请求可以马勒上返回注入姻利用的结果使。当然基于悉错误的方法颂缺点就是将物会触发很多皱错误,这些贩错误将会被跟记入到服务步器的日志当春中,这对于鹿攻击者来说伞是不愿意见肆到的。屯不过,可以乘稍作修改优棍化,例:漆:巡//**.天swust依.edu.晚cn/li患st.as尚p?id=握24%2B谋(case荣+when屯+(sys状tem_u宏ser='套sa')+查then+绩1+els预e+0+e喜nd)符%2B是滋“斗+究”卷的URL编漆码。最终将小按照下列式购子为id参疤数赋值:梦id=24卡+(c膜asew遣hen(蚊syste营m_use卫r='株sa')晓then亏1els旷e0e棵nd)鸣如果执行的纪不是sa,残那么id=闸24,请求晕等价于:乐:乓//**.氧swust旦.edu.广cn/li守st.as绳p?id=棕24背而如果执行迎查询的用户港是sa,那木么id=2围5,请求就身等价于:安:舌//**.荒swust惑.edu.种cn/li逝st.as逮p?id=炊25仆所以,攻击凑者就可以可恨以根据We膝b服务器查酿询后返回的助结果中加载臣的HTML乎中包含的字促符串的不同汉来判断当前子用户是否为板sa。究3.3食提升权限阻相所有的数据留库系统管理意员都可以对枝数据库用户转的权限进行珠很详细的很输细微的设置涛和控制。管铃理员可以为刚每个用户赋雁予一定量的鉴操作执行权必限来实现用民户对数据存稼储信息的访极问。通常一饥个数据库系贱统都可能包冷含了很多个奇数据库,但摸是攻击者利不用的数据库将的用户权限获只能访问其缝中某一个数危据库,在正孤常的情况下顿,其他的数巡据库都不能宿进行任何操理作,但是攻障击者目前掌厅控的数据库漫中并没有想弱要的信息。要或者是当前恩数据库的用博户权限可以谁读取所有数揪据库的内容抽,但是只有盾对于当前数谢据库有写权衰限,对于其睁他数据库不匙能执行修改兼操作。刑攻击者巩若想获取其量他数据库的星操作或者对碑于系统的其摧他地方进行湾操作,就需磨要更高的权蓬限。这个过巴程就是提升触权限。冤闭怎SQLS赠erver浙数据库的提傅权袜在Micr似osoft平SQL韵Serve露r中,使用紫命令OPE比NROWS袜ET是一个东很好也比较皱典型的的数呆据库攻击方风法。OPE净NROWS扣ET是可以航实现SQL坊Serv荒er对远程诵的OLE载DB数据源锯进行一次性掠连接,而D捆BA则可以腔用来检索和蓬查询远程数悉据库上的数怒据,这样就早可以作为连总接数据库的母一种方法。竹下面是典型粪调用OPE络NROWS侮ET的方法和,例:且SELEC阵T*F抹ROMO某PENRO薪WSET说('SQL贺OOLED邻B','N闻etwor兰k=DMS足SOCN'两;Addr毒ess=1护92.16涛口0;uid污=dllk疗;pwd=渴passw苹ord',赛'SELE族CTco冒lumnA粮FROM存tabl姜eB')辰上述语句中楼以用户dl式lk密码为汽passw启ord连接序到地址为1移92.16布陪0的SQL惜Serv件er数据库嫌并执行se悄lect棚colum粪nAfr架omta虏bleB查便询,并返回茶查询结果。船SQLS咱erver滑的OPEN钩ROWSE悄T在SQL亩注入攻击中耻有多种攻击教方式和技巧娃。例如在S幼QLSe缺rver铺2000上供,攻击者可塑以使用OP扁ENROW喷SET来进苍行暴力猜解搏SA密码并懒提升权限。例如:柳SELEC悦T*F锅ROMO雪PENRO扭WSET却('SQL址OOLED目B','N桃etwor摸k=DMS伶SOCN'低;Addr繁ess=x锋x.xx.尤x.x;u捉id=sa钞;pwd=冻dllkt青est',覆'SELE坑CTA'昆)铸若dllk栏test是紫正确的密码户,那么执行晶该查询并会乐返回结果A末;但若密码钱不正确,那殖么将收到下勿面的返回信辨息:槽Login恢Fail燥edfo已ruse胞r'sa夜'.嫩这样就可以盯构造一种暴塑力猜解SA末密码的方法娱。如果找到而正确的密码佛,接着就可终以使用sp玉_adds保rolem务ember辅存储过程来摊将用户添加轰到sysa牌dmin管耕理员组,这碗样就可以很颠容易地提升纱权限。喉命令OPE异NROWS惯ET同时也杏可以用于扫胃描SQL隶Serve谊r存在的弱叛口令,如:臣SELEC拉T*F前ROMO息PENRO毫WSET虑('SQL德OOLED殿B','N豪etwor雀k=DMS仿SOCN'韵;Addr辈ess=1滑92.16忽角1;uid控=sa;p扭wd=12刊3456'北,'SEL相ECTA柄')俗该语句查询置尝试以sa查帐号、密码斑为1234烈56、地址步为192.帅168.1工.11的S角QLSe割rver发清出登录验证覆请求。若想淘实现在某一割个网段内扫贯描所有IP元地址上的S县QLSe闹rver弱语口令就很容俯易。执行完税查询语句完浆成后会将结段果保存到一毁个临时表中这,然后可以广使用前面提仓到的一些方揉法都可以获乘取这些数据茂。耳拌贵Oracl冤e数据库的朽提权橡对于Ora推cle数据页库,通常通债过Web应姓用的来进行奖SQL注入诞利用提升权锈限的很困难梯。因为在O缺racle丑数据库中,快大多数的提框权攻击方法染都需要前提跟是PL/S酱QL注入,华而PL/S察QL这种注窄入漏洞通常洒都很少见。乓若碰到PL宪/SQL注由入漏洞,则传可以通过注枕入PL/S很QL代码来覆提升权限,陷以及在数据色库服务器上沈操作系统命耐令。洋在非PL/酸SQL注入台漏洞中,存信在有一个方辰法,漏洞是露出在ORA左CLE的m请od_pl团sql组件柔中。该漏洞纠的利用示例平如下URL功:摇:扔//**.内swust新.edu.百cn/li吹st_st钱mt?Sq第lstmt哀=GRAN闪T+DBA双+TO+P由UBLIC放攻击者在S开QL的接口得应用上提权北要简单得多畏。大多数提钉权过程都是牧用的以下的原步骤:鸽首先创建一件DBA权限黄并授权给p谱ublic殖的Payl奇oad。然染后将Pay链load注芦入存在漏洞已的PL/S采QL存储过扁程中。Pa相yload仗如图3-4辱所示:源图3-4摧创建DBA怕权限给pu易blic勿(2)下图毛图3-5然旬后将该Pa焦yload驻注入到包中逆:社图3-5姥Paylo雀ad注入伤图3-6所差示激活启用集DBA:令图3-6董激活DBA勇(4)图3唉-7所示从翻publi撒c中取消D疫BA:指图3-7迫从publ辅ic取消D存BA煎当前ses旁sion虽细然依然有D似BA权限,耳但不再是O足RACLE屋权限设置中紧了。话使用这种攻榜击的局限就援是前提利用熟要有CRE种ATEP禽ROCED血URE的权书限。腐歪堵获取口令h段ash辈SQL注入躬利用要想攻抛击得到口令穗hash,岂所以也必须阴构造一定的葛SQL语法搞传入数据库宿服务器进行馆查询检索。走一般很多W爷EB应用也隙是将WEB凡管理员的帐羊号密码存放及到数据库中螺。老(1)SQ洲LSer蜡ver床如果SQL两注入利用的钓环境是Mi索croso相ftSQ括LSer歼ver,但荡根据数据库劝版本的不同州,利用的方北式会差别很负大。但不管姥是那个版本晃的数据库,瞎都得需要有耀管理员权限歪猜能访问得裳到口令ha涉sh。枕举例若是数当据库为SQ捉LSer爱ver2良000,h除ash是存衡储在mas卖ter数据徐库的sys肿xlogi驰ns表里。劣我们可以通截过下面的语赤句进行查询爆得到:匪SELEC浮Tnam仆e,pas笋seord吨FROM忆mast池er.db既o.Sy正sxlog辛ins倦SQLS挽erver估2000茂数据中,存氧储的has利h是由pw葛dencr粗ypt()群这个函数生宣成的。这个阅函数并不是姻公开的,它秀会生成带盐逢的salt洁hash距,其中的s墨alt是一抱个和时间相最关的函数。怠(2)My森SQL爬MySQL比数据中,h充ash是存交储在mys牛ql.us兔er表中。华如下是可以滥获取用户名纳等的SQL卸查询语句:拼SELEC衰Tnam扇e,pas书sword沸FROM捡mysq私l.use色r;穗MYSQL斜数据库中的恐hash是良通过PAS沈SWORD觉()函数生驻成的,不同哭的MYSQ魄L版本函数右生成has午h的算法不磁一样。询(3)Or仁acle谜在Orac丧le数据库斤中,has相h是存储在蚊sys.u淹ser$表闪的pass倦word列殃中。其中d啦ba_us骄ers的视峡图指向于s渔ys.us辆er$表,权但是自Or躬acle袜11g开始诱,hash属不再出现在观dba_u咳sers视猎图中了,O价racle租的hash侄是数据加密业标准(DE较S)has毕h。sys扁.user孔$表中包含弓Oracl妨e数据库的勺用户以及h睡ash。代可以使用下贿列SQL查乏询来获得h宁ash,如珠图3-8所念示:爽图3-8靠SQL查询抱获得has努h某针对Ora叨cleD心ES角色匙hash,挠如图3-9责所示:袋图3-9墙查询Ora贩cleD丑ES角色h匹ash星针对Ora瑞cleS毛HA1h蝇ash(O原racle纯11g以渔上),如图姜3-10所共示:座图3-10冬Orac嘴le11番g以上查询栽SHA1榴hash始Oracl继e数据库安盲装时附带了埋很多其他的评默认表,这己些表中有时艳也存储着h绸ash,有彻时甚至还包旷含明文密码棕。很多时候棕明文通常都的是在Sys禽man.m测gmt_c孔reden俘tials盖2表中。什3.4估文件读写技牛术行义MyS望QL数据库咐的文件读写俗MySQL着提供了一个卧很敏感的功事能,该功能生经常被攻击曾者利用,该蠢功能是SQ炮L语句中可累以使用LO甚ADDA蝴TAIN猜命令来进行倘文件读取,深可以将文件森以文本文件炭的方式读取显存储到数据妥库中。粱下面来示例贺LOAD天DATA固INFIL善E的使用方仅法。柴创建一个文窜本文件,名熄为user饲.txt,愈如图3-1亮1所示:制图3-11介user骑.txt内径容蚕然后在My贼SQL控制少台下运行下粉列命令,作保用是创建一才张表来保存迟信息,如图慎3-12所姨示:仍图3-12校创建表迟然后使用下榨面的命令导梳入数据到表事中,如图3隔-13所示育:灯图3-13梅导入数据幕到表辉然后查询刚报新建的表,摊可以看到文彻本文件已经真导入到数据榨库中,如图围3-14所锅示:抬图3-14摸表中导入母的数据劈MySQL标数据库还提寄供了LOA最D_FIL底E函数来进士行文件的读章取,该函数仁可以不用创型建数据表就测可以直接查耐看到结果,霉如图3-1趋5所示:勾图3-15仍LOAD母_FILE蓬文件读取资攻击者通常族利用上面的偿命令函数来霞读取应用系纯统的配置文结件,甚至可蓬以通过读取正的编码转换姿变形等读取初到系统的h蝇ash文件步。蠢对于MyS拖QL写文草件,与在文声章前面的说福到的MYS丛QLLO辆ADDA锋TAIN盈FILE读寻文件命令有孩一个相对应旨的写文件的筛命令吃——假slect趟into雄out)为,就可以用昏来写文件。灵MySQL蒜的这条命令耗可以将se跟lect语体句的记过直锋接写入到一斧个完全可读挣文件中,同迎时,MyS私QL的du甜mpfil钩e允许直接盯写入二进制详文件。院写文件示例默,如图3-鸣16所示:展图3-16桃MYSQ甜Lout兽file写皂文件览上述示例中趋的SQL语案句执行后,馅会在/tm今p目录中创澡建一个te呆st.tx家t文件。翅嚼SQL仁Serv庭er数据库须的文件读写贺对于Mic锅rosof桐tSQL胃Serve虎r的文件读捐取方法,攻某击者通常借传用的最多的评就是BUL勒KINS男ERT语句装。先下图3-1趴7所示是使达用Micr村osoft公SQL雄Query溉Anal拥yzer进俩行的测试示珠例:吐图3-17然SQLS吃erver载文件读取测貌试近SQLS格erver懂的写文件可榆以使用前面脱说的读取文洗件的scr注iptin拘g.的方法波来有效地向悬文件系统写育文件。示例徒如图3-1瘦8所示:名图3-18家SQL羊Serve押r写文件测夕试加Micro蓄soft锅SQLS削erver移还可以从数皱据源创建文挑件的能力,行方法如图3后-19所示拜:吊图3-19动SQL担Serve陵r创建文件害对于SQL悟Serv夜er的SQ妥L注入攻击慰利用,很多传SQL注入地工具的都是糊使用xp_砖cmdsh御ell来实醒现文件操作轿。利用xp篇_cmds乔hell写杏文件最简单庙的方法,就蛾是使用重定占向符>>来脱创建文本文疲件,如图3阿-20所示茂:厘图3-20啊SQL求Serve教r利用xp臂_cmds卸hell写膨文件示例番淹Ora泡cle数据蒙库的文件读社写丹Oracl堂e数据库提踏供了很多与鹿系统底层的慨交互,有很乞多种方法底廉层系统操作宽读取文件的编方法,但是红其中大多数勺方法都是基秀于PL/S董QL代码才植能够运行。写Oracl础e中通过三供种不同的接稿口来访问文钉件:狗Utl_f商iel_d回ir/Or拦acle恳direc卸torie盒sJava喜Oracl悲eTex旅t小在默认情况戒下,非特殊魔权限的用户芦是没有权限州在操作系统闪层读写文件蓬的。岁Oracl骨e数据中攻霞击者读文件轨最常用的是犁使用utl鼓_和Ora坊cled高irect桂ories直这两种方法叉。使用ut典l_可以让休Oracl丧e数据库在脸系统中指定斑一个目录,劫数据库的用暂户都可以在若指定的该目疼录中进行文揉件读写。若烟设置utl郑_的值为*借,则用数据贱库写文件的榆操作就没有珠了目录限制寄。让下表3-4泰所示列举的慨就是使用u狐tl_d懒irect渣ories蛙的方法基于粮Oracl线e数据库来诸读取文件的市情景:不表3-4诚Oracl晕e数据库u河tl_d狡irect陡ories井的方法读文失件新下面提供的滥就是一个O蹄racle陵读取文件的俗示例,示例慕中利用PL脏/SQL代轰码读取了位吗于MEDI崭A_DIR洁目录下的一委个文本文件般rds.t扇xt,读取运了其中的1蛮000个字缩节。如下图疤3-21所仍示赏图3-21拣Orac撤le读取文混件rds.裹txt降萌自Orac捧le9i茧Rel.研2开始,O各racle苏数据库提供坟了从外部表愤读文件的功乒能。Ora胸cles数括据库可以使镇用SQL*停Loade加r或Ora按cleD唯atapu央mp从一定络结构的文件旷中读取到文誓件。洲下面的示例蛾是针对于从音外部表读取旬文件的代码胃,如图3-扮22所示:翼图3-22晚从外部表逃读取文件别在Orac朗le数据库理中,除了使死用utl_将、Orac输ledi削recto恳ry这两种航方法外,还贝可以使用J伴ava程序御来进行文件汽的读写。可示以在Mac询roIv词aldis止的Web站航点上找到该埋方法的示例译代码,网址甩为:赌除以上方法洪外,还有一心种是利用O虫racle楼Text猎,这是一种河比较少见的察读取文件的各技术。它需巡要将想读取仁的文件插入左到一张表中春,然后创建捡一个全文索颂引或者等待妥索引创建成灾功的过程状临态下即可。放下面示例代岩码就是利用浙Oracl虚eTex链t方法将b原oot.i浮ni插入到定一张表中,胶用以来读取色该文件,如司图3-23剩所示:蜡籍图3-23陈Orac丈leTe航xt方法将率boot.币ini插入装到一张表中师对于Ora搏cle数据屠库写文件,茎与读文件一戴样,同样提筑供了很多从拉底层操作系锅统创建文件粮的方法,可脂使用Utl拆_、外部表料、Java叶、操作系统专命令和重定顷向等方法来禁进行文件的柏写入操作。谢从Orac服le9i季以后,使用胳utl_f避ile方法醒可以在文件肆系统上写入窄二进制文件证。甩其中,DB叨MS_AD砖VISOR允基本是创建态文件最快捷测的方式,下宿面的示例创此建一个dl励lk.tx翼t的文件,岭内容为dl边lkte斯st:依Crea魔tedi梳recto木ryEX丛Tas戴'C\'衰EXEC篮SYS.杜DBMS_冒ADVIS艺OR.CR荒EATE_雨FILE苗('d桌llkt守est'.节'EXT击','dl欣lk.tx惰t')穗从Orac草le10办g以后,可关以使用外部捕表创建一个谨包含用户名彻和密码的文形件,如图3睛-24所示两:绣图3-24阴从外部创订建包含用户兔名和密码的检文件唱可以在牵Macro费Ival攀di的We狸b站点上找沃到Java撞的示例代码随:京3.5多执行系统命反令善执鉴行系统命令胜根据数据库迟来操作分别跑有以下几种殿方式:蓝MySQL草执行系统命贱令福MySQL碎数据库本身矛并不支持执翠行shel婚l命令。但贫大多数情况宰下,若MY狭SQL数据仙库服务器和伙WEB服务份器没有分离插,是位于同兄一服务器上壁时,这样攻晓击者可以先池使用占“梦selec朗tint百oDUM室PFILE践”侦的方法在服业务器上写上箩一个web董shell农,然后通过驾websh悲ell来对颈操作系统进简行控制执行奴命令。鉴SQLS泰erver丧执行系统命唉令贼在Micr页osoft裁SQL摸Serve依r中,可以谊利用xp_逢cmdsh恼ell的方裁法来直接执喘行所要执行观的命令。如竿下图3-2汤5所示:钓图3-25追xp_c严mdshe掀ll执行命组令吗SQLS秘erver吧在默认情况励下,是禁止单对组件症“织xp_cm狱dshel朱l吹”腰以及涌“梨sys.x种p_cmd炮shell杠”纺的访问的,决同时,此组郊件通常也在菜管理员进行微服务器安全腊配置时被关冬闭。但是系掌统管理员还熄是可以通过酱使用sp_盆confi黎gure的避方法来启用习“锅xp_cm搭dshel辛l谅”衔,这
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 教育系统例会考核制度
- 工程部 项目考核制度
- 小学各项工作考核制度
- 完善干部年度考核制度
- 工程造价评分考核制度
- 药品不良反应考核制度
- 广汽本田厂家考核制度
- 新闻考核制度实施细则
- 程序员kpi考核制度
- 4s售后站长考核制度
- 工厂运营筹备汇报
- 上汽大通员工管理办法
- 江苏省常州市2025年中考数学试卷附真题答案
- 蒸发浓缩结晶工设备调试考核试卷及答案
- 基于javaweb的图书管理系统
- 运动控制技术课件
- 东芝热泵式滚筒洗衣干衣机DGH-117X6D、DGH-117X6DZ产品培训资料
- 小学一年级文明就餐教育
- 道路工程试验检测课件
- 2023-2024学年高二入学考试物理试题及答案
- 中国参与国际通信海缆建设和保护相关情况报告(2025年)
评论
0/150
提交评论