SQL server 数据库测试
SQL注入测试利用需要俩个条件:入口点和入口点的利用。应用程序处理的任何控制参数都有可能存在隐藏漏洞。
- 查询字符串中的应用程序参数
- post请求主体的应用参数部分
- 浏览器的相关信息
- 主机的相关信息
- 会话的相关信息
SQL sever 有一些独特的特点,因此需要为这个应用程序专门定制一些漏洞。
测试
SQL sever数据库的特点
注释操作符:--(用于强制查询忽略原始查询的剩余部分,并不是所有的情况都是可以用到)
查询分离器:;(分号)
有用的存储过程包括:
- [XP_cmd_shell]以相同的权限执行服务器中的shell命令,默认情况只有admin才能使用它(且默认是禁止的)
- xp_regread 从注册标志中读取任何值(无文档记录的拓展过程)
- xp_regwrite 写入任意值到注册表(无文档记录的拓展过程)
- [xp_makewebtask]生成一个window命令shell,并传入一个字符串执行。任何输出都作为文本返回。他需要系统管理员权限
- [sp_makemail] 发送一封电子邮件指定收件人,其中可能包含查询结果集附件。
SQL sever的内置函数环境变量非常方便,下面的代码可以使用db_name来触发一个返回数据库名称的错误
/controlboard.asp?boardID=2&itemnum=1%20and%201=convert(int,%20db_name())
注意convert的用法
convert(data_type[(length)],expression[,style])#convert将尝试将db_name(字符串)的结果转化为整数变量,而触发一个错误,如果程序存在漏洞就会显示该错误,该错误包含数据库的名称。
/form.asp?prop=33 union select 1,'state','name1','name2','@@version' --
相同的攻击可以转换技巧:
/from.asp?propbardID=2&itemum=1 and 1=convert(int, @@version)
通过SQL注入攻击或直接访问SQL探针器,收集信息有利于SQLsever上的软件漏洞的利用非常有用
例子:
1.测试SQL注入通过request请求
最简单(有价值的情况)登录页面请求用户登录时的用户名和密码,你可以尝试or '1'='1"(没有双引号)
https://www.example.web.app/login.asp?username=' or '1'=1&password=' or '1'='1
http://vulner.web.app/list_report.aspx?number=001 union all 1,1,'a','%FROM% users;--
2.post请求测试
3.referer/user-Agent
referer报文设置
referer:http://www.example.web.app/login.aspx,' 'user_agent','some_ip';'[sql code]--
user-agent:user_agent','some_ip';[sql_code]--
4.SQLsever作为端口扫描器
在SQL sever之中openrowset是最有用的命令之一,它用于在另一个服务器上查询并检索结果,渗透测试可以使用该命令扫描网络中的其他机器
select *from openrowset('SQLOLEDB','UID=sa;pwd=foobar;network=dbmssocn;address=x.y.z,p;timeout=5','select 1')--
此语句尝试连接端口p的地址xywz上的端口p,端口如果关闭
SQL server does not exit or access denied
另一方面如果端口是开放的,则会返回一下错误
general network error. check your network documentation
#注意openerowset在SQL sever在2000是默认开启的,在2005是禁用的
5.上传可执行文件
一旦我们可以 使用xp_cmdshell(本机或者自定义的文件),我们就很容易在目标DB服务器上传可执行文件。通常我们可以使用netcat,但是我们可以使用任何的免杀木马代替
SQL盲注攻击
1.实验与错误
需要运气,攻击者认为在web程序中存在盲SQL注入漏洞,然后选择一个攻击向量(例如一个web入口),使用模糊向量对其进行测试和对其响应的观察。
select * form books where title=text enter by the user
可能会输入"Bomba or 1=1-"并且它的数字没有被准确的验证过,查询将返回整个列表,表明存在SQL注入漏洞。
2.延时注入
3.检查版本和漏洞
4.基于多个错误响应
注意:这是和具体情况具体分析,多方面分析的过程。
工具:
SQL power injector
bobcat
SQLninja
SQLmap