利用:我们可以自己去构造一个恶意的Mysql的服务器来实现读取客户端中我们想要的文件,构造服务器最重要的的部分是:在任意时候都能回复一个file-transfer请求,而不是只在客户端发送LOAD DATA LOCAL数据包时才去响应回复file-transfer请求。 所以,只需要客户端在连接服务端后发送一个查询请求,服务端立刻回复一个 file-transfer,即可读取到客户端的本地文件,而常见的 MySQL 客户端都会在建立连接后发送一个请求用来判断服务端的指纹信息 构造File-Transfer数据包 在官方文档中是有构造示范的 ? 我们可以通过官方文档来具体了解一下这个数据包的结构到底是怎么样的 ?
插件提供上传和下载文件的方法,使用上很便利 ionic cordova plugin add cordova-plugin-file-transfer npm install --save @ionic-native/file-transfer ionic-native/camera'; import {File} from '@ionic-native/file'; import { FileTransfer } from '@ionic-native/file-transfer ionic-native/camera'; import {FileTransfer, FileUploadOptions, FileTransferObject} from '@ionic-native/file-transfer
MySQL 官方文档中有一句话是这样说的: "A patched server could in fact reply with a file-transfer request to any statement , not just LOAD DATA LOCAL" 意思就是,伪造的服务端可以在任何时候回复一个 file-transfer 请求进行客户端与服务端之间的文件传输,不一定非要是在 LOAD DATA 总结一下漏洞的成因: LOAD DATA INFILE 读哪个文件是由服务端返回包的 file-transfer 请求决定,而不是客户端。 不管客户端发出什么请求,只要服务端回复一个 file-transfer 请求,客户端就会按照LOAD DATA INFILE的流程读取文件内容发给服务端 总结一下整个攻击流程: 受害者向攻击者提供的服务器发起请求 和PDO,Java的JDBC Driver以及原生MySQL客户端等,在连接MySQL的时候,基本上在连接成功之后都会发出一些 SELECT 语句来查询一些版本号、编码之类的数据,这时就可以回复一个 file-transfer
function onFail(message) { alert('拍照失败: ' + message); } } // file-Transfer
Security Considerations for LOAD DATA LOCAL:A patched server could in fact reply with a file-transfer
outbuf=N|L|B set out buffering to None, Line, or Block --stats give some file-transfer
constconnection=awaitthis.createPeerConnection(peer);constdataChannel=connection.createDataChannel('file-transfer
-blocking-io use blocking I/O for the remote shell --stats give some file-transfer
-blocking-io use blocking I/O for the remote shell --stats give some file-transfer
blocking-io use blocking I/O for the remote shell --stats give some file-transfer