Blog被人渗透了一下,不知道各位掉了什么东西没有。原来有一次blog的目录可以列出来,那次我掉了一个小东西,然后今天别人告诉我NBSI 3用了那个东西的方法……呵呵,有点晕,就是下面的,成功率还是很高的,大家可以试试看。嗯,方法流出去无所谓,文章留着吧。

  dbowner通过注射得到一个shell应该不是什么难事情了,比较麻烦的是就算利用增量备份,仍然有很多不确定的因素,如果之前别人有过什么错误的写入信息,可能备份出来得到的还是一些不能用的500错误,如何能够提高成功率及重用性呢?如果单从调整增量备份的方式来看,尽管能够达到一些效果,但是方法比较复杂而且效果不明显。加上关于重用性的考虑,例如多次备份的成功率,backup database的方法并不太适用。这里将要讲述的是另外一个备份的方法,导出日志文件到web目录来获得shell。

  饭要一口一口的吃,技术问题也要一个一个的解决,得到webshell首先要知道物理路径,然后才能说其他的。关于物理路径的暴露有很多方法,注入也可以得到,这点nbsi2已经做到了,就不再多说。值得注意的是,如果数据库和web分离,这样肯定得不到webshell,备份出来的东西可以覆盖任何文件,一些关于开始菜单的想法还是有效的,只要注意扩展名就好。扯远了,反正如果数据库和web在一块的,你就有机会,反之还是想其他的办法吧。

  然后你要得到当前的权限和数据库名。如果是sysadmin当然没有必要做很复杂的事情,dbowner足矣,public则不行。当前打开的库名用一个db_name()就可以得到,同样很简单。

  默认的情况是,一般选择的数据库故障还原类型都是简单,这时候不能够对日志文件进行备份。然而我们都是dbowner了,还有什么不能做的呢,只要修改一下属性就可以。由于不能去企业管理器中修改,只有用一段SQL语句,很简单的,这样就可以:

alter database XXXX set RECOVERY FULL

  其中XXXX是你得到的数据库的名字,执行过后就可以备份日志了。这种修改是破坏性的,因为你不知道以前的故障还原模式是什么,细心的管理员看到异样,可能就要开始起疑心。如果之前你能得到数据库的状态,最好还是在备份完以后把这个数据库的属性改回来。

  剩下的事情就是怎样让数据库用最原始的方式记录下你的数据了。这一点和backup database中设定表名为image的问题相对应,如果你只是建立一个之类的表,日志里面的记录还是以松散的格式记录的,也就是< % % >,没有任何效果。通过实际的测试,发现还是可以通过与backup database类似的方式记录进去,如下:

create table cmd (a image)
insert into cmd (a) values (’’)
backup log XXXX to disk = ’c:xxx2.asp’

  这样你已经得到一个webshell了。

  到这里就完了么?没有,呵呵,我们继续。

  到这里有两个分支方向,第一个,让注入的时候不出现单引号,太简单了,我都懒得写;第二个,减小这个webshell的长度以及提高成功率。下面的方法就是讨论第二个分支问题的,同样适用于backup database的减小。

  首先是初始化这个日志。

backup log XXXX to disk = ’c:caonima’ with init

  这样有点类似于增量备份的第一步,不过有点不同的是,你做了这个以后,你备份出来的可用的shell是固定的。这一点比较重要,因为有了这一步,不管管理员在数据库里面做了什么扰乱你back database的手脚,或者你之前有多少混蛋(你肯定会这么想的)弄了些你不喜欢的东西,都没有关系,甚至你做过以后,别人在后面再按照你的方法来一次,还是会成功,这对于偶尔出现的反复,比如对方机器重装但是数据库和代码没变,有不小的帮助。

  然后是调整一下backup中各个语句的顺序。通过第一点,大概的步骤已经确定下来了,那就是:

alter database XXXX set RECOVERY FULL
backup log XXXX to disk = ’c:Sammy’ with init
create table cmd (a image)
insert into cmd (a) values (’’)
backup log XXXX to disk = ’c:xxx2.asp’

  这样不好,感觉上多了一条没用的东西。

create table cmd (a image)

  确实有点讨厌,不过这句是必要的,只好调整一下位置,弄到其他地方去。调换一下顺序似乎还可以小一点,对于backup database中的增量情况同样是可以的,backup database甚至可以仅仅在update后马上备份,不过由于涉及到了数据的存储格式,情况很复杂,这里不讨论。调整后的是:

alter database XXXX set RECOVERY FULL
create table cmd (a image)
backup log XXXX to disk = ’c:Sammy’ with init
insert into cmd (a) values (’’)
backup log XXXX to disk = ’c:xxx2.asp’

  成功的话,备份出来的shell(上面的2.asp)有78.5k,文件长度固定的是80,384字节。很挑剔的朋友也可以接受了吧,当然用这个来生成一个干净的木马也可以——这本来就是顶端cs木马的s端,很通用的。

  到今天为止(2006.07.06)的各类存储卡的报价:

 

Multi Media Card–MMC卡
容量 创见 EagleTec PQI Kingston 威刚 Kingmax
128MB
256MB 115 75
512MB 115 110 110 95
1GB 220 160
RS-MMC 128MB 90
RS-MMC 256MB 95 110 100 110 90
RS-MMC 512MB 120 135 135 120 120 100
RS-MMC 1GB 240 220 215 235 195
 
Memory Stick–MS记忆棒
容量 SanDisk LEXAR Sony

   Memory Stick Pro

256MB长棒 170
512MB长棒 250
1GB长棒
2GB长棒 350
UltraII 2GB长 390
UltraII 4GB长 820
ExtremeIII 2GB长 430

  Memory Stick Pro Duo

256MB短棒 155 170
512MB短棒 175 170 280
1GB短棒 285 275
2GB短棒 565
UltraII 2GB短 875
 
Compact Flash–CF卡
容量 SanDisk KingMax Kingston LEXAR PQI 威刚 创见
128MB 85
256MB 138 100 115
512MB 155 125 130 120 140 140
1GB 215 225 225 225 245 215
2GB 420 418
高速256MB
高速512MB 165
高速1GB 265 385
高速2GB 455 690 420
高速4GB 1050 3820 848
高速8GB 1850
ExtremⅢ 1GB 395
ExtremⅢ 2GB 905
ExtremⅢ 4GB
UltraⅡ 1GB 315
UltraⅡ 2GB 705
UltraⅡ 4GB
UltraⅡ 8GB
 
xD-Picture Card
容量 OLYMPUS 富士 LEXAR
128MB
256MB 205 190 195
512MB 310 280 290
1GB 415 410
 
Secure Digital Card–SD卡
容量 SanDisk KingMax Kingston LEXAR EagleTec PQI 威刚 创见
128MB
256MB 70
512MB 95 85 95 125 100 95 85
1GB 175 165 175 195 190 165 170 165
2GB 370 345 385 330
高速256MB 85
高速512MB 180 100 100 110 120
高速1GB 310 230 245 220
高速2GB 620 350 455 800 415
高速4GB 710 1650 848
 
Mini Secure Digital Card–Mini SD卡
容量 SanDisk KingMax Kingston EagleTec PQI 威刚 创见
128MB 60
256MB 90 95 95
512MB 100 110 125 130 125 125 125
1GB 195 195 225 210 215 235
2GB 415
 
Micro Driver–微硬盘
容量 日立
2GB 870
4GB 1380
6GB 1990
 
TransFlash–TF卡(Micro SD)
容量 SanDisk Kingston 威刚 Kingmax
128MB 125 70 60
256MB 90 100
512MB 185 150 150
1GB 300

经典啊!两队一直互攻!一直到加时赛最后3分钟,意大利接连进二个球。2:0淘汰了德国队!精彩啊!

格罗索!皮耶罗!特别是格罗索的那一脚弧线球!那个帅啊!!!

图片附件:
u1340p427t6d93068f172dt20060705065857.jpg

因为现在把yngps.cn转到了新站点,一些老的软件下载地址就不好找了。我发它发到我的Blog上吧,大家也好Download:

 

 

地图下载

昆明交通图
昆明百姓生活休闲旅游图(农家乐地图)
昆明地区地图(四区八县)
云南交通图

上面OZI格式的地图都是经过校准的

 

   

 

 

城际通PC版,附特殊文件:
ftp://ftp.yngps.cn/CJT.zip

灵图3.05 PPC绿色版,Copy到卡即可使用。让输入序列号的话随便输入
ftp://ftp.yngps.cn/LT_3_05_10_For_PPC.rar

中国电子地图2005
ftp://ftp.yngps.cn/MapChina.2005.rar

中国电子地图2006
ftp://ftp.yngps.cn/MapChina2006.zip

北京电子地图2006
ftp://ftp.yngps.cn/bjmap2006.rar

广州电子地图
ftp://ftp.yngps.cn/gzmap.iso

以上软件仅作个人测试用,如要使用请购买正版软件。

平时在网上浏览,不可避免会“逛”到一些国外网站上面。面对一堆“鸡肠”,没那几年英语学习的功夫,很难不头晕目眩。不过车到山前必有路,其实我们不必捧着字典逐字逐词查找,完全可以通过网络解决这些问题——网络中的很多在线翻译网站,可以提供我们所需要的翻译服务。

现在大部分在线翻译网站使用的都是机器翻译。机器翻译是一项允许您用某种语言输入文本然后由计算机将其翻译为另外一种语言的技术。尽管机器翻译并不能创造尽善尽美的翻译,但至少可以向一部分不大熟悉外语的用户提供一些阅读要点,了解文章大意。

下面我们来介绍一些比较好用的在线翻译网站:

Google的翻译功能
地址:http://www.google.com/language_tools?hl=zh-CN

提起在线翻译首先要说的当然是Google的语言工具。除了可以在搜索结果页面上点击“翻译此页”,直接得到该页面的中文翻译结果之外,在主页上选择“语言工具”也可以进入Google的翻译工具栏。

Google的翻译工具除了可以实现大段文字的翻译,还提供整站翻译,在“翻译网页”处输入网站地址,选择好目标翻译语言即可。翻译工具可以实现中文、英语、法语、德语、意大利语、日语、朝鲜语、葡萄牙语、阿拉伯语以及西班牙语等主要语种间的互译。

优点:得益于所存储的海量信息,Google的在线翻译质量相对比较高。基本上,在Google上翻译过来的中文,仅仅存在一些语法及顺序上的差错。

缺点:遇上较长的文章时,Google翻译工具会耍耍大小姐脾气,翻到一半便“赌气”不干了。任凭你刷新几次,翻译就是在中间某一处停住,让你气也不是骂也不是。

综合评定:准确率较高,也比较方便,可以直接翻译搜索出来的页面。如果改改臭脾气,相信会更好。

WorldLingo
地址:http://www.worldlingo.com/zh/microsoft/computer_translation.html

WorldLingo不仅可以在网站连接中使用,如果安装了OFFICE的连网计算机,还可以向MicrosoftWord提供翻译服务。它可实现中文、英语、法语、德语、意大利语、日语、朝鲜语、葡萄牙语、俄语以及西班牙语等语种间的互译。

优点:该网站提供了4种服务,包括网站翻译、文档自动翻译、电子邮件翻译和人工专业翻译。整站翻译只需直接将网站的地址输入到地址栏,然后选择好目标翻译语言即可。电子邮件翻译也跟普通电子邮件的书写方法、格式差不多。

缺点:最大的毛病在于“慢”,无论是在进行整站翻译的时候,还是在进入翻译网站的二级链接的时候都是如此。而且在对文档进行翻译的时候只能逐句翻译,不能对大段的文章进行整体翻译,略显不便。

综合评定:在翻译准确率和翻译的连贯性上有比较出色的表现,人性化设计也比较好,需要提高的是速度。

金山在线翻译
地址:http://www.sowang.com/jinshanciba.htm

金山词霸在国内的软件市场上也有着一定的影响力,所以它的在线翻译还是有着不小的使用率。

优点:金山词霸的在线翻译优势主要体现在对词组、短句的翻译上,只需要将翻译的语句填写到翻译框中就可以翻译完成。在翻译速度和对中文词组的把握上比较有优势,比较适合国内用户使用。

缺点:翻译语言过于单一,因为金山词霸家族有金山快译软件,所以在线翻译中并不提供整段的翻译功能。如果我们想翻译大段文章,用金山在线翻译就很不方便了。

综合评定:作为国产的“土八路”,在中文词组的翻译上还是比那些“洋枪”好用,遗憾的是并不提供整段翻译以及整站翻译。

中国专家翻译网
地址:http://www.chinatranslation.net

中国专家翻译网专业的翻译网站,提供的即时翻译主要有英汉互译、汉译日、俄译汉和德译汉的服务。

优点:因为有众多翻译人才的支持,所以该网站的翻译功能还是不错的。翻译速度也是比较快速,而且翻译出的文章质量也是比较好。

缺点:翻译功能过于单一,只提供了文本翻译功能。

综合评定:该网站最大的优势就是它的有偿翻译功能,如果大家翻译比较重要的文章可以考虑一下这一付费功能。

CCSEE看中文
地址:http://www.xjx.cc/xinxiangmu/yrfy.htm

页面提供有日文网站的翻译功能,还包括中文网页翻译中文,英文网页翻译中文,中文网页繁体转换简体,英文文本/英文邮件翻译中文。

优点:提供全网站翻译以及短文翻译功能,速度比较快,准确率也比较高。而且界面清新整洁,比起其他网站看起来更舒服。

缺点:网站的语言翻译选择过于简单,翻译一般词汇比较准确,如果是比较专业的词汇就容易出问题。

综合评定:功能虽然比较少,但是效果并不逊色。当然,如果要追求更准确的翻译,这里的翻译错误还是显得比较多的。

文章来源:南方日报

世界杯真是充满变数!充满刺激啊!今天英格兰被葡萄牙点球淘汰,夺冠热门巴西0:1败给法国队被淘汰!

至此,世界杯四强全部诞生:德国、意大利、葡萄牙、法国

非常精彩的一场比赛!在120分钟内,双方1:1打平。接着发点球决定胜负,最终德国队以5:3淘汰了阿根廷队,进入了四强!

让我们以黄氏解说来解说一下这场比赛的最后:

扑出去了!扑出去了!扑出去了!莱曼立功了,莱曼立功了!不要给阿根廷人任何机会。
伟大的德国守门员!他 继承了德国的光荣传统。舒马赫,科普克,卡恩在这一刻灵魂附体!莱曼一个人他代表了德国足球悠久的历史和传 统,在这一刻他不是一个人在战斗,他不是一个人!
莱曼,莱曼面对这个点球。他面对的是全世界德国球迷的目光和期待。
阿根廷在世界杯历史上点球从没失败过,莱曼肯定深知这一点,他还能够微笑着面对他面前的这个人 吗?10秒钟以后他会是怎样的表情?
扑出去啦!比赛结束了!德国队获得了胜利,淘汰了阿根廷队。他们没有 再一次倒在强队面前,伟大的德国!伟大的德国的门将!德国万岁!
这个点球扑的太精彩了。绝对的精彩,德国 队进入了四强!
胜利属于德国,属于莱曼,属于克罗泽,属于拉姆,属于巴拉克,属于伊尔格纳,属于所有热爱 德国足球的人!
阿根廷队也许会后悔的,佩珂尔曼,他在下半场打得太保守、太沉稳了,他失去了自己的勇气,
面对德国悠久的历史和传统,他没有再拿出以前那样作风,他换下了里克尔梅,他不给梅西机会,他终于自食其果 。他们该回家了,他们不用回遥远的阿根廷,他们大多数都在欧洲生活,再见!

    其实这个代码就是老外的那个翻页插件,后来是哪位好朋友(不好意思,忘了)修改后放在论坛上的,我还做成过插件,其实光是拷贝也挺方便的。
    还有最后一段是前后翻页的按钮,呵呵,这个还是ccjat提醒后加上的,用不用都随便咯。
<%
记录集名字_total = 记录集名字.RecordCount

If (记录集名字_numRows < 0) Then
记录集名字_numRows = 记录集名字_total
Elseif (记录集名字_numRows = 0) Then
记录集名字_numRows = 1
End If

记录集名字_first = 1
记录集名字_last = 记录集名字_first + 记录集名字_numRows – 1

If (记录集名字_total <> -1) Then
If (记录集名字_first > 记录集名字_total) Then 记录集名字_first = 记录集名字_total
If (记录集名字_last > 记录集名字_total) Then 记录集名字_last = 记录集名字_total
If (记录集名字_numRows > 记录集名字_total) Then 记录集名字_numRows = 记录集名字_total
End If
%>
<%

If (记录集名字_total = -1) Then

记录集名字_total=0
While (Not 记录集名字.EOF)
记录集名字_total = 记录集名字_total + 1
记录集名字.MoveNext
Wend

If (记录集名字.CursorType > 0) Then
记录集名字.MoveFirst
Else
记录集名字.Requery
End If

If (记录集名字_numRows < 0 Or 记录集名字_numRows > 记录集名字_total) Then
记录集名字_numRows = 记录集名字_total
End If

记录集名字_first = 1
记录集名字_last = 记录集名字_first + 记录集名字_numRows – 1
If (记录集名字_first > 记录集名字_total) Then 记录集名字_first = 记录集名字_total
If (记录集名字_last > 记录集名字_total) Then 记录集名字_last = 记录集名字_total

End If
%>
<%
Set MM_rs = 记录集名字
MM_rsCount = 记录集名字_total
MM_size = 记录集名字_numRows
MM_uniqueCol = ""
MM_paramName = ""
MM_offset = 0
MM_atTotal = false
MM_paramIsDefined = false
If (MM_paramName <> "") Then
MM_paramIsDefined = (Request.QueryString(MM_paramName) <> "")
End If
%>

<%
if (Not MM_paramIsDefined And MM_rsCount <> 0) then

r = Request.QueryString("index")
If r = "" Then r = Request.QueryString("offset")
If r <> "" Then MM_offset = Int(r)

<%

MM_removeList = "&index="
If (MM_paramName <> "") Then MM_removeList = MM_removeList & "&" & MM_paramName & "="
MM_keepURL="":MM_keepForm="":MM_keepBoth="":MM_keepNone=""

For Each Item In Request.QueryString
NextItem = "&" & Item & "="
If (InStr(1,MM_removeList,NextItem,1) = 0) Then
MM_keepURL = MM_keepURL & NextItem & Server.URLencode(Request.QueryString(Item))
End If
Next

For Each Item In Request.Form
NextItem = "&" & Item & "="
If (InStr(1,MM_removeList,NextItem,1) = 0) Then
MM_keepForm = MM_keepForm & NextItem & Server.URLencode(Request.Form(Item))
End If
Next

MM_keepBoth = MM_keepURL & MM_keepForm
if (MM_keepBoth <> "") Then MM_keepBoth = Right(MM_keepBoth, Len(MM_keepBoth) – 1)
if (MM_keepURL <> "") Then MM_keepURL = Right(MM_keepURL, Len(MM_keepURL) – 1)
if (MM_keepForm <> "") Then MM_keepForm = Right(MM_keepForm, Len(MM_keepForm) – 1)

Function MM_joinChar(firstItem)
If (firstItem <> "") Then
MM_joinChar = "&"
Else
MM_joinChar = ""
End If
End Function
%>
<%
MM_keepMove = MM_keepBoth
MM_moveParam = "index"

If (MM_size > 0) Then
MM_moveParam = "offset"
If (MM_keepMove <> "") Then
params = Split(MM_keepMove, "&")
MM_keepMove = ""
For i = 0 To UBound(params)
nextItem = Left(params(i), InStr(params(i),"=") – 1)
If (StrComp(nextItem,MM_moveParam,1) <> 0) Then
MM_keepMove = MM_keepMove & "&" & params(i)
End If
Next
If (MM_keepMove <> "") Then
MM_keepMove = Right(MM_keepMove, Len(MM_keepMove) – 1)
End If
End If
End If

If (MM_keepMove <> "") Then MM_keepMove = MM_keepMove & "&"
urlStr = Request.ServerVariables("URL") & "?" & MM_keepMove & MM_moveParam & "="
MM_moveFirst = urlStr & "0"
MM_moveLast = urlStr & "-1"
MM_moveNext = urlStr & Cstr(MM_offset + MM_size)
prev = MM_offset – MM_size
If (prev < 0) Then prev = 0
MM_movePrev = urlStr & Cstr(prev)
%>
<script language="JavaScript">
function jumpage(selObj,restore){
eval("location=‘"+selObj.options[selObj.selectedIndex].value+"‘");
if (restore) selObj.selectedIndex=0;}
</script>

<select name="pages" size=1 onChange="jumpage(this,0)" class="txtfld">
<%
TM_counter = 0
For i = 1 to 记录集名字_total Step MM_size
TM_counter = TM_counter + 1
TM_PageEndCount = i + MM_size – 1
if TM_PageEndCount > 记录集名字_total Then TM_PageEndCount = 记录集名字_total
if i <> MM_offset + 1 then
%>
<option value="<%=Request.ServerVariables("URL") & "?" & MM_keepMove & "offset=" & i-1 %>">
第 <%= TM_counter %> 页</option>
<% else %>
<option selected>第 <%=TM_counter%> 页</option>
<% End if %>
<% next %>
</select>
<input type="button" class="INPUT" onclick="location.href=‘<%=MM_movePrev%>‘" value="|" style="FONT-FAMILY: ‘Wingdings 3‘" <% If MM_offset <> 0 Then
response.write ""
else
response.write "disabled"
end if %>>
<input type="button" class="INPUT" onclick="location.href=‘<%=MM_moveNext%>‘" value="}" style="FONT-FAMILY: ‘Wingdings 3‘" <% If Not MM_atTotal Then
response.write ""
else
response.write "disabled"
end if %>>