Unsa ang utok sa usa ka estudyante nga nakakat-on bahin sa kalibutan sa kompyuter nga makahimo?

Доброго времени суток.

Pagkahuman sa pagsulat sa laing script sa Bash, akong naamgohan nga ang tanan kinahanglan nga hingpit nga lahi, apan ang tanan nagtrabaho. Gusto nakong ipakita kanimo kung unsa nga mga malaw-ay ug crutches ang akong gisulat aron masulbad ang problema, apan wala pa'y karwahe sa kahibalo. Sa laing pagkasulti, usa ka caricature sa programming.

Tumong


Adunay usa ka butang nga gikinahanglan aron:

  • Gipakita ang daghang mga rhymes alang sa pulong, gawas sa mga kwadro
  • Gitabok ang daghang mga rhymes sa duha ka mga pulong

Para unsa? Aw, mao na kini - ug mao kana.
Kinsa ang wala mahibal-an, ang usa ka square rhyme (sa komon nga parlance - usa ka square) mao ang duha ka mga pulong kansang katapusan nga duha ka letra sa spelling nagtakdo, nga (kasagaran, kini ra ang butang) naghimo kanila nga usa ka rhyme. Pananglitan, ang mga rosas nagyelo; ligid - sakyanan. Ang paggamit sa mga kwadro sa modernong versification dili ilabi na nga gi-aprobahan sa mga tawo, tungod sa ilang primitiveness.

desisyon


Para nako ang pinakasimple nga solusyon mao ang pagsulat sa usa ka script sa Bash nga naggamit sa naa na nga rhyme generator - HOST, nga nag-una sa pagpili niini pinaagi sa consonance, ug dili pinaagi sa spelling. Unsang klaseha sa HOST? Kay kon imong ipasabot ang tinuod nga ngalan sa site, moingon sila nga advertisement kini. Ngano nga dili magpadayon sa paggamit niini? Una, bisan pa sa iyang bentaha sa pagpili sa mga rhymes base sa consonances, kanunay gihapon siya nga naghimo og mga kwadro. Ikaduha, kinahanglan ka pa nga maghunahuna gamit ang imong utok, mogugol ug oras sa pagbalhin tali sa mga tab, ug kusog sa pagsag-ulo sa gibalikbalik nga mga pulong sa mga lista aron makapangita usa ka rhyme alang sa duha ka mga pulong.

Pagbaton og lig-on nga mga rhymes

Unsay akong nahibaw-an? Nahibal-an ko ang bahin sa utility wget, nga nag-download sa panid sa piho nga URL. Okay, atong ipatuman ang hangyo - makakuha kita og HTML nga panid sa file nga gihinganlan og usa ka rhyming nga pulong. Pananglitan, atong pangitaon ang pulong "dinhi":

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

Apan kinahanglan ra nako ang usa ka lista sa mga pulong, unsaon nako pagtangtang ang tanan? Atong tan-awon ug tan-awon nga ang lista sa mga pulong giporma, bisan unsa pa ka katingad-an, sa porma sa usa ka lista, ug ang mga pulong naa sa mga tag. . Aw, kita adunay usa ka dako nga utility. sed - ato kining isulat sama niini:

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

Una, gikan sa pulong nga file, pilia ang mga linya nga adunay tag - nakakuha kami usa ka hugpong nga walay sulod nga mga tag ug linya nga adunay mga pulong. Among tangtangon ang tag mismo ug ang panapos niini - dinhi ang porsiyento nga mga simbolo gigamit imbes nga mga laslas tungod kay sa tag mismo naa nay slash, ngano? sed wala ka kasabot gamay. Ug ang tanan maayo sa interes. Gikuha namo ang tanang mga luna gikan sa file, kuhaa ang walay sulod nga mga linya. Voila - usa ka andam nga lista sa mga pulong.

Aron matangtang ang mga pulong nga nag-rhyme gamit ang kataposang mga letra, pilia ang kataposang duha ka letra gikan sa orihinal nga pulong ug hawanan ang listahan:

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

Gitan-aw namon, gisulayan namon - ang tanan molihok ... busa, asa ang lista sa pulong nga "dula"? Ug alang sa pulong nga "Ako moadto"? Ang file walay sulod! Ug kini tanan tungod kay kini nga mga pulong mga berbo, ug nahibal-an namon kung unsa ang ilang gibuhat sa mga nag-rhyme sa mga berbo. Ang berbo rhyme mas grabe pa kay sa square rhyme, tungod kay ang Russian nga pinulongan adunay kadaghanan nga mga berbo, ug silang tanan adunay parehas nga mga katapusan, mao nga wala sila sa katapusan nga file pagkahuman gisusi ang mga katapusan.

Hinuon, wala mi magdali. Alang sa matag pulong adunay dili lamang mga rhymes, apan usab mga asonans, nga usahay labi ka maayo kaysa rhyme - mao nga kini mga asonans (French assonance, gikan sa Latin nga assono - I sound in tune).

Nakuha namon ang mga asonansya

Dinhi nagsugod ang kalingawan: ang mga asonansya makita sa usa ka bulag nga URL, ug sa parehas nga panid, pinaagi sa pagpatuman sa usa ka script, pagpadala usa ka hangyo sa HTTP ug pagdawat usa ka tubag. Unsaon nako pag ingon wget'Gipindot ba nimo ang buton? Apan dili. Ikasubo.

Namatikdan nga ang URL sa linya sa usa ka paagi nagbag-o, gikopya nako kung unsa ang naa pagkahuman sa pagbalhin sa mga asonansya ug gi-paste kini sa usa ka bag-ong tab sa browser - gibuksan ang kusog nga mga rhymes. Dili kana.

Sa tinuud, gihunahuna ko, dili kini hinungdanon sa server kung ang script nga nagpadala niini ang hangyo gipatuman, o kung ang tawo nag-type niini pinaagi sa kamot. Busa? Kinsay nasayod, atong susihon kini.

Asa ipadala? Unsay ipadala? HTTP request sa server IP, naay GET... then naay HTTP/1.1... Kinahanglang tan-awon nato kung unsa ang gipadala sa browser ug asa. Pag-instalar wireshark, tan-awa ang trapiko:

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...unsa? Oh oo, kami adunay HTTPS. Unsay buhaton? Giunsa ang pag-atake sa MITM sa imong kaugalingon? Sa tinuud, ang biktima mismo ang motabang kanato.

Sa kinatibuk-an, nga nakahukom sa pag-surf sa browser, sa katapusan nakit-an nako ang hangyo mismo ug ang addressee. Lakaw:

Dialogue uban sa 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.

Uy. hehehe. Sa tinuud, kana ang akong gipaabut sa pagpadala sa usa ka hubo nga hangyo sa HTTP sa usa ka pantalan sa HTTPS. Kinahanglan ba naton i-encrypt karon? Kining tanan nga kaguliyang sa RSA keys, unya sa SHA256. Ngano, naa OpenSSL alang sa maong mga butang. Aw, nahibal-an na namo kung unsa ang buhaton, tangtangon lang namo ang mga field sa Referer ug Cookie - Sa akong hunahuna dili kini makaapekto sa butang:

Dialogue uban sa 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

Unsa ang utok sa usa ka estudyante nga nakakat-on bahin sa kalibutan sa kompyuter nga makahimo?

Unsa kini, pagpanumpa sa server? Aw, labing menos gitubag nila ako 200 OK, nga nagpasabut nga ang mga cookies ug ang referrer dili makaapekto sa bisan unsang butang. Ang compression mao ang gzip, apan kung nagkopya, ang mga karakter sa ASCII gikopya. Eksakto, mahimo nimong tangtangon ang linya Dawata-encoding. Maayo ang tanan - nakakuha kami usa ka dokumento sa HTML, karon adunay mga asonansya. Apan aniay duha ka pangutana: unsaon pagpadagan ang OpenSSL ug pagbalhin sa datos niini gamit ang script? Ug unsaon pagbasa ang output kung human makadawat sa tubag magpabilin kita, ingon nga kini, sa usa ka "shell" sa OpenSSL? Kung makahimo ka sa usa ka butang sa ikaduha, apan sa una ...

Maayo kay naa Si Habrdiin akong nabasa bahin sa utility pagdahum, nga nag-automate sa proseso sa pagpakig-uban sa mga programa nga nagpaabot sa interaksyon sa tawo. Ang pagbaton ug team mas madanihon autoexpect, pagmugna pagdahum script base sa imong mga aksyon. Aw, gilusad namo kini, buhata kining tanan ug ania ang nahuman nga script. Siya lamang ang dako kaayo, ug tungod kay OpenSSL nagpakita sa mga sertipiko, yawe, ug pagdahum naghulat sa output niining tanan. Kinahanglan ba nato kini? Dili. Among tangtangon ang tibuok unang prompt, magbilin lamang sa kataposang linya nga break 'r'. Gitangtang usab namo ang mga umahan sa User-Agent ug Dawata gikan sa among hangyo - wala kini makaapekto sa bisan unsa. Busa, atong ilunsad. Ang script gipatuman, apan asa ang gipakabahandi nga HTML nga dokumento? Paabota mikaon kini. Aron mahimo siyang iluwa, kinahanglan nimo nga ibutang:

set results $expect_out(buffer)

sa wala pa ang katapusan sa script - mao kini ang paagi nga ang output sa executable isulat pagdahum'om command ug gipakita sa screen. Sa katingbanan, usa ka butang nga sama niini:

maghulat ug 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

Apan dili lang kana! Sama sa imong makita, sa tanan nga mga pananglitan ang URL sa hangyo wala’y hunong, apan kini ang URL nga responsable kung unsang pulong ang iugnay sa mga asonansya. Ug mao nga mogawas nga kanunay namong pangitaon ang pulong nga "%d0%b7%d0%b4%d0%b5%d1%81%d1%8c" sa ASCII o "dinhi" sa UTF-8. Unsay buhaton? Siyempre, paghimo lang og bag-ong script matag higayon, mga higala! Dili na autoexpect'oh, ug uban sa tabang alingawngaw, kay Sa atong bag-o, walay nausab gawas sa pulong. Ug mabuhi ang bag-ong problema: unsaon nato paghubad sa usa ka pulong gikan sa Cyrillic ngadto sa format sa URL? Walay espesyal alang sa terminal usab. Aw, okay ra, mahimo naton kini, di ba? Mahimo:

Tan-awa unsay akong mahimo!

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

Sa kinatibuk-an, kami adunay usa ka script nga nag-convert sa usa ka pulong ngadto sa ASCII nga teksto, nga naghimo og laing script nga naghangyo sa usa ka panid sa site nga adunay mga asonansya gikan sa server pinaagi sa OpenSSL. Ug dayon gi-redirect namo ang output sa kataposang script ngadto sa usa ka file ug, sa karaan nga paagi, ipasa kini "mga filter" dugang nga mga kwadro ug isulat kini sa file.

Intersection sa daghan. Ubos nga linya

Sa tinuud, kini gyud ang hinungdan sa labing gamay nga mga problema. Gihimo namo ang mga pamaagi sa ibabaw alang sa duha ka mga pulong, unya gikan sa duha ka mga lista atong itandi ang matag pulong sa matag usa ug kung makit-an ang usa ka tugma, atong i-output kini. Karon kami adunay usa ka script nga nagkuha og duha ka mga pulong ingon input ug nagpakita sa usa ka lista sa mga pulong nga managsama sa duha, ug bisan sa pagkonsiderar sa mga asonans, ug kining tanan nga wala’y mano-mano nga pagbalhin tali sa upat ka mga tab ug paghinumdom sa mga pulong nga "pinaagi sa mata" - kana tanan nakolekta, gi-account ug awtomatikong gilabay. Kahibulongan.

Ang katuyoan niini nga publikasyon mao ang pagpakita nga kung ang usa ka tawo nanginahanglan usa ka butang, buhaton niya kini. Dili kaayo epektibo, hiwi, creepy, apan kini molihok.

Source: www.habr.com

Idugang sa usa ka comment