本文目录一览:
万能密码 'or'='or'如何防
一般用户在登陆时,系统会要求输入用户名及密码,然后将这些数据传输到指定页,进行验证,大致的代码如下:
Set Conn= Server.CreateObject("ADODB.Connection") '定义连接数据库的对象
Const AccessFile="jmdcw.mdb" '数据库地址
Conn.ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" Server.MapPath(AccessFile) '连接到数据库
Conn.Open '打开数据库
....................
name=request("name") '得到所提交的用户名
pass=request("pass") '得到所提交来的密码
............
Set Jmdcw=Server.CreateObject("ADODB.RecordSet") '定义操作数据库的对象
SQL="SELECT username,userpass FROM User WHERE username='"name"' AND userpass='"pass"'" 'SQL语句
Jmdcw.Open SQL,Conn,1,1 '执行查询
......
If Jmdcw.EOF AND Jmdcw.BOF Then '如果没有查询到
response.redirect "onerror.html" '显示错误页
end if
'如果正确,就继续执行。
..........
以上就是一段简单的用户验证代码,当注入漏洞被广泛发掘之后,类似这样的漏洞就越来越少了,但少并不表示程序员在写代码时已经具备了防范意识,无意之中还是会出现这样或那样的漏洞。OK,书归正传,先来测试一下上面的代码。输入的用户名是:jmdcw,密码是:123456。(典型的弱口令密码,哈哈),这样SQL语句就是:
select username,userpass from user where username='jmdcw' and userpass='123456'
程序会查询user表中是否有jmdcw用户,并且该用户的密码是否为123456。如果username='jmdcw'的结果为真,userpass='123456'的结果也为真,那么“真 And 真 ”的结果就是真,验证通过。
当然,如果用户名和密码其中之一的结果为假,“真 And 假 ”的结果就是假,当然“ 假 And 假 ”的结果也是假,呵呵。
没有用户名或密码怎么进入?试一下'or''='吧,在提交用户名处输入 jmdcw'or''=',这样的SQL语句就是
select username,userpass from user where username='jmdcw'or''='' and userpass='12345678'
在逻辑表达式中,AND的优先级要高于OR,所以语句会先对 “''='' and userpass='12345678'” 进行判断,虽然 ''='' 为真,但密码为假,所以结果为假,但因为我们加入了OR连接符,这样,虽然后面的结果为假,但username的结果为真,所以也一样能进入这个用户的后台。
但如果不知道用户的名称,那么就要在输入的密码后也加入一个'or''=',这样,SQL语句就是
select username,userpass from user where username='jmdcw11'or''='' and userpass='12345678'or''=''
在执行and语句,''='' and userpass='12345678'的结果为假,然后是 'jmdcw11'or假 ,结果为假,再接下来是:假or ''='',这个结果就是真了。
但现在的密码都用MD5加密,对提交来的密码在进入SQL语句之前,先用MD5进行了转换,这样,就算在密码后加入了'or''=',也发挥不了作用。对于密码采用md5加密的,不妨在用户名处再加入一个or''='',也 就是在用户名处输入:jmdcw'or''=''or''=',这样的SQL 语句就是:
select username,userpass from user where username='jmdcw11'or''=''or''='' and userpass='12345678'
先执行and语句,结果为假,然后是username='jmdcw11'or''='',结果为真,接下来是:真or假,结果还是真,这样又绕过了验证。
说到这儿,我忽然想起,在文章开头所提到的网站,其密码也是用md5加密的,并且我也不知道任何一个用户名,也只用了一个or语句,为什么却进入了呢?思来思去,莫不是SQL语句中的用户与密码的位置有所不同,其的SQL语句是这样的:
select username,userpass from user where WHERE userpass='"pass"'" and username='"name"',
密码在前面,用户在后面,这样,当我在用户名处输入:jm'or''='后,其语句就变成了
select username,userpass from user where WHERE userpass='123456" and username='jm'or''=''
按照优先级,先运算ANd语句,结果为假,然后是OR语句,假or''='',结果就是真了。看来代码中的位置发生变化也能演绎成一种漏洞。
上面所提到的方法主要是针对于ACCESS数据库,但如果程序所对应的数据库是SQL,那危害就大很了,先不要说别的,还是说一下登陆的事情,直接用:
存在的用户名';--
这个可以不用密码就登陆到指定的用户之中,如果不知道呢:就用:
任意名称'or''='';--
这样所进入的会是第一个用户,很有可能是管理员的用户之中.
如何防止这种漏洞呢?很简单,就是在接收字符的语句中加入replace过滤语句,比如name就是:
name=replace(request("name"),"'","")
将'过滤为空。密码过滤的方法也类似。当然,这是简单的过滤方法,还有更多复杂的。比如过滤一些特殊字符,空格、chr(0)、%、script等一些字符,防止写入XSS代码。
如何正确防御xss攻击
传统防御技术
2.1.1基于特征的防御
传统XSS防御多采用特征匹配方式,在所有提交的信息中都进行匹配检查。对于这种类型的XSS攻击,采用的模式匹配方法一般会需要对“javascript”这个关键字进行检索,一旦发现提交信息中包含“javascript”,就认定为XSS攻击。
2.1.2 基于代码修改的防御
和SQL注入防御一样,XSS攻击也是利用了Web页面的编写疏忽,所以还有一种方法就是从Web应用开发的角度来避免:
1、对所有用户提交内容进行可靠的输入验证,包括对URL、查询关键字、HTTP头、POST数据等,仅接受指定长度范围内、采用适当格式、采用所预期的字符的内容提交,对其他的一律过滤。
2、实现Session标记(session tokens)、CAPTCHA系统或者HTTP引用头检查,以防功能被第三方网站所执行。
3、确认接收的的内容被妥善的规范化,仅包含最小的、安全的Tag(没有javascript),去掉任何对远程内容的引用(尤其是样式表和javascript),使用HTTP only的cookie。
当然,如上方法将会降低Web业务系统的可用性,用户仅能输入少量的制定字符,人与系统间的交互被降到极致,仅适用于信息发布型站点。
并且考虑到很少有Web编码人员受过正规的安全培训,很难做到完全避免页面中的XSS漏洞。
扩展资料:
XSS攻击的危害包括
1、盗取各类用户帐号,如机器登录帐号、用户网银帐号、各类管理员帐号
2、控制企业数据,包括读取、篡改、添加、删除企业敏感数据的能力
3、盗窃企业重要的具有商业价值的资料
4、非法转账
5、强制发送电子邮件
6、网站挂马
7、控制受害者机器向其它网站发起攻击
受攻击事件
新浪微博XSS受攻击事件
2011年6月28日晚,新浪微博出现了一次比较大的XSS攻击事件。
大量用户自动发送诸如:
“郭美美事件的一些未注意到的细节”,“建党大业中穿帮地方”,“让女人心动的100句诗歌”,“这是传说中的神仙眷侣啊”等等微博和私信,并自动关注一位名为hellosamy的用户。
事件的经过线索如下:
20:14,开始有大量带V的认证用户中招转发蠕虫
20:30,某网站中的病毒页面无法访问
20:32,新浪微博中hellosamy用户无法访问
21:02,新浪漏洞修补完毕
百度贴吧xss攻击事件
2014年3月9晚,六安吧等几十个贴吧出现点击推广贴会自动转发等。并且吧友所关注的每个关注的贴吧都会转一遍,病毒循环发帖。并且导致吧务人员,和吧友被封禁。
参考资料:
XSS攻击-百度百科
网络攻击的主要4个类型
浏览器攻击
基于浏览器的网络攻击与第二种常见类型相关联。他们试图通过网络浏览器破坏机器,这是人们使用互联网的最常见方式之一。浏览器攻击通常始于合法但易受攻击的网站。攻击者攻击该站点并使用恶意软件感染该站点。当新访问者(通过Web浏览器)到达时,受感染的站点会尝试通过利用其浏览器中的漏洞将恶意软件强制进入其系统。
暴力破解
暴力破解攻击类似于打倒网络的前门。攻击者试图通过反复试验来发现系统或服务的密码,而不是试图欺骗用户下载恶意软件。这些网络攻击可能非常耗时,因此攻击者通常使用软件自动执行键入数百个密码的任务。
暴力破解攻击是遵循密码最佳实践的重要原因之一,尤其是在关键资源(如网络路由器和服务器)上。
长而复杂的密码比愚蠢的密码(例如“123456”,“qwerty”和“password”)更难以通过蛮力破解。请放心:这些是攻击者尝试的第一把钥匙。
拒绝服务(DDoS)攻击
拒绝服务攻击(也称为分布式拒绝服务攻击(DDoS))在网络安全攻击列表中排名第三,并且每年都在不断增强。
DDoS攻击试图淹没资源 例如网站,游戏服务器或DNS服务器 - 充斥着大量流量。通常,目标是减慢或崩溃系统。
但DDoS攻击的频率和复杂性正在增加。
蠕虫病毒
恶意软件通常需要用户交互才能开始感染。例如,此人可能必须下载恶意电子邮件附件,访问受感染的网站或将受感染的USB插入计算机。蠕虫攻击自行传播。它们是自我传播的恶意软件,不需要用户交互。通常,它们利用系统漏洞传播到本地网络之外。
WannaCry勒索软件在几天内感染了超过300,000台计算机,使用蠕虫技术攻击网络和计算机。
WannaCry针对一个广泛的Windows漏洞迅速破坏了一台机器。一旦机器被感染,恶意软件就会扫描连接的LAN和WAN,以查找并感染其他易受攻击的主机。
恶意软件攻击
当然,恶意软件是恶意软件创建用于伤害、劫持或监视感染系统的应用程序。目前尚不清楚为什么“蠕虫病毒攻击”不包含在此类别中 - 因为它们通常与恶意软件相关联。
无论如何,恶意软件很普遍并且众所周知。它传播的三种常见方式包括:
网络钓鱼电子邮件 攻击者创建邮件以诱使受害者陷入虚假的安全感,欺骗他们下载最终成为恶意软件的附件。
恶意网站 攻击者可以设置包含漏洞利用工具包的网站,这些漏洞利用工具包旨在查找网站访问者系统中的漏洞并使用它们将恶意软件强制到其系统中。这些网站还可用于将恶意软件伪装成合法下载。
恶意广告 聪明的攻击者已经发现了使用广告网络分发商品的方法。点击后,恶意广告可以将用户重定向到恶意软件托管网站。某些恶意广告攻击甚至不需要用户交互来感染系统。
网络攻击
面向公众的服务,例如Web应用程序和数据库 也是网络安全攻击的目标。
最常见的网络应用攻击:
跨站点脚本(XSS) 攻击者破坏易受攻击的网站或Web应用程序并注入恶意代码。当页面加载时,代码在用户的浏览器上执行恶意脚本。SQL注入(SQLi)攻击者不是将标准数据提交到文本框或其他数据输入字段,而是输入SQL语句来诱骗应用程序显示或操纵其数据。
Path Traversal 攻击者制定HTTP请求以绕过访问控制并导航到系统中的其他目录和文件。例如,路径遍历攻击可以授予攻击者访问站点Web服务器的核心文件的权限,而不是限于单个网站的内容。
扫描攻击扫描不是彻底的网络攻击,而是攻击前的侦察。攻击者使用广泛使用的扫描工具来探测面向公众的系统,以便更好地了解现有的服务,系统和安全性。
端口扫描器 用于确定系统开放端口的简单工具。存在几种类型,其中一些旨在防止被扫描目标的检测。
漏洞扫描程序 收集有关目标的信息,并将其与已知的安全漏洞进行比较。结果是系统上已知漏洞及其严重性的列表。
其他攻击
我们只能推测绑定到“其他”的网络攻击类型。也就是说,这里有一些常见的嫌疑人:
物理攻击 尝试以老式的方式摧毁或窃取网络架构或系统。被盗的笔记本电脑是一个常见的例子。
内部人员攻击 并非所有网络攻击都是由局外人执行的。愤怒的员工,犯罪的第三方承包商和笨拙的工作人员只是少数潜在的参与者。他们可以窃取和滥用访问凭据,滥用客户数据或意外泄露敏感信息。
高级持续性威胁 最先进的网络攻击由黑客精英团队执行,他们根据目标环境调整和定制技术。他们的目标通常是通过隐藏和“持久”来长时间窃取数据。
展开剩余内容
如何对执行了特殊字符转义的网站进行XSS攻击
Html中特殊字符不被转义,可以使用预格式化标签。pre 是 Preformatted text(预格式化文本) 的缩写。使用此标签可以把代码中的空格和换行直接显示到页面上。例如HTML代码:
12345
pre if (xx 5) { print "比5大!\n"; } /pre
浏览器显示效果:if (xx 5) {print "比5大!\n";}textarea/textarea之间包含有类似的这种转义字符的时候总会被解析,倒是可以把所有的""通过程序替换成"",但是有些本来就是""的也会被转换,这就错了。如何让textarea/textarea之间包含的文本原封不动的显示出来呢?总结如下:解决方法有两种:第1种:
123456
bodytextarea id='t' rows=20 cols=20/textareascriptdocument.getElementById('t').innerText='a';/script/body