• 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

  • 相关阅读:
    Express本地测试HTTPS
    在 WebStorm 中,配置能够识别 Vue CLI 3 创建的项目的别名 alias
    在线版本的ps
    功能强大的任务日历组件
    tree-shaking实战
    深入diff 算法
    【题解】[SHOI2001] Panda 的烦恼
    【题解】[JLOI2011]不重复数字
    「Codeforces Global Round #10」赛后个人总结
    【题解】[SCOI2004] 文本的输入
  • 原文地址:https://www.cnblogs.com/smileboys/p/10289793.html
Copyright © 2020-2023  润新知