Cad is féidir le hinchinn an dalta a fhoghlaim faoin saol ríomhaireachta?

Dea-lá.

Tar éis dom script eile a scríobh i Bash, thuig mé gur chóir go mbeadh gach rud go hiomlán difriúil, ach d'oibrigh gach rud. Ba mhaith liom a thaispeáint duit cad graostachtaí agus crutches a scríobh mé chun an fhadhb a réiteach, ach nach bhfuil fós vaigín eolais. I bhfocail eile, caricature de chláir.

Tasc


Bhí gá le rud éigin:

  • Taispeánadh go leor rann don fhocal, ach amháin i gcás cearnóga
  • Thrasnaigh an iliomad rann de dhá fhocal

I gcomhair Cad? Bhuel, sin é - agus sin é.
Cé nach bhfuil a fhios, is éard atá i rann cearnógach (i gcomhtheacs - cearnóg) ná dhá fhocal a bhfuil an dá litir dheireanacha sa litriú ag teacht leo, a dhéanann (go minic, seo an t-aon rud) rann dóibh. Mar shampla, tá rósanna frosty; boinn - carr. Níl úsáid cearnóga sa leagan nua-aimseartha ceadaithe go háirithe ag daoine, mar gheall ar a n-primitiveness.

cinneadh


Chonacthas dom gurbh é an réiteach is simplí ná script a scríobh i Bash a úsáideann gineadóir rann a bhí ann cheana féin - HOST, a roghnaíonn go príomha iad de réir consain, agus ní trí litriú. Cén cineál HOST? Toisc má chuireann tú fíorainm an tsuímh in iúl, déarfaidh siad gur fógra é. Cén fáth nach leanann tú ar aghaidh ag baint úsáide as? Ar an gcéad dul síos, in ainneoin a bhuntáiste a bhaineann le rannta bunaithe ar chonsain a roghnú, is minic a tháirgeann sé cearnóga fós. Ar an dara dul síos, caithfidh tú fós smaoineamh le d'inchinn, am a chaitheamh ag aistriú idir cluaisíní, agus fuinneamh ag cuimhneamh ar fhocail arís agus arís eile i liostaí chun rann dhá fhocal a aimsiú.

Ag fáil rainn láidre

Cad atá ar eolas agam? Tá a fhios agam faoi na fóntais wget, a íoslódálann an leathanach ag an URL sonraithe. Ceart go leor, déanaimis an t-iarratas a fhorghníomhú - faighimid leathanach HTML i gcomhad ainmnithe le focal ríme. Mar shampla, déanaimis cuardach don fhocal “anseo”:

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

Ach níl de dhíth orm ach liosta focal, conas is féidir liom fáil réidh le gach rud eile? Breathnaímid agus feicimid go bhfuil liosta na bhfocal formáidithe, is cuma cé chomh aisteach agus atá sé, i bhfoirm liosta, agus na focail i gclibeanna . Bhuel, tá áirgiúlacht iontach againn. tart - scríobhaimis síos mar seo é:

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

Ar dtús, ón gcomhad focal, roghnaigh na línte ina bhfuil an chlib — faigheann muid braon clibeanna agus línte folmha le focail. Bainimid an chlib féin agus an ceann deiridh - anseo úsáidtear siombailí faoin gcéad in ionad slais mar gheall ar an gclib féin tá slais ann cheana féin, cén fáth? tart nach dtuigeann tú beagán. Agus tá gach rud go breá le hús. Bainimid gach spás ón gcomhad, bainimid línte folamh. Voila - liosta réidh de na focail.

Chun focail a rann a bhaint as na litreacha deiridh, roghnaigh an dá litir dheireanacha ón bhfocal bunaidh agus glan an liosta:

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

Féachaimid, déanaimid iarracht - oibríonn gach rud... mar sin, cá bhfuil an liosta don fhocal “imirt”? Agus don fhocal “Tá mé ag dul”? Tá an comhad folamh! Agus tá sé seo go léir toisc go bhfuil na focail seo, agus tá a fhios againn cad a dhéanann siad dóibh siúd a rann le briathra. Tá rím na mbriathra níos measa ná rím cearnach fiú, toisc go bhfuil an líon is mó briathra ag an Rúisis, agus na foircinn chéanna ag gach ceann acu, agus is é sin an fáth nach raibh siad sa chomhad deiridh tar éis na foircinn a sheiceáil.

Mar sin féin, níl aon deifir orainn. I gcás gach focal tá ní amháin rímeanna, ach freisin assonances, a fuaime uaireanta i bhfad níos fearr ná rím - sin an fáth go bhfuil siad assonances (assonance na Fraince, as an Laidin assono - fuaim mé le chéile).

Faighimid assonances

Seo é an áit a dtosaíonn an spraoi: feictear assonances ag URL ar leith, agus ar an leathanach céanna, trí script a fhorghníomhú, iarratas HTTP a sheoladh agus freagra a fháil. Conas is féidir liom a rá wget'An bhfuil tú ag brú an cnaipe? Ach aon bhealach. Faraor.

Ag tabhairt faoi deara go raibh an URL sa líne ag athrú ar bhealach éigin, chóipeáil mé an méid a bhí ann tar éis athrú go comhshonraí agus é a ghreamú i gcluaisín nua brabhsálaí - osclaíodh rímeanna láidre. Ní hé sin.

Go bunúsach, shíl mé, níor cheart go mbeadh sé cuma don fhreastalaí cé acu an ndéantar an script a sheol an t-iarratas nó an ndéanann an duine é a chlóscríobh de láimh. Mar sin? Cé a fhios, a ligean ar dul é a sheiceáil amach.

Cá háit a seolfar? Cad atá le seoladh? Iarratas HTTP chuig IP an fhreastalaí, tá rud éigin cosúil le GET ... ansin tá rud éigin HTTP/1.1... Ní mór dúinn a fheiceáil cad a sheolann an brabhsálaí agus cén áit. Suiteáil wireshark, féach ar an trácht:

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... cad é? Ó tá, tá HTTPS againn. Cad atá le déanamh? Seoladh ionsaí MITM ort féin? Go hidéalach, cabhróidh an t-íospartach í féin linn.

Go ginearálta, tar éis cinneadh a dhéanamh scimeáil ar an mbrabhsálaí, fuair mé an t-iarratas féin agus an seolaí ar deireadh. Téigh:

Agallamh leis an teirminéal

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. Go deimhin, is é sin a raibh mé ag súil leis agus iarratas lom HTTP á sheoladh chuig calafort HTTPS. Ar cheart dúinn a chriptiú anois? An fuss seo ar fad le heochracha RSA, ansin le SHA256. Cén fáth, tá OpenSSL le haghaidh rudaí den sórt sin. Bhuel, tá a fhios againn cheana féin cad atá le déanamh, bainfimid na réimsí Tarchuir agus Fianán ar dtús - is dóigh liom nach gcuirfidh siad mórán isteach ar an ábhar:

Agallamh leis an teirminéal

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

Cad is féidir le hinchinn an dalta a fhoghlaim faoin saol ríomhaireachta?

Cad é seo, mionn ar an bhfreastalaí? Bhuel, ar a laghad d'fhreagair siad dom 200 OK, rud a chiallaíonn nach ndéanann fianáin agus an atreoraí difear do rud ar bith. Is gzip é an comhbhrú, ach nuair a dhéantar cóipeáil, déantar carachtair ASCII a chóipeáil. Go díreach, is féidir leat an líne a bhaint Glac-ionchódú. Tá gach rud go breá - faigheann muid doiciméad HTML, anois le assonances. Ach seo dhá cheist: conas OpenSSL a rith agus sonraí a aistriú chuige ag baint úsáide as script? Agus conas an t-aschur a léamh má fhanaimid, mar a bhí, i “bhlaosc” OpenSSL tar éis dúinn an freagra a fháil? Más féidir leat teacht ar rud éigin leis an dara ceann, ach leis an gcéad cheann ...

Is maith go bhfuil Habráit ar léigh mé faoin bhfóntas bheith ag súil, a uathoibríonn an próiseas idirghníomhú le cláir a bhfuiltear ag súil le hidirghníomhaíocht dhaonna. Tá sé níos tarraingtí fós foireann a bheith agat ag súil go huathúil, giniúint bheith ag súil script bunaithe ar do ghníomhartha. Bhuel, seolann muid é, déan é seo go léir agus seo an script críochnaithe. Ach tá sé an-ollmhór, agus go léir mar gheall ar OpenSSL taispeánann teastais, eochracha, agus bheith ag súil ag fanacht leis an aschur seo go léir. An gá dúinn é seo? Níl. Bainimid an chéad leid ar fad, ag fágáil ach an briseadh líne deiridh 'r'. Bainimid na réimsí Úsáideoir-Gníomhaire agus Glactha dár n-iarratas freisin - ní chuireann siad isteach ar rud ar bith. Mar sin, déanaimis seoladh. Cuireadh an script chun báis, ach cá bhfuil an doiciméad HTML luachmhar? Ag súil le d'ith sé. Chun é a spit amach, ní mór duit a chur:

set results $expect_out(buffer)

roimh dheireadh na scripte - seo é mar a scríobhfar aschur an inrite bheith ag súil'om ordú agus ar taispeáint ar an scáileán. Go hachomair, rud éigin mar seo:

ag súil le 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

Ach ní hé sin go léir! Mar a fheiceann tú, i ngach sampla bhí URL an iarratais statach, ach is é an URL atá freagrach as an bhfocal a mbeidh baint aige le comhshondais. Agus mar sin de tharlaíonn sé go ndéanfaimid cuardach i gcónaí don fhocal “%d0% b7%d0% b4%d0%b5%d1%81%d1%8c” in ASCII nó “anseo” in UTF-8. Cad atá le déanamh? Ar ndóigh, ní gá ach script nua a ghiniúint gach uair, a chairde! Níl a thuilleadh ag súil go huathúil'ó, agus le cabhair chailleann, mar In ár nua, ní athraíonn aon rud ach amháin an focal. Agus beo fada ar an bhfadhb nua: conas is féidir linn focal a aistriú ó Choireallach go formáid URL? Níl aon rud speisialta don teirminéal ach an oiread. Bhuel, tá sé ceart go leor, is féidir linn é a dhéanamh, ceart? An féidir:

Féach cad is féidir liom a dhéanamh!

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

San iomlán, tá script againn a thiontaíonn focal isteach i dtéacs ASCII, ag giniúint script eile a iarrann leathanach suímh le comhshondais ón bhfreastalaí trí OpenSSL. Agus ansin déanaimid atreorú ar aschur na scripte deiridh chuig comhad agus, ar an mbealach sean-aimseartha, é a chur tríd "scagairí" cearnóga breise agus scríobh chuig an gcomhad iad.

Trasnaíonn go leor. Bunlíne

I ndáiríre, is é seo go díreach cad is cúis leis na fadhbanna is lú. Déanaimid na nósanna imeachta thuas do dhá fhocal, ansin ón dá liosta cuirimid gach focal i gcomparáid le gach ceann acu agus má aimsítear meaitseáil, cuirimid amach é. Anois tá script againn a ghlacann dhá fhocal mar ionchur agus a thaispeánann liosta focal a dhéanann rann leis an dá cheann, agus fiú comhshondais á gcur san áireamh, agus é seo go léir gan aistriú de láimh idir ceithre chluaisín agus cuimhneamh ar fhocail “de shúil” - go léir bailithe, cuntas le haghaidh agus a dhiúscairt go huathoibríoch. Iontach.

Ba é cuspóir an fhoilseacháin seo ná a thaispeáint má bhíonn rud éigin ag teastáil ó dhuine, go ndéanfaidh sé ar aon nós. An-neamhéifeachtach, cam, creepy, ach oibreoidh sé.

Foinse: will.com

Add a comment