壊れてしまった特別な・・・
MBSDでの話。
参加記はこちら。
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がありそうだ。
適当に入力してAdd Entryしたところ、普通に反映された。
Elements
DevToolsのElementsからHTMLをみてみる。
おわかりいただけただろうか・・・
<form method="POST" action="/cgi-bin/badstore.cgi?action=doguestbook" enctype="application/x-www-form-urlencoded"></form>
formを開いた行で閉じている。どういうこと??
先述の通り、入力すれば通常通り使える。
しかし普通に考えて、formの子要素になってないinputの値が送信されているのはおかしい。
Network
Elementsから見るとレンダリング後のDOMになっているので、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 参加記」でした。
明日はDuGlaserによる「width-checkerというツールを作った話」です。