Ki sa sèvo yon elèv ap aprann sou mond òdinatè a kapab fè?

Bon jou.

Lè m fin ekri yon lòt script nan Bash, mwen reyalize ke tout bagay ta dwe konplètman diferan, men tout bagay te travay. Mwen vle montre w ki obscenity ak beki mwen te ekri pou rezoud pwoblèm nan, men poko gen yon kabwèt konesans. Nan lòt mo, yon karikatura nan pwogramasyon.

Objektif Travay la


Yon bagay te vin nesesè pou:

  • Montre anpil rim pou mo a, eksepte pou kare
  • Travèse rim yo anpil nan de mo

Pou kisa? Oke, se li - e se li.
Ki moun ki pa konnen, yon rim kare (nan langaj komen - yon kare) se de mo ki gen de dènye lèt nan òtograf la kowenside, ki (souvan, sa a se sèl bagay) fè yo yon rim. Pou egzanp, roz yo glacial; kawotchou - machin. Itilizasyon kare nan vèsifikasyon modèn pa patikilyèman apwouve pa moun, akòz primitif yo.

desizyon


Li te sanble pou mwen ke solisyon ki pi senp la te ekri yon script nan Bash ki sèvi ak yon dèlko rim ki deja egziste - HOST, ki prensipalman chwazi yo pa konsonans, epi yo pa òtograf. Ki kalite HOST? Paske si ou endike non reyèl la nan sit la, yo pral di ke li se yon reklam. Poukisa nou pa kontinye sèvi ak li? Premyèman, malgre avantaj li genyen nan chwazi rim ki baze sou konsonans, li toujou souvan pwodui kare. Dezyèmman, ou toujou oblije reflechi ak sèvo ou, pase tan chanje ant onglet, ak enèji memorize mo repete nan lis pou jwenn yon rim pou de mo.

Jwenn rim fò

Kisa mwen konnen? Mwen konnen sou sèvis piblik la wje, ki telechaje paj la nan URL espesifye a. Oke, ann egzekite demann lan - nou jwenn yon paj HTML nan yon dosye ki rele ak yon mo ki rime. Pou egzanp, ann chèche mo "isit la":

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

Men, mwen sèlman bezwen yon lis mo, ki jan mwen ka debarase m de tout lòt bagay? Nou gade ak wè ke lis la nan mo yo fòma, kèlkeswa jan li ka etranj, nan fòm lan nan yon lis, ak mo yo nan tags. . Oke, nou gen yon gwo sèvis piblik. SED - Ann ekri l konsa:

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

Premyèman, nan dosye mo a, chwazi liy ki genyen tag la — nou jwenn yon pakèt etikèt vid ak liy ak mo. Nou retire tag nan tèt li ak yon sèl fèmen li yo - isit la senbòl pousan yo itilize olye pou yo koupe paske nan tag nan tèt li. gen deja yon koupe, poukisa? SED pa konprann ou yon ti jan. Ak tout bagay anfòm ak enterè. Nou retire tout espas nan dosye a, retire liy vid yo. Voila - yon lis mo pare yo.

Pou retire mo ki rime lè l sèvi avèk dènye lèt yo, chwazi de dènye lèt yo nan mo orijinal la epi efase lis la:

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

Nou gade, nou eseye - tout bagay ap travay... Se konsa, ki kote lis la pou mo "jwe" la? E pou mo "mwen prale"? Dosye a vid! Epi sa a se tout paske mo sa yo se vèb, epi nou konnen sa yo fè ak moun ki rime ak vèb. Vèb rim se pi mal pase menm rim kare, paske lang Ris la gen plis vèb, epi yo tout gen menm tèminezon, se poutèt sa yo pa t nan dosye final la apre yo fin tcheke tèminezon yo.

Sepandan, nou pa prese. Pou chak mo pa gen sèlman rim, men tou, assonans, ki pafwa son pi bon pase rim - se poutèt sa yo se assonans (assonans franse, ki soti nan Latin assono - mwen son an amoni).

Nou jwenn asonans

Sa a se kote plezi a kòmanse: assonans parèt nan yon URL separe, ak sou menm paj la, lè yo egzekite yon script, voye yon demann HTTP ak resevwa yon repons. Kouman mwen ka di wje'Ou peze bouton an? Men, pa gen okenn fason. Malerezman.

Remake ke URL la nan liy lan te yon jan kanmenm chanje, mwen kopye sa ki te la apre chanje nan asonans epi kole li nan yon nouvo tab navigatè - rim fò louvri. Se pa sa.

An reyalite, mwen te panse, li pa ta dwe gen pwoblèm nan sèvè a si wi ou non script ki voye li demann lan egzekite, oswa si moun nan tape li alamen. Se konsa? Ki moun ki konnen, ann ale tcheke li.

Ki kote pou voye? Kisa pou voye? HTTP demann IP sèvè a, gen yon bagay tankou GET... Lè sa a, gen yon bagay HTTP/1.1... Nou bezwen wè sa navigatè a voye ak ki kote. Enstale wirèychark, gade trafik la:

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Ó.

Um... kisa? Oh wi, nou gen HTTPS. Kisa pou fe? Lanse yon atak MITM sou tèt ou? Idealman, viktim nan tèt li pral ede nou.

An jeneral, mwen te deside navige navigatè a, mwen finalman jwenn demann lan tèt li ak moun k ap adrese a. Ale:

Dyalòg ak tèminal la

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.

Hey. Hehehe. Vreman vre, se sa mwen te espere lè m te voye yon demann HTTP vid nan yon pò HTTPS. Èske nou ta dwe ankripte kounye a? Tout meli melo sa a ak kle RSA, Lè sa a, ak SHA256. Poukisa, gen Opansl pou bagay sa yo. Oke, nou deja konnen sa pou nou fè, nou pral jis retire jaden Referer ak Cookie an premye - mwen panse ke yo pa pral afekte pwoblèm nan anpil:

Dyalòg ak tèminal la

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

Ki sa sèvo yon elèv ap aprann sou mond òdinatè a kapab fè?

Kisa sa ye, sèmante sou sèvè a? Oke, omwen yo reponn mwen 200 OK, ki vle di ke cookies ak referrer la pa afekte anyen. Konpresyon se gzip, men lè kopye, karaktè ASCII yo kopye. Egzakteman, ou ka retire liy lan Aksepte-kodaj. Tout bagay anfòm - nou jwenn yon dokiman HTML, kounye a ak asonans. Men, isit la se de kesyon: ki jan yo kouri OpenSSL ak transfere done nan li lè l sèvi avèk yon script? Ak ki jan yo li pwodiksyon an si apre nou fin resevwa repons lan nou rete, kòm li te, nan yon "koki" OpenSSL? Si ou ka vini ak yon bagay ak dezyèm lan, men ak premye a...

Li bon ke genyen Habrkote mwen li sou sèvis piblik la atann, ki otomatize pwosesis la nan kominike avèk pwogram ki espere entèraksyon imen. Gen yon ekip se menm plis atire oto atann, jenere atann script ki baze sou aksyon ou yo. Oke, nou lanse li, fè tout sa a ak isit la se script la fini. Se sèlman li trè gwo, ak tout paske Opansl montre sètifika, kle, ak atann ap tann pwodiksyon tout bagay sa yo. Eske nou bezwen sa? Non. Nou retire tout premye èd memwa a, kite sèlman dènye liy repo 'r' la. Nou menm tou nou retire jaden Itilizatè-Ajan ak Aksepte nan demann nou an - yo pa afekte anyen. Donk, ann lanse. Script la te egzekite, men ki kote se dokiman an HTML trezò? Atann manje l. Pou fè l krache li, ou bezwen mete:

set results $expect_out(buffer)

anvan fen script la - sa a se ki jan pwodiksyon an nan ègzèkutabl la pral ekri atann'om lòd ak parèt sou ekran an. An rezime, yon bagay tankou sa a:

espere yon script

#!/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

Men, se pa tout! Kòm ou ka wè, nan tout egzanp URL demann lan te estatik, men se URL la ki responsab pou ki mo yo pral asosye ak asonans. Se konsa, li sanble ke nou pral toujou ap chèche mo "%d0%b7%d0%b4%d0%b5%d1%81%d1%8c" nan ASCII oswa "isit la" nan UTF-8. Kisa pou fe? Natirèlman, jis tou senpleman jenere yon nouvo script chak fwa, zanmi! Pa anko oto atann'Oh, ak èd la manke, paske Nan nouvo nou an, pa gen anyen ki chanje eksepte mo a. Epi viv nouvo pwoblèm nan: ki jan nou ka tradui entèlijans yon mo soti nan sirilik nan fòma URL? Pa gen anyen espesyal pou tèminal la tou. Oke, li nan oke, nou ka fè li, pa vre? Èske:

Gade sa mwen ka fè!

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')}

An total, nou gen yon script ki konvèti yon mo nan tèks ASCII, jenere yon lòt script ki mande yon paj sit ak asonans nan sèvè a atravè OpenSSL. Lè sa a, nou redireksyon pwodiksyon an nan script ki sot pase a nan yon dosye epi, nan fason fin vye granmoun alamòd, pase l 'nan "filtè" kare siplemantè epi ekri yo nan dosye a.

Entèseksyon anpil moun. Anba liy

Aktyèlman, sa a se egzakteman sa ki lakòz pi piti pwoblèm yo. Nou fè pwosedi ki anwo yo pou de mo, Lè sa a, nan de lis yo nou konpare chak mo ak chak epi si yo jwenn yon matche ak, nou soti li. Koulye a, nou gen yon script ki pran de mo kòm opinyon epi montre yon lis mo ki rime ak tou de, e menm pran an kont asonans, ak tout sa a san yo pa manyèlman chanje ant kat onglè ak sonje mo "pa je" - sa a tout kolekte, konte epi jete otomatikman. Bèl bagay.

Objektif piblikasyon sa a se te montre ke si yon moun bezwen yon bagay, li pral fè li kanmenm. Trè efikas, kwochi, grenpe, men li pral travay.

Sous: www.habr.com

Add nouvo kòmantè