这篇文章主要讲解了“mysql在Linux环境下如何进行文件读取”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“mysql在Linux环境下如何进行文件读取”吧!load_file 在渗透过程中也就是读取文件,或者sql盲注的时候可以通过dnslog加快注入速度。secure_file_priv :当 mysql secure_file_priv 配置项为空(空是””而不是NULL,NULL代表不可读取),或者指定的一个目录时,即可读取文件。mysql命令行查看 secure_file_priv 配置读取服务配置项:条件:1. 系统中关闭了 selinux2. 知道服务配置文件路径3. secure_file_priv 可读到 web 目录读取mysql 配置文件在Centos中,如果开启了 selinux,是无法读取到其他服务配置文件或者 /etc/passwd 的,需要将 selinux 关闭才能读取。在实际情况中,也许会有管理人员为了方便将 selinux 关闭。所以读取下其他服务配置文件是值得一试的。条件:1. 系统中关闭了 selinux2. 知道 web绝对路径的情况3. secure_file_priv 可读到 web 目录读取web源码,就可以简单的进行审计,查找突破口啦。条件:1. 系统中关闭了 selinux2. 知道 web绝对路径的情况3. secure_file_priv 可读到 web 目录load data infile 也是读取服务端文件的语句,同样的也是受 secure_file_priv的限制。基本用法如下:第一步,得有一个数据表,里头的字段能够存放的进我们要读取的文件:第二步,使用 load data infile 语句读取指定文件内容,并存入数据库:假设登入的用户权限较小,我们登入的用户只需要用 file 、insert 和 select 权限即可,然后随便找个数据表也可进行读取。如果要读取配置文件,也是一样的需要 关闭 selinux 才行。如果在 windows下,就没有这么多限制哦。当 secure_file_priv 配置项为空或者指定了一个目录时,且该目录mysql有写入权限。Mysql可写入文件注意:outfile 和 dumpfile 在 mysql 3.23.55版本之后,不可以覆盖文件。只能创建新文件条件:1.知道web目录2. secure_file_priv 可写到 web目录以php为例:dumpfile udf提权条件:1. mysql plugin 目录可写2. secure_file_priv 可写到 mysql plugin 目录由于 Centos 中默认 plugin 目录是不可写入的,如果要通过写入一个 udf文件的话,还需要设置其可写。但是不得不承认,现实中确实有这样的管理员,图方便直接将目录设置为777坑点:(1)udf文件版本一定要和 mysql对应。不知道mysql什么版本可以使用如下语句查询:(2)不要用 sqlmap 的linux udf文件,会报如下错误:因为sqlmap的udf文件没有 ELF 头:备注:sqlmap udf 路径为 /usr/share/sqlmap/data/udf/mysql/linux/要用 metasploit 的 udf 文件:备注:metasploit udf 路径为 /usr/share/metasploit-framework/data/exploits/mysql/(3)不能错用成 outfile ,这样子弄出来的 udf文件无法使用。估计是 outfile 进来的不是二进制格式,而是普通的ascii码格式:outfile 出来的文件格式(错误):dumpfile 出来的文件格式 (正确):使用 msf 进行 udf 提权,抓包查看其流程。注意:默认 mysql 传输过程使用了 ssl加密,直接抓包看不到内容。我们需要将其切换为 不使用 ssl 加密我们先停止 mysql 服务:给 mysql用户 /bin/bash权限:然后切换到 mysql 用户,执行命令:参数 –ssl=0 表示传输不使用 ssl 加密使用 msf 模块坑点:(1)如果msf反应 no session was created:说明可能没有选择 target 和 payload需要设置 target 为 Linuxpayload 设置 linux/x86/shell/bind_tcp 就好了。高级的 meterpreter可能无法弹回来(2)如果发现卡死了:这时我们需要连入 mysql,执行命令:这是因为之前没有设 target 和 payload 的原因,但 msf 已经创建好函数了,只是没有 payload 将其反弹。我们需要将原函数删掉,让msf 再创建一次才能弹回 shell抓包分析我们通过抓包,发现其直接写入十六进制码到 udf 文件中:我们先置空前面 msf 的操作:删除其上传的 udf 文件,删除函数(drop function语句)。我们自己手工来一遍:复制抓包得到的 十六进制码值,由于由 1w+字符,就不复制到这里了:连入mysql,通过 select dumpfile语句,将这一大串 udf文件的 十六进制码输出到 udf文件中:注意:由于是十六进制码,所以输出的时候不需要加双引号:mysql 成功写入udf文件后,使用语句 :即可创建一个函数,这个函数的名字和功能由 .so 文件已经设定好了的我们使用的这个 udf 文件的 函数名就叫 sys_eval直接调用即可:条件1.知道web路径本实验在Centos7 下使用 mysql5.7 ,先不说有 selinux 和 目录权限问题,由于 general_log 写出来的文件权限为 640,其他用户(apache用户)不可读。导致php文件无法执行。所以general log 的实验采用 windows 系统进行。注意:general log 不受 secure_file_priv 的限制哦基本环境:secure_file_priv 为 NULL,则 load file 和 outfile/dumpfile 皆不可用。查看 general log状态:一般 general_log 默认是关闭的,不过这个配置我们可以手动开起来。设置日志输出类型为文件:有时候 mysql 默认日志输出类型不是 FILE 而是 TABLE。如果是TABLE的话,是不会将日志输出为文件格式的。需要将其类型设置为 FILE设置输出文件路径:注意:windows 的路径分隔符为 ,但在 mysql 看来, 是转义符,所以我们得使用双斜杠: 开启 general log:由于一开启 general log,此时在 mysql 上的所有操作都会被记录下来。为了让输出的文件杂质少一点。我们细节一点最后再开启 general log注意:现在mysql连接方式有三种:Unix套接字;内存共享/命名管道;TCP/IP套接字;Linux或Unix环境下,输入 mysql -u免费云主机域名root -p123456 登录Mysql服务器的时候用的就是 Unix套接字 的方式登录Windows系统客户端和Mysql在同一台电脑上,可以使用命令管道和共享内存的方式TCP/IP套接字是任何系统下都可以使用的方式,使用方式为:由于Mysql有密码的时候,是通过发送随机挑战码来验证的,而没有密码的时候不需要发送随机挑战码。所以我们攻击Mysql的时候Mysql服务端必须是空密码才可以攻击成功。毕竟随机的会变的东西无法猜测,就构造不了payload了有密码的情况:(只发了一个字节过去就卡住了)而且TCP/IP默认采用了SSL,所以我们抓包抓的是密文包上文也提到,要强制不使用ssl,加个参数 –ssl=0:其实只要客户端和服务端任意一方不使用 ssl,整个 tcp传输过程都是不采用 ssl的客户端连接:坑点:mysql5.7有了个 validate_password_length 和 validate_password_policy,是设置密码复杂度的,而且就算密码复杂度降到最低,还是要验证密码长度,但密码长度最低只能为4个字符,所以无法设置0字符的密码。只能降低mysql版本再做实验。这里我做实验的是kali的mysql,这个可以设置空密码。但是一开始kali的mysql有点问题。坑点:kali中使用的是 MariaDB数据库,它缺省使用 Unix_socket。导致我们登录不需要输入密码,直接就登进去了,抓包也抓不到 tcp传输包。我们要将 MariaDB数据库 修改成使用 tcp 方式传输。修改配置插件(直接在 mysql 命令行打):刷新权限后即可:第一步、mysql创建实验用户:第二步、开个wireshark,监听lo网卡(lo网卡即为本地网卡,只会有localhost的流量)的包第三步、mysql中输入命令,并抓包:第四步、整理数据包:设置只看客户端发送的流量用hex模式查看将东西全部复制出去,只保留中间的十六进制值,每个值前加个 “%”变成如下的形式第五步、用curl测试:注意,这里需要加上 –output -才能显示完全。感谢各位的阅读,以上就是“mysql在Linux环境下如何进行文件读取”的内容了,经过本文的学习后,相信大家对mysql在Linux环境下如何进行文件读取这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是云编程开发博客,小编将为大家推送更多相关知识点的文章,欢迎关注!
相关推荐: IEEE 802.3ad 链路聚合与LACP的简单知识&EtherChannel 总结
IEEE 802.3ad 链路聚合与LACP的简单知识内容提要:本文主要介绍了链路聚合的概念以及链路聚合与EtherChannel(以太通道)的区别。说明:IEEE 802.3ad 是执行链路聚合的标准方法。从概念上讲,将多个以太网适配器聚集到单独的虚拟适配器…
免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。