zoukankan      html  css  js  c++  java
  • 注入漏洞小总结

    注入漏洞

    注入漏洞是对于解释性语言,用户与服务器交互式可以输入语句,成为程序执行的一部分

    一sql的基本语句

    增:insert into 表名(列名) values(值)
    删:delete from 表名 where 条件
    改:update 表名 set 列名=新列名 where 条件
    查:select 列名 from 表名 where 条件

    二mysql的基本知识

    1、5.x的版本存在一个数据库information_schema,存储数据库的原信息。在schemata存数据库名,在table存数据库名和表名,在columns存数据库名表名和字段名。
    2、mysql注释:#或--空格或 /** / 。还有内联注释/* * / 只有mysql可以识别,利用此借以绕过防火墙
    3、常用函数:
    user()查看当前mysql登录用户名
    database()查看当前使用mysql数据库名
    version()产看当前mysql版本

    三sql注入类型

    1、基于报错的注入

    id值一般闭合:id=1 id='1' id=('1') id=("1")
    加‘ 进行判断,根据报错信息,进行闭合,并将之后的字符串注释掉,有双引号时无报错,用进行转义看报错信息。

    一般利用步骤:

    (1)利用order by判断字段数
    (2)利用union select 联合查询,获取表名 0‘ union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database() --+
    (3)获取字段名0' union select 1,group_concat(column_name),3 from information_schema.columns where table_name='users' --+
    (4)获取字段值0' union select 1,group_concat(username,0x3a,passsword),3 from users --+
    (5)也可以利用user()等函数输出一些信息。如0' union select 1,user(),database()--+
    post与get的区别:注入位置不同,无法通过浏览器直接修改和查看错误信息,需要通过插件来实现——使用bp截断

    2、不再显示错误信息的盲注

    盲注是向数据库发送true或flase的语句,通过返回的信息判断结果,有基于时间的盲注,有基于布尔的盲注

    get基于时间与布尔的盲注

    通过时间差来判断if (ascii(substr(database(),1,1))=115,1,sleep(3))substr是将数据库的名字的从一移动一个位置的字符,通过ascii变为ascii值与115即s的ascii值进行比较,如果正确就执行一次sleep(3)
    通过length(database()) ascii(substr(database(),1,1))> < = 某个值来不断猜解数据库的名称

    post基于时间与布尔的盲注

    与上基本相同,不过是用到bp,如时间可用 admin' and (select (if(length(database())>5,sleep(5),null)))

    3、mysql注入读写文件

    读:

    前提:尽量有较高大权限,secure_file_prv的值必须不为空(可以在mysql.ini中配置)
    在注入点构造 0' union select 1,load_file("绝对路径,中间要用//隔开"),3--+
    

    写:

    前提:general_log=on(可以在mysql.ini中配置)
    在注入点构造 0' union select 1,'写入的内容',3 into outfile '绝对路径,中间用//隔开' --+
    

    4、http头的注入信息

    一些对用户输入的进行过滤,但一些插入到程序中的http头的信息没有过滤,可能有referer,user_agent等

    5、cookie注入

    cookie存在客户端,如果带入函数中,也不加过滤,可以在cookie处构造注入。查看cookie:可以在浏览器通过document.cookie查看。一些可能通过base64编码,所以构造的语句要进行base64编码

    6、二次注入

    首先用户向数据库提交信息,之后利用这些信息进行注入
    如,用户首先注册一个admin'-- -的账户,在修改密码时,即可将admin的账户的密码修改为任意密码
    其中因为没有相应过滤,且修改密码时的语句update 表名 set password= where username= and password=
    当带入admin'-- - 后将后面的注释

    7、access偏移注入

    当得知表名,却无法通过暴力破解得到相应的字段名。通过数据库的自连接使数据库乱序,显示出偏移处的字段
    order by 判断字段数,比如为10,通过union select 1,2,3,……,6,* from 表名,则10-6=4, 10-4* 2=2即通过union select1,2,a.id,b.id ,* from(admin as a inner join admin as b on a.id=b.id)

    8、宽字节注入

    php中可能通过addslashes函数将单引号等转义
    这时如果mysql使用的是gbk编码可以用宽字节注入绕过
    即用%df%27(%27是单引号的url编码)通过函数转义后变为%df%5c%27(%5c为/)
    这时因为gbk编码占用两个字符,所以%df%5c组成到一起,使引号能够起作用闭合

    四注入绕过

    • 大小写绕过
    • 双写绕过
    • 通过url编码绕过
    • mysql中通过内联注释绕过
    • 绕过去除字符串的注入:这时不能用注释符注释掉后面的引号,可以通过 or '1'='1闭合后面的引号,如id=-1' union select 1,database(),'3在3处闭合
    • 绕过去除and or 的注入:可以大小写,双写,内联用&& ||等
    • 绕过空格:可以通过url编码
  • 相关阅读:
    银行数据仓库体系实践(6)--调度系统
    银行数据仓库体系实践(5)--数据转换
    银行数据仓库体系实践(4)--数据抽取和加载
    银行数据仓库体系实践(3)--数据架构
    银行数据仓库体系实践(2)--系统架构
    银行数据仓库体系实践(1)--银行数据仓库简介
    敏捷开发和传统开发区别
    source ~/.bash_profile是什么意思
    oracle里的DBLINK是做什么的
    flex-direction的值及使用效果
  • 原文地址:https://www.cnblogs.com/Qi-Lin/p/11334134.html
Copyright © 2011-2022 走看看