91565


現在、任意のサイトのディレクトリトラバーサルの脆弱性をチェックするシェルスクリプトを書いています。しかしこのシェルスクリプトには一つ問題があり、`出力結果のURLが1つの文字列と合体して出力`されてしまいます。

まず、コードと出力結果を貼っておきます。

[code]

    #!/bin/bash
    
    sleeptime=6 
    
    function test_run() 
    {
            echo "[+] Starting Test..."
            result="";
            for start in $(seq 1 35); 
                do
                    query=$(echo; curl -sS "https://serx.ml/search?q=$site%20$1&categories=general&time_range=None&safesearch=0&pageno=$start")
                    checkdata=$(echo "$query" | grep -Eo "(http|https)://[a-zA-Z0-9./?=_~-]*$1/[a-zA-Z0-9./?=_~-]*")
                    if [ -z "$checkdata" ]
                        then
                            sleep $sleeptime; 
                            break; 
                        else
                            result+=$checkdata;
                            sleep $sleeptime; 
                    fi
                done
    
    
            if [ -z "$result" ] 
                then
                    echo "[-] No results"
                else
                    IFS=$'\n' sorted=($(sort -u <<<"${result[@]}"| tr " " "\n"));
                    echo -e " " 
                    for each in "${sorted[@]}"; do echo "     [+] $each"; done
            fi
    }
    test_run xxx.yyy.co.jp
    
[/code]

(出力結果)

[code]

    [+] Starting Test...
     
         [+] http://xxx.yyy.co.jp/ilchianti_kawagoe/mod/?ND
         [+] http://xxx.yyy.co.jp/ilchianti_kawagoe/mod/?SA
         [+] http://xxx.yyy.co.jp/ilchianti_kawagoe/mod/Data/
         [+] http://xxx.yyy.co.jp/ilchianti_kawagoe/mod/Date/?ND
         [+] http://xxx.yyy.co.jp/ilchianti_kawagoe/mod/Digest/
         [+] http://xxx.yyy.co.jp/ilchianti_kawagoe/mod/Digest/Perl/
         [+] http://xxx.yyy.co.jp/ilchianti_kawagoe/mod/HTML/?MD
         [+] http://xxx.yyy.co.jp/ilchianti_kawagoe/mod/Mail/?DA
         [+] http://xxx.yyy.co.jp/ilchianti_kawagoe/mod/Mail/?DAhttp://xxx.yyy.co.jp/ilchianti_kawagoe/mod/Digest/
         [+] http://xxx.yyy.co.jp/ilchianti_kawagoe/mod/PDFJ/
         [+] http://xxx.yyy.co.jp/ilchianti_kawagoe/mod/PDFJ/?MA
         [+] http://xxx.yyy.co.jp/ilchianti_kawagoe/mod/PDFJ/?MD
         [+] http://xxx.yyy.co.jp/ilchianti_kawagoe/mod/PDFJ/?ND
         [+] http://xxx.yyy.co.jp/ilchianti_kawagoe/mod/PDFJ/?NDhttp://xxx.yyy.co.jp/ilchianti_kawagoe/mod/PDFJ/
         [+] http://xxx.yyy.co.jp/ilchianti_kawagoe/mod/PDFJ/?SA
         [+] http://xxx.yyy.co.jp/ilchianti_kawagoe/mod/SQL/
         [+] http://xxx.yyy.co.jp/ilchianti_kawagoe/mod/SQL/Dialects/?MD
         [+] http://xxx.yyy.co.jp/ilchianti_kawagoe/mod/SQL/Dialects/?MDhttp://xxx.yyy.co.jp/ilchianti_kawagoe/mod/SQL/Dialects/?NA
         [+] http://xxx.yyy.co.jp/ilchianti_kawagoe/mod/SQL/Dialects/?NA
         [+] http://xxx.yyy.co.jp/ilchianti_kawagoe/mod/SQL/Dialects/?SD
         [+] http://xxx.yyy.co.jp/ilchianti_kawagoe/mod/SQL/Statement/
         [+] http://xxx.yyy.co.jp/ilchianti_kawagoe/mod/XML/
         [+] http://xxx.yyy.co.jp/mod/?DA
         [+] http://xxx.yyy.co.jp/mod/?MD
         [+] http://xxx.yyy.co.jp/mod/?SA
         [+] http://xxx.yyy.co.jp/mod/?SD
         [+] http://xxx.yyy.co.jp/mod/Data/
         [+] http://xxx.yyy.co.jp/mod/Date/
         [+] http://xxx.yyy.co.jp/mod/Date/?SA
         [+] http://xxx.yyy.co.jp/mod/Digest/
         [+] http://xxx.yyy.co.jp/mod/Digest/Perl/
         [+] http://xxx.yyy.co.jp/mod/Digest/Perl/http://www.xxx.yyy.co.jp/wp-content/uploads/2019/10/?SA
         [+] http://xxx.yyy.co.jp/mod/HTML/
         [+] http://xxx.yyy.co.jp/mod/Mail/
         [+] http://xxx.yyy.co.jp/mod/PDFJ/
         [+] http://xxx.yyy.co.jp/mod/PDFJ/?MA
         [+] http://xxx.yyy.co.jp/mod/PDFJ/?MD
         [+] http://xxx.yyy.co.jp/mod/PDFJ/?SA
         [+] http://xxx.yyy.co.jp/mod/PDFJ/?SD
         [+] http://xxx.yyy.co.jp/mod/SQL/?MA
         [+] http://xxx.yyy.co.jp/mod/SQL/Dialects/
         [+] http://xxx.yyy.co.jp/mod/SQL/Dialects/?MD
         [+] http://xxx.yyy.co.jp/mod/SQL/Statement/
         [+] http://xxx.yyy.co.jp/mod/XML/
         [+] http://www.xxx.yyy.co.jp/wp-content/uploads/2013/04/
         [+] http://www.xxx.yyy.co.jp/wp-content/uploads/2015/07/?MD
         [+] http://www.xxx.yyy.co.jp/wp-content/uploads/2015/09/
         [+] http://www.xxx.yyy.co.jp/wp-content/uploads/2015/09/?MA
         [+] http://www.xxx.yyy.co.jp/wp-content/uploads/2015/09/?SA
         [+] http://www.xxx.yyy.co.jp/wp-content/uploads/2015/09/?SAhttp://www.xxx.yyy.co.jp/wp-content/uploads/2015/07/?MD
         [+] http://www.xxx.yyy.co.jp/wp-content/uploads/2015/09/?SD
         [+] http://www.xxx.yyy.co.jp/wp-content/uploads/2015/?ND
         [+] http://www.xxx.yyy.co.jp/wp-content/uploads/2016/02/
         [+] http://www.xxx.yyy.co.jp/wp-content/uploads/2016/02/?MA
         [+] http://www.xxx.yyy.co.jp/wp-content/uploads/2016/05/?DD
         [+] http://www.xxx.yyy.co.jp/wp-content/uploads/2016/06/?MA
         [+] http://www.xxx.yyy.co.jp/wp-content/uploads/2016/07/
         [+] http://www.xxx.yyy.co.jp/wp-content/uploads/2016/07/http://www.xxx.yyy.co.jp/wp-content/uploads/2018/11/?ND
         [+] http://www.xxx.yyy.co.jp/wp-content/uploads/2016/09/?SA
         [+] http://www.xxx.yyy.co.jp/wp-content/uploads/2016/09/?SD
         [+] http://www.xxx.yyy.co.jp/wp-content/uploads/2016/09/?SDhttp://www.xxx.yyy.co.jp/wp-content/uploads/2016/09/?SA
         [+] http://www.xxx.yyy.co.jp/wp-content/uploads/2016/12/?SA
         [+] http://www.xxx.yyy.co.jp/wp-content/uploads/2016/12/?SD
         [+] http://www.xxx.yyy.co.jp/wp-content/uploads/2016/?MA
         [+] http://www.xxx.yyy.co.jp/wp-content/uploads/2017/
         [+] http://www.xxx.yyy.co.jp/wp-content/uploads/2017/11/?NA
         [+] http://www.xxx.yyy.co.jp/wp-content/uploads/2018/
         [+] http://www.xxx.yyy.co.jp/wp-content/uploads/2018/01/?SA
         [+] http://www.xxx.yyy.co.jp/wp-content/uploads/2018/02/?DA
         [+] http://www.xxx.yyy.co.jp/wp-content/uploads/2018/03/
         [+] http://www.xxx.yyy.co.jp/wp-content/uploads/2018/08/?SA
         [+] http://www.xxx.yyy.co.jp/wp-content/uploads/2018/11/
         [+] http://www.xxx.yyy.co.jp/wp-content/uploads/2018/11/?ND
         [+] http://www.xxx.yyy.co.jp/wp-content/uploads/2019/02/?ND
         [+] http://www.xxx.yyy.co.jp/wp-content/uploads/2019/04/
         [+] http://www.xxx.yyy.co.jp/wp-content/uploads/2019/10/?MA
         [+] http://www.xxx.yyy.co.jp/wp-content/uploads/2019/10/?SA
         [+] http://www.xxx.yyy.co.jp/wp-content/uploads/2019/?MD
         [+] http://www.xxx.yyy.co.jp/wp-content/uploads/2020/06/
         [+] http://www.xxx.yyy.co.jp/wp-content/uploads/2020/06/?MD
         [+] http://www.xxx.yyy.co.jp/wp-content/uploads/2020/06/?MDhttp://xxx.yyy.co.jp/mod/XML/
         [+] http://www.xxx.yyy.co.jp/wp-content/uploads/2021/03/
         [+] http://www.xxx.yyy.co.jp/wp-content/uploads/2022/02/
         [+] http://www.xxx.yyy.co.jp/wp-content/uploads/2022/02/?MD
         [+] http://www.xxx.yyy.co.jp/wp-content/uploads/?ND
    
    
[/code]

このように部分的に1つの文字列に2つURLがドッキングする形で出力されてしまいます。この問題をなんとか正規表現で解決したいのですが、現在に至るまでうまく解決できていません。

現在わかっていることは、`result+=$checkdata;`という複合代入を行うとURLが重なる現象が起こるようです。しかし解決策はわかっていない状態です。

この場合どのような方法を使えば出力結果をソートできるのでしょうか？  
ご指摘は常に返信でお返しいたします。


CC BY-SA 4.0
2022-10-12T09:02:56.963
91563
2022-10-12T13:02:28.683
51473
question
linux 正規表現 bash
接着した2つのURLを正規表現で分離し、ソートしたい


そのまま試せるようなコードでは無いので確認していませんが…… 恐らく下記が原因でしょう。

### コマンド置換での末尾改行の削除

これは `bash` に限りませんが、コマンド置換では末尾の改行文字が削除されます。

> `$(command)`  
>  ...  
>  bash は command を実行し、 command の標準出力でコマンド置換の部分を置き換えます。 この際、
> **末尾の改行文字は削除されます** 。  
>  —— [Man page of
> BASH](https://linuxjm.osdn.jp/html/GNU_bash/man1/bash.1.html)

よって、変数に `+=` する前か後に改行も足せばよいはずです。

（ただ、そもそもの話になりますが、こうやって変数に蓄積していくのでは無く、`curl | grep | sort`
とパイプで繋げていく方が簡潔になると思います）


CC BY-SA 4.0
2022-10-12T12:53:00.990
91565
2022-10-12T13:02:28.683
2022-10-12T13:02:28.683
3054
3054
91563
answer