SQL注入的攻击步骤:
1、确认注入攻击目标网站 2、目标网站的一般信息的收集、分析与提取 3、网站技术分析:寻找和测试可用注入点,网页输入输出机制分析 4、探子回报:注入SQL确定数据库类型,当前账户权限级别 5、提权分析:根据用户级别确定是否可以与系统层交互提权,是否可以与数据库层交互提权,是否可以获取web后台管理员权限的可能性 6、网站可用SQL注入类型测试,盲注?显注? 7、盲注策略:使用注入分析工具替代人工 ? 显注策略:第三者上位
攻击的准备–信息收集与分析
1.信念: 没有无用的信息 黑客们都相信不存在无用的信息,只要是人为,就会存在漏洞的可能性,就算是黑客高手写的代码同样有可能存在漏洞,如何信息都会透露背后的另一层信息. 2.一般信息的收集\分析\提取 2.1域名信息 2.2域名信息的扩展信息,比如注册人,公司,联系电话等等 2.3网站相关的工作人员的信息
一、常用注入点:
a.表单中的输入域 b.URL的参数 c.Cookie或者隐蔽域
二、如何发现注入点:
1、表单中的输入域,Cookie或者隐蔽域 ? 想要对网页输入输出机制进行充分的分析、过滤和提取,并了解其执行注入SQL的可能机制,比如输入field,cookie,url参数的变量名是什么,如何传递给数据库引擎。 2、URL的参数 ? 字符类型参数:单引号 ’ 或双引号测试是否可以闭合 ? ’ and ‘1’ = '1 不变逻辑,测试网页或者程序显示正确 ? ’ and ‘1’ = '2 空集逻辑,测试网页或者程序显示不正确或者报错 ? ’ or ‘1’ = '1 全集逻辑,测试网页对数据量的处理是否变化 ? 整数类型参数: ? and 1=1 不变逻辑,测试网页或者程序显示正确 ? and 1=2 空集逻辑,测试网页或者程序显示不正确或者报错 ? or 1=1 全集逻辑,测试网页对数据量的处理是否变化
三、探子回报应用–数据类型确认
数据类型确认:Version() 网页注入测试:
and substring(version(),1,1)=5
返回正确说明: 1.数据库为mysql 2.对执行数据库函数未过滤 3.对括号未过滤 4.可能对子查询未过滤 5.可注入复杂逻辑 6.评估注入可进行的程度
四、探子回报应用–用户权限级别确认
用户权限级别确认:user() 网页注入测试:
and (select length(user()) from mysql.user where user like 'z%')>1
返回正确说明: 1.对mysql字典数据库有权限,否则无权限。 ? 如无权限,则对密码获取受限,必须另想它法,如web网站后台管理员密码。 2.如对mysql字典库无权限,则需要测试对information_schema字典库测试权限:
and (select count(*) from information_schema.tables where table_schema=database())>1
返回正确则说明,对information_schema字典库有权限,可以获取所有数据库、所有表、所有字典信息。对攻破web后台管理员权限有帮助。
规避检查注入思路
1.规避程序检查注入示例 or–+2=!!!2类假!!!2为真的结果,利用不变逻辑的!!!替代空格
注释替代 andseleunamefromusers
+号连接字符替换 2.通用规避程序检查注入 十六进制码替代%20 ASCII码替换char(32) 例如:回避单引号检查注入
and substring(user(),1,1)='z'
替换成 and ascii(substring(user(),1,1))=122
SQL注入系统交互提权
1.与系统层交互的方式 1.1读和写磁盘文件 1.2直接执行命令 与系统层交互提交,取决于mysql服务器进程以什么权限运行,程序连接的数据库账户以什么权限级别使用。 2.读取文件 2.1读取/etc/password文件
select load_file('/etc/password')
盲注时配合substring,char,ascii等 2.2读取网站配置文件以获得用户名和密码信息
select load)file('/var/www/weba/dbconfig.comf')
3.写入有数据库连接的留后门脚本
select '<script language="javascript">执行代码</script>' into outflie '路径';
路径:/var/www/weba
!!! 具体的注入攻击方式有时间会再写出来 例如: union联合注入\报错注入\延时注入\逻辑注入\盲注等等
|