如何在jetty服务器层面解决XSS漏洞?
一,给cookie的属性设置为httponly
这样能够避免js读取Cookie信息(设置后有助于缓解XSS,但是XSS除了劫持Cookie之外,还可以模拟用户的身份进行操作)
二,进行输入检查
如果仅仅在客户端通过JS来做输入校验,有可能会被攻击者绕过,WEB开发中的普遍做法是同时在客户端和服务端做校验。这种输入检查的方式也称之为XSS Filter。
三,输出检查
一般说来,除了富文本输出之外,在变量输出到HTML页面时,可以使用编码或者转义的方式来防御XSS攻击。
四,防御DOM BasedXSS
前面提到的集中方法,对于这种类型不太适用,需要特别对待,那如何才能防御呢?
首先是$var输出到script是,应该执行一次javasriptEncode,其次在doument.write输出到HTML页面时,如果是输出到事件或者脚本,可以再做一次javaScriptEncode,如果是输出到HTML内容或者属性,则可以做一次HtmlEncode。
上面提到的这些防御方法都属于安全生产的环节,也就是说实在开发同学写代码的时候要特别注意,这种是否做的规范,可以通过工具扫描代码的方式来实现,也就是白盒测试,如果代码没有做输入或者输出检查,则发报告提示开发来进行修改。但是有些场景白盒没法覆盖到,例如输出jsonp类型的接口,对于callback参数的原味输出,白盒有时候就扫不出来,这时候,可以通过黑盒测试工具,模拟入参的各种情况,也就是穷举,来构造,如果发生了XSS请求,则发出报告即可。
渗透测试工具的介绍
第一类:网络渗透测试工具
网络渗透测试工具是一种可以测试连接到网络的主机/系统的工具。通用的网络渗透测试工具有ciscoAttacks、Fast-Track、Metasploit、SAPExploitation等,这些工具各有各的特点和优势。因为网络渗透测试是一个相对广泛的概念,所以上述工具也可以包括社会工程学渗透测试模块,网络渗透测试模块和无线渗透测试模块。
第二类:社会工程学渗透测试工具
社会工程学渗透测试是利用社会工程学进行渗透测试,通常利用人们行为中的弱点来达到渗透的目的。典型的社会工程学渗透测试工具有BeefXSS和HoneyPots,这些工具诱使用户访问特定的网站,获得用户的Cookie信息,达到渗透的目的。
第三类:网站渗透测试工具
网站渗透测试是对Web应用程序和相应的设备配置进行渗透测试。在进行网站渗透测试时,安全工程序必须采用非破坏性的方法来发现目标系统中的潜在漏洞。常用的网络渗透测试工具有asp-auditor、darkmysql、fimap、xsser等。
第四类:无线渗透测试工具
无线渗透测试工具是蓝牙网络和无线局域网的渗透测试。在进行无线渗透测试时,一般需要先破解目标网络的密码,或者建立虚假热点来吸引目标用户访问,然后通过其他方式控制目标系统。常见的蓝牙网络渗透测试工具有atshell、btftp、bluediving、bluemaho等;常见的无线局域网渗透测试工具有aircack-ng、airmon-ng、pcapgetiv和weakivgeng等,这些工具实现了不同的功能,可以让安全工程师通过各种方式进行无线渗透测试。
利用最近热门的Xss漏洞能做什么?
1、针对性挂马 所以这类网站一定是游戏网站,银行网站或者是关于qq、taobao或者影响力相当大的网站等,它们必须有我们平常需要盗取的帐号密码;当然也或许是这个站点的浏览量相当高,我们能将更多的马挂出去。 而如果仅仅是平平常常的一个小站点的XSS漏洞,如果我们要挂马,那么莫不如就直接把木马页面地址贴出去。 2、用户权限下操作 这类网站则必须有会员了,而且这些会员有很多有意义的操作或者有我们需要的内部个人资料,所以我们可以通过XSS对已登录访问者进行有权限操作。我认为cookies的盗取应该算作这一项,因为其目的也是获取用户操作权限(盗密码包括在内),从而获取用户某些信息或者进行权限下的相关操作。 3、Dos攻击或傀儡机 这同样需要一个访问量非常大的站点,利用小站点莫不如我们自己攻击或获取信息。我们可以通过此页的访问用户不间断地攻击其他站点,或者进行局域网扫描等等。这类js工具早已经产生,js端口扫描、jikto、xssshell等等。 4、提权 一般这主要发生在论坛或信息管理系统,总之一定要有管理员了。这需要攻击者对目标系统相当熟悉(一般这样的系统需要开源代码),从而知道怎样构造语句进行提权。 5、实现特殊效果 譬如Monyer在百度空间的插入视频,插入版块;譬如一些人在新浪博客或者校内网实现的特殊效果等等。 结论: 从而你应该了解到这些网站应该具有的性质: 极高的访问量,有会员,有管理员,有具有价值的帐号密码,或者有意义进行特殊效果的实现。 如果你读过《Ajax Hacking with XSS》,你应该知道XSS至少包含input XSS和textarea XSS等七种方式。 其中url XSS属于input XSS,这些漏洞大部分属于保留式的XSS,而textarea XSS等一般属于不保留XSS。 这意味着正常访问一个页面是不会触发保留式的XSS的,尽管这是大部分网站具有的漏洞,其中搜索部分又称搜索式XSS漏洞。 所以当你获取了一个input XSS,你仅仅alert出一个小框框。你跟别人大吹大擂,你发现了一个漏洞,并且你可以alert一个框框给他看,但是事实上你什么都做不了。即使你能挂些小木马,那也是很没意义的事情——因为你莫不如直接在自己的虚拟主机里做XSS页面发给别人。 这个跟sql注入不同,XSS毕竟是客户端的东西。sql注入的目的往往是为了得到目标系统的权限,并且sql语句本身执行的就是服务端的指令;但 XSS一般却是为了获得客户端的东西,执行的也是客户端的指令。所以他们可以“'”一下“出错了”而大喊,你却不能因为“alert”出了“xss窗口” 而乱叫。
求采纳
找人修复ASP网站XSS漏洞
Web开发常见的几个漏洞解决方法
平时工作,多数是开发Web项目,由于一般是开发内部使用的业务系统,所以对于安全性一般不是看的很重,基本上由于是内网系统,一般也很少会受到攻击,但有时候一些系统平台,需要外网也要使用,这种情况下,各方面的安全性就要求比较高了,所以往往会交付给一些专门做安全测试的第三方机构进行测试,然后根据反馈的漏洞进行修复,如果你平常对于一些安全漏洞不够了解,那么反馈的结果往往是很残酷的,迫使你必须在很多细节上进行修复完善。本文主要根据本人项目的一些第三方安全测试结果,以及本人针对这些漏洞问题的修复方案,介绍在这方面的一些经验,希望对大家有帮助。
基本上,参加的安全测试(渗透测试)的网站,可能或多或少存在下面几个漏洞:SQL注入漏洞、跨站脚本攻击漏洞、登陆后台管理页面、IIS短文件/文件夹漏洞、系统敏感信息泄露。
1、测试的步骤及内容
这些安全性测试,据了解一般是先收集数据,然后进行相关的渗透测试工作,获取到网站或者系统的一些敏感数据,从而可能达到控制或者破坏系统的目的。
第一步是信息收集,收集如IP地址、DNS记录、软件版本信息、IP段等信息。可以采用方法有:
1)基本网络信息获取;
2)Ping目标网络得到IP地址和TTL等信息;
3)Tcptraceroute和Traceroute 的结果;
4)Whois结果;
5)Netcraft获取目标可能存在的域名、Web及服务器信息;
6)Curl获取目标Web基本信息;
7)Nmap对网站进行端口扫描并判断操作系统类型;
8)Google、Yahoo、Baidu等搜索引擎获取目标信息;
9)FWtester 、Hping3 等工具进行防火墙规则探测;
10)其他。
第二步是进行渗透测试,根据前面获取到的数据,进一步获取网站敏感数据。此阶段如果成功的话,可能获得普通权限。采用方法会有有下面几种
1)常规漏洞扫描和采用商用软件进行检查;
2)结合使用ISS与Nessus等商用或免费的扫描工具进行漏洞扫描;
3)采用SolarWinds对网络设备等进行搜索发现;
4)采用Nikto、Webinspect等软件对Web常见漏洞进行扫描;
5)采用如AppDetectiv之类的商用软件对数据库进行扫描分析;
6)对Web和数据库应用进行分析;
7)采用WebProxy、SPIKEProxy、Webscarab、ParosProxy、Absinthe等工具进行分析;
8)用Ethereal抓包协助分析;
9)用Webscan、Fuzzer进行SQL注入和XSS漏洞初步分析;
10)手工检测SQL注入和XSS漏洞;
11)采用类似OScanner的工具对数据库进行分析;
12)基于通用设备、数据库、操作系统和应用的攻击;采用各种公开及私有的缓冲区溢出程序代码,也采用诸如MetasploitFramework 之类的利用程序集合。
13)基于应用的攻击。基于Web、数据库或特定的B/S或C/S结构的网络应用程序存在的弱点进行攻击。
14)口令猜解技术。进行口令猜解可以采用 X-Scan、Brutus、Hydra、溯雪等工具。
第三步就是尝试由普通权限提升为管理员权限,获得对系统的完全控制权。在时间许可的情况下,必要时从第一阶段重新进行。采用方法
1)口令嗅探与键盘记录。嗅探、键盘记录、木马等软件,功能简单,但要求不被防病毒软件发觉,因此通常需要自行开发或修改。
2)口令破解。有许多著名的口令破解软件,如 L0phtCrack、John the Ripper、Cain 等
以上一些是他们测试的步骤,不过我们不一定要关注这些过程性的东西,我们可能对他们反馈的结果更关注,因为可能会爆发很多安全漏洞等着我们去修复的。
2、SQL注入漏洞的出现和修复
1)SQL注入定义:
SQL注入攻击是黑客对数据库进行攻击的常用手段之一。随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多。但是由于程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQL Injection,即SQL注入。
SQL注入有时候,在地址参数输入,或者控件输入都有可能进行。如在链接后加入’号,页面报错,并暴露出网站的物理路径在很多时候,很常见,当然如果关闭了Web.Config的CustomErrors的时候,可能就不会看到。
另外,Sql注入是很常见的一个攻击,因此,如果对页面参数的转换或者没有经过处理,直接把数据丢给Sql语句去执行,那么可能就会暴露敏感的信息给对方了。如下面两个页面可能就会被添加注入攻击。
①http://xxx.xxx.xxx/abc.asp?p=YY and (select top 1 name from TestD ... type='U' and status0)0 得到第一个用户建立表的名称,并与整数进行比较,显然abc.asp工作异常,但在异常中却可以发现表的名称。假设发现的表名是xyz,则
②http://xxx.xxx.xxx/abc.asp?p=YY and (select top 1 name from TestDB.dbo.sysobjects ... tatus0 and name not in('xyz'))0 可以得到第二个用户建立的表的名称,同理就可得到所有用建立的表的名称。
为了屏蔽危险Sql语句的执行,可能需要对进行严格的转换,例如如果是整形的,就严格把它转换为整数,然后在操作,这样可以避免一些潜在的危险,另外对构造的sql语句必须进行Sql注入语句的过滤,如我的框架(Winform开发框架、Web开发框架等)里面就内置了对这些有害的语句和符号进行清除工作,由于是在基类进行了过滤,因此基本上子类都不用关心也可以避免了这些常规的攻击了。
/// summary
/// 验证是否存在注入代码(条件语句)
/// /summary
/// param name="inputData"/param
public bool HasInjectionData(string inputData)
{
if (string.IsNullOrEmpty(inputData))
return false;
//里面定义恶意字符集合
//验证inputData是否包含恶意集合
if (Regex.IsMatch(inputData.ToLower(), GetRegexString()))
{
return true;
}
else
{
return false;
}
}
/// summary
/// 获取正则表达式
/// /summary
/// returns/returns
private static string GetRegexString()
{
//构造SQL的注入关键字符
string[] strBadChar =
{
//"select\\s",
//"from\\s",
"insert\\s",
"delete\\s",
"update\\s",
"drop\\s",
"truncate\\s",
"exec\\s",
"count\\(",
"declare\\s",
"asc\\(",
"mid\\(",
"char\\(",
"net user",
"xp_cmdshell",
"/add\\s",
"exec master.dbo.xp_cmdshell",
"net localgroup administrators"
};
//构造正则表达式
string str_Regex = ".*(";
for (int i = 0; i strBadChar.Length - 1; i++)
{
str_Regex += strBadChar[i] + "|";
}
str_Regex += strBadChar[strBadChar.Length - 1] + ").*";
return str_Regex;
}
上面的语句用于判别常规的Sql攻击字符,我在数据库操作的基类里面,只需要判别即可,如下面的一个根据条件语句查找数据库记录的函数。
/// summary
/// 根据条件查询数据库,并返回对象集合
/// /summary
/// param name="condition"查询的条件/param
/// param name="orderBy"自定义排序语句,如Order By Name Desc;如不指定,则使用默认排序/param
/// param name="paramList"参数列表/param
/// returns指定对象的集合/returns
public virtual ListT Find(string condition, string orderBy, IDbDataParameter[] paramList)
{
if (HasInjectionData(condition))
{
LogTextHelper.Error(string.Format("检测出SQL注入的恶意数据, {0}", condition));
throw new Exception("检测出SQL注入的恶意数据");
}
...........................
}
以上只是防止Sql攻击的一个方面,还有就是坚持使用参数化的方式进行赋值,这样很大程度上减少可能受到SQL注入攻击。
Database db = CreateDatabase();
DbCommand command = db.GetSqlStringCommand(sql);
command.Parameters.AddRange(param);
3、跨站脚本攻击漏洞出现和修复
跨站脚本攻击,又称XSS代码攻击,也是一种常见的脚本注入攻击。例如在下面的界面上,很多输入框是可以随意输入内容的,特别是一些文本编辑框里面,可以输入例如scriptalert('这是一个页面弹出警告');/script这样的内容,如果在一些首页出现很多这样内容,而又不经过处理,那么页面就不断的弹框,更有甚者,在里面执行一个无限循环的脚本函数,直到页面耗尽资源为止,类似这样的攻击都是很常见的,所以我们如果是在外网或者很有危险的网络上发布程序,一般都需要对这些问题进行修复。
XSS代码攻击还可能会窃取或操纵客户会话和 Cookie,它们可能用于模仿合法用户,从而使黑客能够以该用户身份查看或变更用户记录以及执行事务。
[建议措施]
清理用户输入,并过滤出 JavaScript 代码。我们建议您过滤下列字符:
[1] (尖括号)
[2] "(引号)
[3] '(单引号)
[4] %(百分比符号)
[5] ;(分号)
[6] ()(括号)
[7] ( 符号)
[8] +(加号)
为了避免上述的XSS代码攻击,解决办法是可以使用HttpUitility的HtmlEncode或者最好使用微软发布的AntiXSSLibrary进行处理,这个更安全。
微软反跨站脚本库(AntiXSSLibrary)是一种编码库,旨在帮助保护开发人员保护他们的基于Web的应用不被XSS攻击。
编码方法
使用场景
示例
HtmlEncode(String)
不受信任的HTML代码。 a href=”http://www.cnblogs.com”Click Here [不受信任的输入]/a
HtmlAttributeEncode(String)
不受信任的HTML属性
hr noshade size=[不受信任的输入]
JavaScriptEncode(String)
不受信任的输入在JavaScript中使用
script type=”text/javascript”
…
[Untrusted input]
…
/script
UrlEncode(String)
不受信任的URL
a href=”http://cnblogs.com/results.aspx?q=[Untrusted input]”Cnblogs.com/a
VisualBasicScriptEncode(String)
不受信任的输入在VBScript中使用
script type=”text/vbscript” language=”vbscript”
…
[Untrusted input]
…
/script
XmlEncode(String)
不受信任的输入用于XML输出
xml_tag[Untrusted input]/xml_tag
XmlAttributeEncode(String)
不 受信任的输入用作XML属性
xml_tag attribute=[Untrusted input]Some Text/xml_tag
protected void Page_Load(object sender, EventArgs e)
{
this.lblName.Text = Encoder.HtmlEncode("scriptalert('OK');/SCRIPT");
}
例如上面的内容,赋值给一个Lable控件,不会出现弹框的操作。
但是,我们虽然显示的时候设置了转义,输入如果要限制它们怎么办呢,也是使用AntiXSSLibrary里面的HtmlSanitizationLibrary类库Sanitizer.GetSafeHtmlFragment即可。
protected void btnPost_Click(object sender, EventArgs e)
{
this.lblName.Text = Sanitizer.GetSafeHtmlFragment(txtName.Text);
}
这样对于特殊脚本的内容,会自动剔除过滤,而不会记录了,从而达到我们想要的目的。
4、IIS短文件/文件夹漏洞出现和修复
通过猜解,可能会得出一些重要的网页文件地址,如可能在/Pages/Security/下存在UserList.aspx和MenuList.aspx文件。
[建议措施]
1)禁止url中使用“~”或它的Unicode编码。
2)关闭windows的8.3格式功能。
修复可以参考下面的做法,或者找相关运维部门进行处理即可。
http://sebug.net/vuldb/ssvid-60252
http://webscan.360.cn/vul/view/vulid/1020
http://www.bitscn.com/network/security/200607/36285.html
5、系统敏感信息泄露出现和修复
如果页面继承一般的page,而没有进行Session判断,那么可能会被攻击者获取到页面地址,进而获取到例如用户名等重要数据的。
一般避免这种方式是对于一些需要登录才能访问到的页面,一定要进行Session判断,可能很容易给漏掉了。如我在Web框架里面,就是继承一个BasePage,BasePage 统一对页面进行一个登录判断。
public partial class UserList : BasePage
{
protected void Page_Load(object sender, EventArgs e)
{
...............
/// summary
/// BasePage 集成自权限基础抽象类FPage,其他页面则集成自BasePage
/// /summary
public class BasePage : FPage
{
/// summary
/// 默认构造函数
/// /summary
public BasePage()
{
this.IsFunctionControl = true;//默认页面启动权限认证
}
/// summary
/// 检查用户是否登录
/// /summary
private void CheckLogin()
{
if (string.IsNullOrEmpty(Permission.Identity))
{
string url = string.Format("{0}/Pages/CommonPage/Login.aspx?userRequest={1}",
Request.ApplicationPath.TrimEnd('/'), HttpUtility.UrlEncode(Request.Url.ToString()));
Response.Redirect(url);
}
}
/// summary
/// 覆盖HasFunction方法以使权限类判断是否具有某功能点的权限
/// /summary
/// param name="functionId"/param
/// returns/returns
protected override bool HasFunction(string functionId)
{
CheckLogin();
bool breturn = false;
try
{
breturn = Permission.HasFunction(functionId);
}
catch (Exception)
{
Helper.Alerts(this, "BasePage调用权限系统的HasFunction函数出错");
}
return breturn;
}
protected override void OnInit(EventArgs e)
{
Response.Cache.SetNoStore(); //清除缓存
base.OnInit(e);
CheckLogin();
}
否则可能会受到攻击,并通过抓包软件发现页面数据,获得一些重要的用户名或者相关信息。
还有一个值得注意的地方,就是一般这种不是很安全的网络,最好要求输入比较复杂一点的密码(强制要求),例如不能全部是数字密码或者不能是纯字符,对位数也要求多一点,因为很多人输入12345678,123456,123这样的密码,很容易被猜出来并登录系统,造成不必要的损失。
6、总结性建议
针对上面发现的问题,提出下面几条建议。
1)在服务器与网络的接口处配置防火墙,用于阻断外界用户对服务器的扫描和探测。
2)限制网站后台访问权限,如:禁止公网IP访问后台;禁止服务员使用弱口令。
3)对用户输入的数据进行全面安全检查或过滤,尤其注意检查是否包含SQL 或XSS特殊字符。这些检查或过滤必须在服务器端完成。
4)关闭windows的8.3格式功能。
5)限制敏感页面或目录的访问权限。
如何测试XSS漏洞
XSS跨站漏洞分为大致三种:储存型XSS,反射型XSS,和DOM型XSS,一般都是由于网站对用户输入的参数过滤不严格而调用浏览器的JS而产生的。XSS几乎每个网站都存在,google,百度,360等都存在,存在和危害范围广,危害安全性大。
具体利用的话:
储存型XSS,一般是构造一个比如说"scriptalert("XSS")/script"的JS的弹窗代码进行测试,看是否提交后在页面弹窗,这种储存型XSS是被写入到页面当中的,如果管理员不处理,那么将永久存在,这种XSS攻击者可以通过留言等提交方式,把恶意代码植入到服务器网站上, 一般用于盗取COOKIE获取管理员的信息和权限。
反射型XSS,一般是在浏览器的输入栏也就是urlget请求那里输入XSS代码,例如:127.0.0.1/admin.php?key="scriptalert("xss")/script,也是弹窗JS代码。当攻击者发送一个带有XSS代码的url参数给受害者,那么受害者可能会使自己的cookie被盗取或者“弹框“,这种XSS一次性使用,危害比储存型要小很多。
dom型:常用于挖掘,是因为api代码审计不严所产生的,这种dom的XSS弹窗可利用和危害性并不是很大,大多用于钓鱼。比起存储型和反射型,DOM型并不常用。
缺点:
1、耗时间
2、有一定几率不成功
3、没有相应的软件来完成自动化攻击
4、前期需要基本的html、js功底,后期需要扎实的html、js、actionscript2/3.0等语言的功底
5、是一种被动的攻击手法
6、对website有http-only、crossdomian.xml没有用
所以楼主如果想更加深层次的学习XSS的话,最好有扎实的前后端开发基础,还要学会代码审计等等。
推荐的话,书籍建议看看《白帽子讲web安全》,《XSS跨站脚本攻击剖析与防御》
一般配合的话,kalilinux里面的BEFF是个很著名的XSS漏洞利用工具,楼主有兴趣可以去看看。
纯手工打字,望楼主采纳。
XSS安全漏洞的几种修复方式
打开腾讯电脑管家——工具箱——修复漏洞,进行漏洞扫描和修复。
建议设置开启自动修复漏洞功能,开启后,电脑管家可以在发现高危漏洞(仅包括高危漏洞,不包括其它漏洞)时,第一时间自动进行修复,无需用户参与,最大程度保证用户电脑安全。尤其适合老人、小孩或计算机初级水平用户使用。开启方式如下:进入电脑管家“修复漏洞”模块—“设置”,点击开启自动修复漏洞即可。
xss漏洞怎么修复
可以用360安全卫士来修复,打开360安全卫士,选择漏洞修复工具对系统进行扫描和修复
zscaler security是什么软件?
Zscaler云管理软件中已修复的XSS漏洞,这个缺陷可能被攻击者利用,从而攻击云环境中的其它用户。Zscaler Cloud管理软件中存在严重跨站脚本(XSS)缺陷,可能会被黑客利用。
zscaler是什么
Zscaler是一家全球云安全公司,提供互联网安全、 web 安全、 下一代防火墙、 沙盒,SSL 检验、 防病毒、 漏洞管理及颗粒控制,业务在云计算、 移动和互联网领域均有涉及。
总部位于加州圣何塞市的Zscaler已为5000多家企业和机构的云应用提供安全保障。2015年,获得Google旗下Google Capital的2500万美元投资。
Zscaler云管理软件中的跨站攻击漏洞,一旦被攻击者利用,在用户访问管理界面的时候,其浏览器就会被注入恶意的HTML和javascript。之后,只要攻击者需要登录到这个网站,就可以接管其它用户的账户,并以该用户的身份实施攻击行为。
Zscaler强调,缺陷会暴露同一组织内的黑客用户,因为攻击者只能在他们访问Zscaler的管理门户时,才可以将代码注入网页。“Zscaler已经解决了在admin.zscaler [X] .net和mobile.zscaler [X] .net门户中的XSS漏洞。这个漏洞,允许通过身份验证的管理员用户将恶意内容注入某些管理UI页面,这可能会影响同一公司的其他管理员用户。“Zscaler安全建议 , “Zscaler感谢Alex Haynes报告问题,并与Zscaler合作,确保他们得到适当的补救。
跨站攻击是什么
跨站攻击,即Cross Site script Execution(通常简写为XSS) ,是指攻击者利用网站程序对用户输入过滤不足,输入可以显示在页面上对其他用户造成影响的HTML代码,从而盗取用户资料、利用用户身份进行某种动作或者对访问者进行病毒侵害的一种攻击方式。
跨站攻击形式时常容易被忽视,但带来的危害却不小。