よーでんのブログ

One for All,All for わんわんお!

壊れてしまった特別なForm

壊れてしまった特別な・・・

MBSDでの話。
参加記はこちら。

y0d3n.hatenablog.com

index out of range

goqueryを使ってHakoniwa BadStoreをクロールしてたらindex out of rangeがでた。

runtime error: index out of range [0] with length 0
/home/y0d3n/.goenv/versions/1.17.0/src/runtime/panic.go:90 (0x431e34)
        goPanicIndex: panic(boundsError{x: int64(x), signed: true, y: y, code: boundsIndex})
/mnt/c/Users/yoden/.../Himawari/models/crawler/forms.go:20 (0x766758)
        SetValues: r.Form.Action = input[0].Action

このinput[0]は、HTMLにformがあるときに呼ばれる。

ページを確認したが、inputタグはある。input[0]でindex out of rangeが起きるはずがない。

Special Form Broken

Sign our Guestbook!」 というページでエラーが発生しているようだった。
みるからにformとinputがありそうだ。

f:id:y0d3n:20211101230116p:plain
guestbook

適当に入力してAdd Entryしたところ、普通に反映された。

f:id:y0d3n:20211101230204p:plain
comment

Elements

DevToolsのElementsからHTMLをみてみる。

f:id:y0d3n:20211101231903p:plain
elements

おわかりいただけただろうか・・・

<form method="POST" action="/cgi-bin/badstore.cgi?action=doguestbook" enctype="application/x-www-form-urlencoded"></form>

formを開いた行で閉じている。どういうこと??
先述の通り、入力すれば通常通り使える。
しかし普通に考えて、formの子要素になってないinputの値が送信されているのはおかしい。

Network

Elementsから見るとレンダリング後のDOMになっているので、Networkから原文を見る。

f:id:y0d3n:20211101233209p:plain
network

流石にこのままでは読めないので整形。

<TABLE BORDER=0 CELLLPADDING=10>
    <FORM METHOD="POST" ACTION="/cgi-bin/badstore.cgi?action=doguestbook" ENCTYPE="application/x-www-form-urlencoded">
        <tr>
            <td>Your Name:</td>
            <td><INPUT TYPE=text NAME=name SIZE=30></td>
        </tr>
        <tr>
            <td>Email:</td>
            <td><INPUT TYPE=text NAME=email SIZE=40></td>
        </tr>
        <tr>
            <td valign="TOP">Comments:</td>
            <td><TEXTAREA NAME=comments COLS=60 ROWS=4></TEXTAREA></td>
        </tr>
</TABLE>
<HR>
<Center><INPUT TYPE=submit VALUE="Add Entry"> <INPUT TYPE=reset></Center>
<P>
    </FORM>

おかしい。明らかにおかしい。
HTMLでは<table><form></table></form> みたいな親子にはならないはずだ。

</form>の位置をミスっているようだった。

VulnhubにあるBadstore: 1.2.3を見に行ったところ、そこでもう間違えていた。
ので、Hakoniwaの方にPR出してもなぁ・・となってそのまま。

結局?

  • tableが閉じるまでにformの閉じタグがみつからないので、レンダリングのためにとりあえず即閉じた
    -> これは確定でよさそう
  • form送信時には原文の方のformが尊重された?
    -> こっちは正味あんまりわかってない。

結局、あんまりわかってない。このタイトルでやりたかっただけ感がある。
MBSDの課題が優先であまり調査できてなかったが、どういう挙動なのか今後深掘りしてみるのも面白そう。


この記事はIPFactory Advent Calendar 2021の12/18分です。

IPFactoryというサークルについてはこちらをご覧ください.

昨日はy0d3nによる「MBSD Cybersecurity Challenges 2021 参加記」でした。

y0d3n.hatenablog.com

明日はDuGlaserによる「width-checkerというツールを作った話」です。

duglaser.dev