Chii chinonzi huropi hwemudzidzi ari kudzidza nezvenyika yekombuta inokwanisa?

Nenguva yezuva.

Ndapedza kunyora imwe script muBash, ndakaona kuti zvese zvinofanirwa kunge zvakasiyana zvachose, asi zvese zvakashanda. Ndinoda kukuratidzai zvinyadzi nemadondoro andakanyora kuti ndigadzirise dambudziko, asi ndisati ndave nengoro yeruzivo. Mune mamwe mazwi, caricature yepurogiramu.

Basa


Chimwe chinhu chakazodiwa kuti:

  • Taridza nhetembo dzakawanda dzeizwi, kunze kwemakona
  • Akayambuka rhymes akawanda emazwi maviri

Yechii? Zvakanaka, ndizvozvo - uye ndizvozvo.
Ndiani asingazivi, sikweya rhyme (mumutauro wakafanana - sikweya) mazwi maviri ane mavara maviri ekupedzisira muchiperengo anopindirana, ayo (kazhinji, ichi ndicho chinhu chete) chinovaita rhyme. Somuenzaniso, marozi ane chando; tire - motokari. Iko kushandiswa kwemaskweya mune yemazuva ano versification haina kunyanya kutenderwa nevanhu, nekuda kwekusaziva kwavo.

chisarudzo


Zvaiita sekuti mhinduro iri nyore yaive yekunyora script muBash iyo inoshandisa yakatovapo rhyme jenareta - HOST, iyo inonyanya kuvasarudza nekonsonanti, uye kwete nezviperengo. Imhandoi yeHOST? Nekuti kana iwe ukaratidza zita chairo resaiti, vanozotaura kuti ishambadziro. Wadii kuramba uchiishandisa? Chekutanga, kunyangwe nemukana wake wekusarudza rhymes zvichienderana nemakonzonenzi, anogara achigadzira masikweya. Kechipiri, iwe uchiri kufanira kufunga nehuropi hwako, shandisa nguva uchichinja pakati pematebhu, uye simba nemusoro akadzokororwa mazwi mumazita kuti uwane rhyme yemashoko maviri.

Kuwana rhymes yakasimba

Chii chandinoziva? Ndinoziva nezvekushandisa wget, iyo inodhawunirodha peji pane yakatarwa URL. Zvakanaka, ngatiite chikumbiro - tinowana peji reHTML mune faira rine zita rine rhyming izwi. Semuenzaniso, ngatitsvagei izwi rekuti "pano":

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

Asi ini ndinongoda rondedzero yemashoko, ndingabvisa sei zvimwe zvese? Isu tinotarisa uye tinoona kuti rondedzero yemazwi yakarongwa, kunyangwe ingave inoshamisa sei, muchimiro cherondedzero, uye mazwi ari mumatagi. . Zvakanaka, tine chibatsiro chikuru. sed - ngatizvinyore pasi seizvi:

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

Kutanga, kubva paizwi faira, sarudza mitsetse ine tag - tinowana boka remategi asina chinhu uye mitsetse ine mazwi. Isu tinobvisa iyo teki pachayo uye yekuvhara kwayo - pano muzana zviratidzo zvinoshandiswa pachinzvimbo chekucheka nekuti mune iyo tag pachayo. kwatove nekucheka, nei? sed haakunzwisisi zvishoma. Uye zvese zvakanaka nekufarira. Tinobvisa nzvimbo dzose kubva mufaira, bvisa mitsetse isina chinhu. Voila - runyoro rwakagadzirirwa rwemashoko.

Kuti ubvise mazwi ane rhyme uchishandisa mavara ekupedzisira, sarudza mavara maviri ekupedzisira kubva paizwi rekutanga uye bvisa rondedzero:

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

Tinotarisa, tinoedza - zvose zvinoshanda ... saka, ndeipi rondedzero yezwi rokuti "kutamba"? Uye nokuda kweshoko rokuti "ndiri kuenda"? Iyo faira haina chinhu! Uye izvi zvese imhaka yekuti mazwi aya zviito, uye tinoziva zvavanoita kune avo vanoita nhetembo nezviito. Verb rhyme yakaipisisa kudarika kunyange square rhyme, nokuti mutauro weRussia une mazwi akawanda, uye ose ane magumo akafanana, ndicho chikonzero akanga asiri mufaira rekupedzisira mushure mekutarisa magumo.

Zvisinei, hatisi kukurumidza. Paizwi rega rega hapana rhymes chete, asiwo maassonances, ayo dzimwe nguva anonzwika ari nani pane rhyme - ndosaka ari assonances (French assonance, kubva muchiLatin assono - I sound in tune).

Tinowana maassonances

Apa ndipo panotanga kunakidzwa: assonances inoonekwa pane imwe URL, uye pane imwechete peji, nekuita script, kutumira chikumbiro cheHTTP uye kugamuchira mhinduro. Ndotaura sei wget'Unodzvanya bhatani here? Asi hapana nzira. Zvinosuruvarisa.

Ndichiona kuti iyo URL mumutsara yaichinja neimwe nzira, ndakakopa zvaivepo mushure mekuchinja kune assonances uye ndokuisa mubrowser nyowani tab - rhymes yakasimba yakavhurwa. Kwete izvozvo.

Chaizvoizvo, ndakafunga, hazvifanirwe kuve nebasa kune sevha kuti script inotumira iyo chikumbiro ichiitwa, kana kuti munhu anoinyora neruoko. Saka? Ndiani anoziva, ngatiende kunozviongorora.

Kupi kutumira? Chii kutumira? HTTP chikumbiro kune server IP, pane chimwe chinhu chakadai GET ... ipapo pane chimwe chinhu HTTP / 1.1 ... Tinofanira kuona izvo browser inotumira uye kupi. Install wireshark, tarisa traffic:

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... chii? Ehe, isu tine HTTPS. Kuita sei? Tangisa MITM kurwisa iwe pachako? Zvamazvirokwazvo, nyajambwa amene achatibetsera.

Kazhinji, ndafunga kusefa bhurawuza, ndakazowana chikumbiro pachezvacho uye nemutauri. Enda:

Nhaurirano neiyo terminal

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. Hongu, ndizvo zvandaitarisira pakutumira isina HTTP chikumbiro kune HTTPS chiteshi. Tinofanira encrypt izvozvi? Zvese izvi kupokana nemakiyi eRSA, ipapo neSHA256. Sei, zviripo OpenSSL nokuda kwezvinhu zvakadaro. Zvakanaka, isu tatoziva zvekuita, isu tichangobvisa Referer uye Cookie minda kutanga - ndinofunga haizokanganisa nyaya yacho zvakanyanya:

Nhaurirano neiyo terminal

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

Chii chinonzi huropi hwemudzidzi ari kudzidza nezvenyika yekombuta inokwanisa?

Chii ichi, kutuka pane server? Zvakanaka, ivo vakandipindura 200 OK, zvinoreva kuti makuki uye murevereri hazvina chazvinokanganisa. Kudzvanya ndeye gzip, asi kana uchikopa, ASCII mavara anokopwa. Chaizvoizvo, unogona kubvisa mutsara Bvuma-encoding. Zvese zvakanaka - tinowana gwaro reHTML, ikozvino rine assonances. Asi heino mibvunzo miviri: nzira yekumhanyisa OpenSSL uye kuendesa data kwairi uchishandisa script? Uye kuverenga sei zvakabuda kana mushure mekugamuchira mhinduro isu tinoramba, sekunge, muOpenSSL "shell"? Kana iwe uchigona kuuya nechimwe chinhu neyechipiri, asi neyekutanga ...

Zvakanaka kuti zviripo Habrkwandakaverenga nezvekushandisa tarisira, iyo inogadzirisa maitiro ekudyidzana nemapurogiramu anotarisira kusangana kwevanhu. Kuva nechikwata kunotoyevedza autoexpect, kugadzira tarisira script zvichienderana nezviito zvako. Zvakanaka, isu tinotangisa, ita zvese izvi uye heino script yapera. Iye chete mukuru kwazvo, uye zvese nekuti OpenSSL inoratidza zvitupa, makiyi, uye tarisira inomirira kubuda kwezvose izvi. Tinoda izvi here? Aihwa. Isu tinobvisa yese yekutanga kukurumidza, tichisiya chete yekupedzisira mutsara kutyora 'r'. Isu tinobvisawo Mushandisi-Mumiriri uye Gamuchira minda kubva pachikumbiro chedu - haina chainokanganisa. Saka, ngatitangei. Iyo script yakaurayiwa, asi iripi iro rakakosheswa HTML gwaro? Tarisira akaidya. Kuti aite kuti asvipire, iwe unofanirwa kuisa:

set results $expect_out(buffer)

isati yapera script - iyi ndiyo nzira iyo inobuda yezvinoitwa ichanyorwa tarisira'om command uye inoratidzwa pachiratidziro. Muchidimbu, chimwe chinhu chakadai:

kutarisira 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

Asi handizvo zvoga! Sezvauri kuona, mumienzaniso yese URL yekukumbira yaive yakamira, asi ndiyo URL ine basa rekuti izwi ripi richabatanidzwa neassonances. Uye saka zvinozoitika kuti ticharamba tichitsvaga izwi rekuti "%d0%b7%d0%b4%d0%b5%d1%81%d1%8c" muASCII kana "pano" muUTF-8. Kuita sei? Ehe, ingo gadzira script nyowani nguva dzese, shamwari! Kwete zvakare autoexpect'o, uye nerubatsiro echo, nokuti Mune yedu nyowani, hapana chinoshanduka kunze kweshoko. Uye rarama dambudziko idzva: isu tingashandura sei nehungwaru izwi kubva kuCyrillic kuita URL fomati? Iko hakuna chinhu chakakosha kune iyo terminal zvakare. Zvakanaka, zvakanaka, tinogona kuzviita, handiti? Inogona:

Tarisa zvandinogona kuita!

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

Pakazara, isu tine script inoshandura izwi kuita ASCII mavara, ichigadzira imwe script inokumbira saiti peji ine assonances kubva kuseva kuburikidza neOpenSSL. Uye tobva tatungamira kuburitsa kwekupedzisira script kune faira uye, nenzira yechinyakare, kupfuura nayo "sefa" mamwe masikweya uye wonyora kune iyo faira.

Kusangana kwevakawanda. Pazasi mutsetse

Chaizvoizvo, izvi ndizvo chaizvo zvinokonzeresa matambudziko madiki. Isu tinoita maitiro ari pamusoro emazwi maviri, zvino kubva pamazita maviri tinoenzanisa izwi rimwe nerimwe nerimwe uye kana machisi awanikwa, tinoburitsa. Iye zvino isu tine script inotora mazwi maviri sekuisa uye inoratidza rondedzero yemazwi ane rhyme nezvose, uye kunyangwe tichifunga nezve assonances, uye zvese izvi pasina nemaoko kushandura pakati pematabhu mana uye kurangarira mazwi "neziso" - ese akaunganidzwa, akaverengerwa. nokuda uye kuraswa otomatiki. Wonderful.

Chinangwa chebhuku iri chaiva chokuratidza kuti kana munhu achida chimwe chinhu, anochiita zvakadaro. Yakanyanya kusashanda, yakakombama, inotyisa, asi inoshanda.

Source: www.habr.com

Voeg