0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

手動でPOSTしてXSSを起こしてみた

Last updated at Posted at 2020-06-29

そもそもなぜXSSを手動で引き起こすのか。

普通はXSSなんていうものはウェブFW使用していれば出ないんですよね。
そう、普通はね……

今回何を血迷ったのか、なぜかFW外でPOST処理を行ってしまったために引き起こってしまった悲しいXSS対策とツールを入れるのが面倒でXSSを手動で実行する悲しいやり方のお話です。

そもそもXSSって

簡単にいうと<>&"'とかhtmlで特殊な記号として扱われているやつをホニャホニャ処理してあげないと大変なことが起こりまっせってことです。

<input type="text"  name="test" value="">

とかいうのがあったとしましょう。
ここに、こんな値をPOSTされたとしてHTMLが返却されたとしましょう。

">script></script>"
<input type="text" name="test" value=""><script></script>"">

とかやられるとJSが起動しちゃったりするわけですね。
そうすると不必要にPOSTされちゃったり、データ抜かれたりするわけです。
イントラネットとかだとこの辺りはFW(ファイヤウォール)でブロックとかしてたり、イントラネットじゃなくてもブラウザがブロックしてくれたりしてくれるのですが、今回はそこはなしということで。

手動POST

GETは普段みなさんがWEBページ見ているときのやっているやつですね。気にしてないと思いますが。
POSTはデータを投稿する時に使うのですが、これが普通にアクセスしていてはできないときました。
なのでpowershellを使ってちょっと工夫しないといけません。

$ie = New-Object -ComObject InternetExplorer.Application
$ie.visible = $true

# テストしたいURL
$indexUrl = "~~~~"
$ie.navigate($indexUrl, $null, $null, $null)
$postUrl = "~~"

# csrftokenがあればここでコピーしましょう
# ここでPOSTデータを通常のリクエストURLに乗せるような形で&
$post = "test=">script></script>"&test2=hogehoge"
$postDatabyte = [System.Text.Encoding]::UTF8.GetBytes($post)
$header = "Content-Type:application/x-www-form-urlencoded `r`n"
$ie.navigate($postUrl, $null, $null, $postDatabyte, $header)

これでデータをPOSTし結果としては、XSSブロックされたとか出るでしょう。

っていうかReactとかVueとか昨今流行っている物を使うとこの辺って出ないんですよね。
ま、ReactとかVue使いましょうねってことかもしれません。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?