コンピュヌタヌの䞖界に぀いお孊ぶ孊生の脳には䜕ができるでしょうか?

今日は。

Bash で別のスクリプトを曞き終えた埌、すべおが完党に異なるはずであるこずに気付きたしたが、すべおが機胜したした。 問題を解決するために私がどんな猥耻なこずや束葉杖を曞いたかをお芋せしたいのですが、ただ知識のワゎンがありたせん。 いわばプログラミングの颚刺画。

タスク


次のこずが必芁になりたした。

  • 四角圢を陀く単語の韻を倚く衚瀺したした
  • XNUMX ぀の単語の倚くの韻を組み合わせた

䜕のために たあ、それだけです - そしおそれだけです。
知らない人はいないかもしれたせんが、四角韻 (䞀般的な甚語では四角韻) ずは、綎りの最埌の XNUMX 文字が䞀臎する XNUMX ぀の単語であり、これだけで韻が成立したす。 たずえば、バラは霜が降りたす。 タむダ - 車。 珟代詩における正方圢の䜿甚は、その原始性のため人々に特に承認されおいたせん。

゜リュヌション


最も簡単な解決策は、既存の韻ゞェネレヌタヌである HOST を䜿甚するスクリプトを Bash で䜜成するこずだず私には思えたした。HOST は䞻にスペルではなく子音によっお韻を遞択したす。 どのようなホストですか? 実名を出すず広告だず蚀われおしたうからです。 䜿い続けおみたせんか? たず、子音に基づいお韻を遞択するずいう圌の利点にもかかわらず、圌は䟝然ずしお四角圢を生成するこずがよくありたす。 次に、䟝然ずしお頭で考え、タブを切り替えるのに時間を費やし、XNUMX ぀の単語の韻を芋぀けるためにリスト内の繰り返し単語を暗蚘するこずに゚ネルギヌを費やす必芁がありたす。

力匷い韻を螏む

私が䜕を知っおいるのでしょうか ナヌティリティに぀いおは知っおいたす wgetの、指定された URL にあるペヌゞをダりンロヌドしたす。 さお、リク゚ストを実行したしょう。韻を螏んだ単語で名前が付けられたファむル内の HTML ペヌゞを取埗したす。 たずえば、「here」ずいう単語を怜玢しおみたしょう。

wget https://HOST/rifma/зЎесь

しかし、必芁なのは単語のリストだけです。他のすべおを削陀するにはどうすればよいでしょうか? 芋おみるず、単語のリストは、たずえそれがどんなに奇劙であっおも、リストの圢匏でフォヌマットされおおり、単語はタグ内にあるこずがわかりたす。 。 そうですね、私たちには玠晎らしいナヌティリティがありたす。 sed - このように曞き留めおみたしょう:

cat $word | grep '<li>' | sed -e "s%<li>%%" | sed -e "s%</li>%%" | sed -e "s/ //g" | sed -e "/^$/d" 1> $word

たず、ワヌドファむルからタグを含む行を遞択したす。 — 空のタグず単語を含む行が倧量に埗られたす。 タグ自䜓ずその終了タグを削陀したす。ここでは、タグ自䜓にスラッシュの代わりにパヌセント蚘号が䜿甚されおいたす。 すでにスラッシュが入っおいたすが、なぜですか? sed ちょっずあなたを理解できたせん。 そしお、興味があればすべお倧䞈倫です。 ファむルからすべおのスペヌスを削陀し、空行を削陀したす。 出来䞊がり - 既成の単語リストです。

最埌の文字で韻を螏む単語を削陀するには、元の単語から最埌の XNUMX 文字を遞択し、リストをクリアしたす。

squad=${word:((${#word}-2)):2}
cat $word | sed -e "/.$squad$/d" 1> $word

私たちは芋お、詊しおみたす - すべおがうたくいきたす...それでは、「遊び」ずいう単語のリストはどこにあるでしょうか? そしお「行っおきたす」ずいう蚀葉に぀いおは ファむルが空です! これはすべお、これらの単語が動詞であるためであり、動詞で韻を螏む人にそれらの単語がどのような圱響を䞎えるかを私たちは知っおいたす。 動詞の韻は角韻よりも悪いです。ロシア語には最も倚くの動詞があり、それらはすべお同じ語尟を持ちたす。そのため、語尟をチェックした埌、最終ファむルには動詞が含たれおいたせんでした。

しかし、私たちは急いでいたせん。 それぞれの単語には韻だけでなく共鳎もあり、時には韻よりもはるかに良く聞こえたす。だからこそ、それらは共鳎なのですフランス語のassonance、ラテン語のassonoから、私は調和しお聞こえたす。

共鳎が埗られたす

ここからが楜しいずころです。スクリプトを実行し、HTTP リク゚ストを送信し、レスポンスを受信するこずによっお、ア゜ナンスが別の URL の同じペヌゞに衚瀺されたす。 なんず蚀えたすか wgetの「ボタンを抌したすか しかし、それは無理です。 悲しいこずに。

行内の URL がどういうわけか倉曎されおいるこずに気づき、ア゜ナンスに切り替えた埌にそこにあったものをコピヌし、ブラりザの新しいタブに貌り付けたした。匷力な韻が開きたした。 しないこず。

基本的に、サヌバヌにリク゚ストを送信するスクリプトが実行されるかどうか、たたはナヌザヌが手動でリク゚ストを入力するかどうかは、サヌバヌにずっお重芁ではないはずだず私は思いたした。 それで 誰にも分からない、調べおみたしょう。

どこに送るのか 䜕を送ろうか サヌバヌ IP ぞの HTTP リク゚スト、GET のようなものがありたす... 次に HTTP/1.1 のものがありたす... ブラりザヌが䜕をどこに送信するかを確認する必芁がありたす。 むンストヌル wireshark、トラフィックを芋おください。

0040 37 5d a3 84 27 e7 fb 13 6d 93 ed cd 56 04 9d 82 7]£.'çû.m.íÍV...
0050 32 7c fb 67 46 71 dd 36 4d 42 3d f3 62 1b e0 ad 2|ûgFqÝ6MB=ób.à.
0060 ef 87 be 05 6a f9 e1 01 41 fc 25 5b c0 77 d3 94 ï.Ÿ.jùá.AÃŒ%[ÀwÓ.

えヌっず...䜕 そうそう、HTTPS がありたす。 䜕をするか 自分自身に察しお MITM 攻撃を開始したすか? 理想的には、被害者自身が私たちを助けおくれるでしょう。

䞀般に、ブラりザをサヌフィンするこずに決めたので、最終的にリク゚スト自䜓ず宛先を芋぀けたした。 行く

端末ずの察話

telnet IP PORT
Trying IP...
Connected to IP.
Escape character is '^]'.
GET /rifma/%D0%BC%D0%B0%D1%82%D1%8C?mode=block&type=asn HTTP/1.1
Host: HOST
Accept-Language: en-US,en;q=0.5
X-Requested-With: XMLHttpRequest
Connection: close

HTTP/1.1 400 Bad Request
Server: nginx/1.8.0
Date: Sun, 03 Nov 2019 20:06:59 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 270
Connection: close

<html>
<head><title>400 The plain HTTP request was sent to HTTPS port</title></head>
<body bgcolor="white">
<center><h1>400 Bad Request</h1></center>
<center>The plain HTTP request was sent to HTTPS port</center>
<hr><center>nginx/1.8.0</center>
</body>
</html>
Connection closed by foreign host.

おい。 ふふふ。 実際、これは、HTTPS ポヌトに裞の HTTP リク゚ストを送信するずきに予想したこずです。 今すぐ暗号化する必芁がありたすか? このすべおの手間は RSA キヌで、次に SHA256 で行われたす。 なぜ、あるのですか OpenSSLの そういったもののために。 さお、䜕をすべきかはすでにわかっおいたす。最初に Referer フィヌルドず Cookie フィヌルドを削陀するだけです。これらは問題にはあたり圱響しないず思いたす。

端末ずの察話

openssl s_client -connect IP:PORT
{ВсякОе ключО, сертОфОкаты}
GET /rifma/%D0%B7%D0%B4%D0%B5%D1%81%D1%8C?mode=block&type=asn HTTP/1.1
Host: HOST
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:70.0) Gecko/20100101 Firefox/70.0
Accept: text/javascript,text/html,application/xml,text/xml,*/*
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate, br
X-Requested-With: XMLHttpRequest
Connection: keep-alive

HTTP/1.1 200 OK
Content-Type: text/html;charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive
Vary: Accept-Encoding
Status: 200 OK
Date: Sun, 03 Nov 2019 20:34:33 GMT
Set-Cookie: COOKIE
X-Powered-By: Phusion Passenger 5.0.16
Server: nginx/1.8.0 + Phusion Passenger 5.0.16
Expires: Thu, 01 Jan 1970 00:00:01 GMT
Cache-Control: no-cache
Strict-Transport-Security: max-age=31536000
Content-Security-Policy: block-all-mixed-content
Content-Encoding: gzip

コンピュヌタヌの䞖界に぀いお孊ぶ孊生の脳には䜕ができるでしょうか?

これは䜕ですか、サヌバヌ䞊での悪口ですか そうですね、少なくずも圌らは 200 OK ず答えたした。぀たり、Cookie ずリファラヌは䜕も圱響したせん。 圧瞮はgzipですが、コピヌする堎合はASCII文字がコピヌされたす。 正確に、行を削陀できたす Accept ゚ンコヌディング。 すべお問題ありたせん。ア゜ナンスを含む HTML ドキュメントを取埗したす。 しかし、ここで XNUMX ぀の質問がありたす。OpenSSL を実行し、スクリプトを䜿甚しお OpenSSL にデヌタを転送するにはどうすればよいでしょうか? そしお、応答を受信した埌、いわば OpenSSL の「シェル」内に残った堎合、出力をどのように読み取るのでしょうか? XNUMX番目ではなく、XNUMX番目で䜕か思い぀くこずができれば...

あるずいいですね ハブルこのナヌティリティに぀いお読んだ堎所 期埅する、人間の察話を期埅するプログラムず察話するプロセスを自動化したす。 チヌムを持぀こずはさらに魅力的です 自動期埅、生成 期埅する あなたのアクションに基づいおスクリプトを䜜成したす。 さお、それを起動し、これをすべお実行しお、完成したスクリプトがこれです。 圌だけがずおも倧きい、そしおそれはすべおの理由です OpenSSLの 蚌明曞、キヌ、および 期埅する これらすべおの出力を埅っおいたす。 これは必芁ですか? いいえ。 最初のプロンプト党䜓を削陀し、最埌の改行「r」だけを残したす。 たた、リク゚ストから User-Agent フィヌルドず Accept フィヌルドも削陀したす。これらは䜕も圱響したせん。 それでは、起動したしょう。 スクリプトは実行されたしたが、秘蔵の HTML ドキュメントはどこにあるのでしょうか? 期埅する それを食べたした。 圌にそれを吐き出させるには、次のように入力する必芁がありたす。

set results $expect_out(buffer)

スクリプトの終了前 - これは実行可胜ファむルの出力がどのように曞き蟌たれるかです。 期埅する'omコマンドを実行するず画面に衚瀺されたす。 芁玄するず、次のような感じです。

スクリプトを期埅しおください

#!/usr/bin/expect -f

set timeout -1
spawn openssl s_client -connect IP:PORT
match_max 100000
expect -exact "
---r
"
send -- "GET /rifma/%d0%b7%d0%b4%d0%b5%d1%81%d1%8c?mode=block&type=asn HTTP/1.1rHost: HOSTrAccept-Language: en-US,en;q=0.5rX-Requested-With: XMLHttpRequestrConnection: close"
expect -exact "GET /rifma/%d0%b7%d0%b4%d0%b5%d1%81%d1%8c?mode=block&type=asn HTTP/1.1r
Host: HOSTr
Accept-Language: en-US,en;q=0.5r
X-Requested-With: XMLHttpRequestr
Connection: close"
send -- "r"
set results $expect_out(buffer)
expect -exact "r
"
send -- "r"
expect eof

しかしそれだけではありたせん ご芧のずおり、すべおの䟋でリク゚スト URL は静的ですが、どの単語を関連付けるかを決定するのは URL です。 そのため、ASCII では「%d0%b7%d0%b4%d0%b5%d1%81%d1%8c」ずいう単語、たたは UTF-8 では「here」ずいう単語を垞に怜玢するこずになりたす。 䜕をするか もちろん、毎回新しいスクリプトを生成するだけです。 もうない 自動期埅「ああ、そしお助けを借りお」 echo、 なぜなら私たちの新しいものでは、蚀葉以倖は䜕も倉わりたせん。 そしお、キリル文字の単語を URL 圢匏にむンテリゞェントに翻蚳するにはどうすればよいのかずいう新たな問題も長続きしたす。 端末も特に䜕もありたせん。 たあ、倧䞈倫、できたすよね できる

私に䜕ができるか芋おみたしょう

function furl {
furl=$(echo "$word" | sed 's:А:%d0%90:g;s:Б:%d0%91:g;s:В:%d0%92:g;s:Г:%d0%93:g;s:Д:%d0%94:g;s:Е:%d0%95:g;s:Ж:%d0%96:g;s:З:%d0%97:g;s:И:%d0%98:g;s:Й:%d0%99:g;s:К:%d0%9a:g;s:Л:%d0%9b:g;s:М:%d0%9c:g;s:Н:%d0%9d:g;s:О:%d0%9e:g;s:П:%d0%9f:g;s:Р:%d0%a0:g;s:С:%d0%a1:g;s:Т:%d0%a2:g;s:У:%d0%a3:g;s:Ѐ:%d0%a4:g;s:Ð¥:%d0%a5:g;s:Њ:%d0%a6:g;s:Ч:%d0%a7:g;s:К:%d0%a8:g;s:Щ:%d0%a9:g;s:Ъ:%d0%aa:g;s:Ы:%d0%ab:g;s:Ь:%d0%ac:g;s:Э:%d0%ad:g;s:Ю:%d0%ae:g;s:Я:%d0%af:g;s:а:%d0%b0:g;s:б:%d0%b1:g;s:в:%d0%b2:g;s:г:%d0%b3:g;s:ÐŽ:%d0%b4:g;s:е:%d0%b5:g;s:ж:%d0%b6:g;s:з:%d0%b7:g;s:О:%d0%b8:g;s:й:%d0%b9:g;s:к:%d0%ba:g;s:л:%d0%bb:g;s:ÐŒ:%d0%bc:g;s:Ðœ:%d0%bd:g;s:П:%d0%be:g;s:п:%d0%bf:g;s:р:%d1%80:g;s:с:%d1%81:g;s:т:%d1%82:g;s:у:%d1%83:g;s:ф:%d1%84:g;s:х:%d1%85:g;s:ц:%d1%86:g;s:ч:%d1%87:g;s:ш:%d1%88:g;s:щ:%d1%89:g;s:ъ:%d1%8a:g;s:ы:%d1%8b:g;s:ь:%d1%8c:g;s:э:%d1%8d:g;s:ю:%d1%8e:g;s:я:%d1%8f:g;s:ё:%d1%91:g;s:Ё:%d0%81:g')}

合蚈するず、単語を ASCII テキストに倉換するスクリプトがあり、OpenSSL 経由でサヌバヌからア゜ナンスを含むサむト ペヌゞを芁求する別のスクリプトが生成されたす。 そしお、最埌のスクリプトの出力をファむルにリダむレクトし、昔ながらの方法でそれを枡したす。 「フィルタヌ」 䜙分な正方圢を削陀しおファむルに曞き蟌みたす。

たくさんの亀差点。 結論

実際、これこそが最も問題を匕き起こさない原因なのです。 䞊蚘の手順を XNUMX ぀の単語に察しお実行し、XNUMX ぀のリストから各単語を比范し、䞀臎するものが芋぀かった堎合は出力したす。 これで、XNUMX ぀の単語を入力ずしお受け取り、その䞡方で韻を螏む単語のリストを衚瀺するスクリプトが完成したした。同音も考慮されおおり、手動で XNUMX ぀のタブを切り替えたり、単語を「目で」芚えたりする必芁はありたせん。すべお収集され、考慮されおいたす。自動的に砎棄されたす。 玠晎らしい。

この出版物の目的は、人が䜕かを必芁ずするなら、ずにかくそれを行うだろうずいうこずを瀺すこずでした。 非垞に非効率的で、曲がっおいお、䞍気味ですが、うたくいきたす。

出所 habr.com

コメントを远加したす