Apa otak siswa sinau babagan jagad komputer sing bisa ditindakake?

Wektu kuwi.

Sawise rampung nulis skrip liyane ing Bash, aku ngerti manawa kabeh kudu beda, nanging kabeh bisa digunakake. Aku arep nuduhake apa saru lan crutches aku nulis kanggo ngatasi masalah, nanging durung duwe gerbong kawruh. Ing tembung liyane, karikatur pemrograman.

Tujuan


Ana sing perlu kanggo:

  • Ditampilake akeh sajak kanggo tembung, kajaba kothak
  • Nyabrang akeh sajak saka rong tembung

Kanggo apa? Inggih, punika - lan punika.
Sapa sing ora ngerti, sajak kothak (ing parlance umum - kothak) iku rong tembung sing rong aksara pungkasan ing ejaan pas, kang (asring, iki mung bab) nggawe sajak. Contone, roses iku frosty; ban - mobil. Panggunaan kothak ing versifikasi modern ora disetujoni dening wong, amarga primitif.

kaputusan


Iku ketoke kanggo kula sing solusi paling gampang kanggo nulis skrip ing Bash sing nggunakake generator sajak sing wis ana - HOST, sing utamané milih kanthi konsonan, lan ora nganggo ejaan. HOST apa? Amarga yen sampeyan nuduhake jeneng asli situs kasebut, dheweke bakal ujar manawa iki minangka pariwara. Apa ora terus nggunakake? Kaping pisanan, senadyan kaluwihan milih rima adhedhasar konsonan, dheweke isih kerep ngasilake kotak. Kapindho, sampeyan isih kudu mikir nganggo otak, nglampahi wektu ngalih ing antarane tab, lan energi ngeling-eling tembung sing bola-bali ing dhaptar kanggo nemokake sajak kanggo rong tembung.

Njaluk sajak kuwat

Apa aku ngerti? Aku ngerti babagan sarana wget, sing ngundhuh kaca ing URL sing ditemtokake. Oke, ayo nglakokake panyuwunan kasebut - entuk kaca HTML ing file sing dijenengi nganggo tembung sajak. Contone, ayo goleki tembung "kene":

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

Nanging aku mung butuh dhaptar tembung, kepiye carane bisa ngilangi kabeh liyane? Kita ndeleng lan ndeleng manawa dhaptar tembung wis diformat, ora preduli sepira aneh, ing wangun dhaptar, lan tembung kasebut ana ing tag . Inggih, kita duwe sarana gedhe. sed - Ayo nulis kaya iki:

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

Pisanan, kita milih baris saka file tembung sing ngemot tag - kita entuk akeh tag kosong lan baris nganggo tembung. Kita mbusak tag kasebut dhewe lan sing nutup - ing kene simbol persen digunakake tinimbang garis miring amarga tag dhewe wis duwe garis miring, mulane sed ora ngerti sampeyan dicokot. Lan kabeh apik karo kapentingan. Kita mbusak kabeh spasi saka file, mbusak garis kosong. Voila - dhaftar siap-digawe saka tembung.

Kanggo mbusak tembung sing nganggo huruf pungkasan, pilih rong huruf pungkasan saka tembung asli lan mbusak dhaptar:

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

We katon, kita nyoba - kabeh bisa ... dadi, ngendi dhaftar tembung "muter"? Lan kanggo tembung "Aku arep"? Berkas kosong! Lan iki kabeh amarga tembung-tembung kasebut minangka kriya, lan kita ngerti apa sing ditindakake kanggo wong-wong sing sajak karo kriya. Sajak kriya luwih elek tinimbang sajak kothak, amarga basa Rusia nduweni kriya paling akeh, lan kabeh padha duwe pungkasan sing padha, mulane ora ana ing file pungkasan sawise mriksa pungkasan.

Nanging, kita ora kesusu. Kanggo saben tembung ora mung sajak, nanging uga asonansi, sing kadhangkala luwih apik tinimbang sajak - mulane padha asonansi (asonansi Prancis, saka basa Latin assono - aku muni kanthi harmoni).

Kita entuk asonansi

Iki ngendi kesenengan diwiwiti: asonansi katon ing URL sing kapisah, lan ing kaca sing padha, kanthi nglakokake skrip, ngirim panjalukan HTTP lan nampa respon. Carane aku bisa ngomong wget'Apa sampeyan mencet tombol? Nanging ora bisa. Susah.

Ngelingi yen URL ing baris kasebut owah-owahan, aku nyalin apa sing ana sawise ngalih menyang asonansi lan nempel ing tab browser anyar - strong rhymes opened up . Ora ngono.

Ateges, aku panginten, ora dadi masalah kanggo server manawa skrip sing ngirim panjaluk kasebut ditindakake, utawa manawa wong kasebut ngetik kanthi tangan. Dadi? Sapa ngerti, ayo dipriksa.

ngirim menyang ngendi? Apa ngirim? Panjaluk HTTP menyang IP server, ana sing kaya GET ... banjur ana sing HTTP / 1.1 ... Kita kudu ndeleng apa sing dikirim browser lan ing ngendi. Instal wireshark, deleng lalu lintas:

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... opo? Oh ya, kita duwe HTTPS. Apa sing kudu ditindakake? Bukak serangan MITM ing dhewe? Saenipun, korban piyambak bakal nulungi kita.

Umumé, sawise mutusake kanggo njelajah browser, pungkasane aku nemokake panjaluk kasebut lan sing dituju. Tindak:

Dialog karo 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. Pancen, iku sing dakkarepake nalika ngirim panjaluk HTTP kosong menyang port HTTPS. Apa kita kudu enkripsi saiki? Kabeh iki ribut karo tombol RSA, banjur karo SHA256. Kok, ana openSSL kanggo bab kuwi. Ya, kita wis ngerti apa sing kudu ditindakake, kita mung mbusak kolom Referer lan Cookie dhisik - Aku rumangsa ora bakal mengaruhi perkara kasebut:

Dialog karo 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

Apa otak siswa sinau babagan jagad komputer sing bisa ditindakake?

Apa iki, sumpah ing server? Inggih, paling padha mangsuli kula 200 OK, kang tegese cookie lan referrer ora mengaruhi apa-apa. Kompresi iku gzip, nanging nalika nyalin, karakter ASCII disalin. Persis, sampeyan bisa mbusak garis kasebut Nampa-enkoding. Kabeh apik - kita entuk dokumen HTML, saiki kanthi asonansi. Nanging ana rong pitakonan: carane mbukak OpenSSL lan nransfer data nganggo skrip? Lan carane maca output yen sawise nampa respon kita tetep, kaya, ing "Cangkang" OpenSSL? Yen sampeyan bisa nggawe sing kapindho, nanging sing pisanan ...

Iku apik sing ana Habrngendi aku maca babagan sarana ngarepake, sing ngotomatisasi proses interaksi karo program sing ngarepake interaksi manungsa. Duwe tim malah luwih atraktif ngarepake otomatis, ngasilaken ngarepake skrip adhedhasar tumindak sampeyan. Inggih, kita miwiti, nindakake kabeh iki lan punika script rampung. Mung dheweke gedhe banget, lan kabeh amarga openSSL nampilake sertifikat, tombol, lan ngarepake ngenteni output kabeh iki. Apa kita butuh iki? Ora. Kita mbusak kabeh pituduh pisanan, mung ninggalake baris pungkasan break 'r'. Kita uga mbusak kolom Agen Panganggo lan Nampa saka panjaluk kita - ora ana pengaruh apa-apa. Dadi, ayo diluncurake. Skrip kasebut dieksekusi, nanging ing endi dokumen HTML sing dihargai? nyana mangan iku. Kanggo nggawe dheweke muntahake, sampeyan kudu nyelehake:

set results $expect_out(buffer)

sadurunge mburi script - iki carane output saka eksekusi bakal ditulis ngarepake' om printah lan ditampilake ing layar. Ing ringkesan, kaya iki:

ngarepake skrip

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

Nanging ora mung kuwi! Kaya sing sampeyan ngerteni, ing kabeh conto URL panjaluk kasebut statis, nanging URL sing tanggung jawab kanggo tembung sing bakal digandhengake karo asonansi. Dadi, kita bakal terus-terusan nggoleki tembung "%d0%b7%d0%b4%d0%b5%d1%81%d1%8c" ing ASCII utawa "kene" ing UTF-8. Apa sing kudu ditindakake? Mesthi, mung nggawe script anyar saben wektu, kanca-kanca! Ora maneh ngarepake otomatis'Om, lan kanthi bantuan kumandhang, amarga Ing anyar kita, ora ana owah-owahan kajaba tembung. Lan urip masalah anyar: kepiye carane bisa nerjemahake tembung saka Cyrillic menyang format URL? Ana apa-apa khusus kanggo terminal uga. Ya, ora apa-apa, kita bisa nindakake, ta? Saget:

Delengen apa sing bisa daklakoni!

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

Secara total, kita duwe naskah sing ngowahi tembung dadi teks ASCII, ngasilake naskah liya sing njaluk kaca situs kanthi asonansi saka server liwat OpenSSL. Banjur kita pangalihan output saka script pungkasan menyang file lan, ing cara lawas, pass liwat "saringan" kothak ekstra lan nulis menyang file.

Persimpangan akeh. Garis ing ngisor

Bener, iki sing nyebabake masalah sing paling sithik. Kita nindakake prosedur ing ndhuwur kanggo rong tembung, banjur saka rong dhaptar kita mbandhingake saben tembung karo saben lan yen cocog ditemokake, kita output. Saiki kita duwe skrip sing njupuk rong tembung minangka input lan nampilake dhaptar tembung sing sajak karo loro, lan malah njupuk asonansi akun, lan kabeh iki tanpa manual ngalih antarane papat tab lan ngelingi tembung "dening mripat" - iku kabeh diklumpukake, diitung lan dibuwang kanthi otomatis. Apik banget.

Tujuan publikasi iki yaiku kanggo nuduhake yen wong butuh apa wae, mesthine bakal ditindakake. Banget ora efektif, bengkong, serem, nanging bakal bisa.

Source: www.habr.com

Add a comment