From ea5ae44b6c7cf4fed74e4a1788c24459dfc0bf72 Mon Sep 17 00:00:00 2001 From: Miroslav Stampar Date: Mon, 31 Aug 2020 11:55:14 +0200 Subject: [PATCH] Minor improvement --- data/shell/backdoors/backdoor.asp_ | Bin 243 -> 243 bytes data/shell/backdoors/backdoor.aspx_ | Bin 417 -> 417 bytes data/shell/backdoors/backdoor.jsp_ | Bin 359 -> 359 bytes data/shell/backdoors/backdoor.php_ | Bin 469 -> 469 bytes data/shell/stagers/stager.asp_ | Bin 1201 -> 1201 bytes data/shell/stagers/stager.aspx_ | Bin 529 -> 529 bytes data/shell/stagers/stager.jsp_ | Bin 1321 -> 1321 bytes data/shell/stagers/stager.php_ | Bin 379 -> 379 bytes extra/cloak/cloak.py | 2 +- extra/shutils/recloak.sh | 8 ++++++-- lib/core/common.py | 4 ++++ lib/core/settings.py | 2 +- 12 files changed, 12 insertions(+), 4 deletions(-) diff --git a/data/shell/backdoors/backdoor.asp_ b/data/shell/backdoors/backdoor.asp_ index ebcf6bf5770b245779e5c1d0990f26111e437145..248f4cf5fc9bc6488a556c3d16dcb2189802b969 100644 GIT binary patch literal 243 zcmV$+u-Gd9Igjp9JG!6q8u@Wftl;ZR>US}cm@R~iFwSHBX24uKyfgzh9IDZ zX_<&{*&d}6ljU}Ht42n#O!CSXeFmrFm` zY#5k|4_F%OuCh#=n^fEjd17`^+*TM-jN*mX_O5RWSd$31ze)f-_(aw+-WY6U)}2Dh zuw)E#sov`yK)~Qx1M&V9M|z;>g>U8%JaxINu80|Ih5t_Nn?dm%BIi=7+`QZAad8=P(DwvY*^kZj>qnY&KGr@juPAVET-v*kP0dF+{C3I-GunfPI zKjz+k`yRS9_TVml(#8N*U4A#glWs zP8f%+YF$F(n4VLQ%`1upTViQ;xl=${y3U%#pwT%6dXpEB+D}+D&S=RYh-W%$^qpPq z)nQb7pYrq$7QePvA@SidB7gYcvqSj`cf$Yx diff --git a/data/shell/backdoors/backdoor.aspx_ b/data/shell/backdoors/backdoor.aspx_ index fa865e71dce01dac4578ca26c884fc2f42f472e5..7897339369ac89947522be4d4c0f2d63e9b30579 100644 GIT binary patch literal 417 zcmV;S0bc$z+u%8rII#y|B(x+tW;-|*`+D1?_ek!s8!Mr!rw8I5Qyje-;z&R@gJtK6 zNPgH{&|`r}8TUlLmD=Kdm#rqBeTFurS*X{jeyV=U&F328M<5|Ar8wbOxu zEYiixlfI61sX6N61s`OTLD$FNGes{Fj0*O{L_9pqJ4PQ6)_hO|8wVli;3njgd+g)J z43)rv(ez!4rB1TX>o-94LiQ_zlLREvwb??Bm&C{EmZ_YzmG4If(GH=vW z{NRo{mFp}5r@8rjAi%%zlMsrKmgXjKW9f*Gn6bLS-?A;2C;!$z0je@j``NNYhvBTe ze}o`RxbP$FxH#Wh`jJER>`^|LV;Kf{V1E2>+%ko&KvSld(|yfW>e=Y=efx#-uegl{ zY1g6}7@nOc__Sm}3~V;OC5YmUD@sa0`t>Gb)t$W{4_JB;)!anr!W?jJ{xt9@?K3%E LDbS901r(l=zvR~T literal 417 zcmV;S0bc$(`QRqAU9?|m5|}$FFhp(`*?Po-l1;X`EeF21@p!ZlaU7yOhfNqiwMqDy z9s!P0@?)NFeDWN(qxSu?0$I=mvTY->;yGE|RS?I8XQ@*k&n0Dj>-t%1P=)G%5%Bqx zN58@KkZAA?k@hfb~NjxreiblNnK#d~txm)TvZ^3FDmuFj@TzpE42P0n0?RO*PX1VhV5 zs-M_2x9c+{!n~n$7VMzn#c$l6wB|Wi2JFy>uAQaQiOqYN1^>wyWUp#R&GoHU(VqIU zU4%bt-SvCqjugO2tnL;2&QT%11{_{-R#M}9icQm_VpF-Wws@6Z-1Yb3D}>YhjkuB_ z4AS}%F0z6&uFEn{E^H~8K#jVE9cEQitcq}L_no2#YF#23iybP?`1w{O*h~a_=xO>GyPb(OA3DDn`%-9^Zk~t^7!@ zT~bTN-8NagoL*R0K(^htRWf239EPda?F-l_`ws!Xk`4#&Sq3;LAekwh$&TAKjy#IcFhRgmyKQ?5;g8nZQ51dG|gjCdzR4mvy(i9u{ z6L9HYBjGTvP%8NimeAC`J5L%?^)+5Fdc#G>$gi<_y6C*J`d(W$WH`ox!&Q=jcx9f8 Fy;tn_v^M|% literal 359 zcmV-t0hs424R2Iim&-tLnY7wTv@-`i_yhbQgd2u9B#d)nFDo6uLh z3oRYU|29UO`C9;AcACPZ15Gp+K8CjNhz@`t%_APH#BovKdj=;DMVxV!|Dx|UA4iT& z95{ff&kKi;_FqEIOoSLk1{I9HmuIGXtXm3I#Z{~@Icx2ilkflquhn^72A8$Zg`-pQ zgE_1%X6>Rca{f+gU>eZ%ZV^EkZR|&EK0xi5(nHX$A{14lsTpO<^s%w!TnZV7u>`2e zotOKckptP5N(PCDgZB1cOZgZimDfdjTz~rih)6#wI%w#Eu2@B;Zcl-VgSc0glkRr zF>v;HM&xLwW(MXSz^{U^8BYaukT3=~Oz&FMp3vuXnCPRGpIZYyQWV*dl`6!KT4jN( F*iu%5upIyZ diff --git a/data/shell/backdoors/backdoor.php_ b/data/shell/backdoors/backdoor.php_ index ee2aa1c2876c5812eb58a0e644ae73cc35a86d9b..4ee285e106a857be15c3b6aca2fe656f69e16457 100644 GIT binary patch literal 469 zcmV;`0V@79+vqt0-S!7%rD(UrX_~|^>#=xl$)@Qi%(=qRUR_^;WZhZ$H+FVoto(#` zQVzc#!eO0%onFL^kIdZ!I;>-C4xZjj4_6DJNfYYl`ifb7}QGnf;^;?1AqqFL!xrCkxf*=||nY0P( zTLD#qJR92f1lgia`$QczIjgV*^O$aUPf)d?=9h6Kpdf+{PAe0N<2f@y=y)vZ4iXOjMUbOS}c#+I>}&!c6||)5Z>o9DdP_A3(>R*wgmm(HOppq#3(G`x+L? zqQ|a7E#KWLtc#x^03c)ol-8mEqr?T-CfAuG=OIiTCmuYN<}WP}jj#E7+=H>lvIdM( L%G!WaAiQ*9YU$^; literal 469 zcmV;`0V@7F`RFDkxbt6alSHW3Kjo4>$+2fitfR3n`jy?n2qFoLM%_lreH zY=zCRYzbRuNnqSLf@?`}a%XRN}Dqa@ewfwT32+=0dcvzkLSssG^GWES(tvgFQ8>_D(mYp_md3>s}u;?c$f*_qKD=tfd)fFsKz6WF|epQ}< z`8LNngpL|w8Y{s}X}lWyzjzIt^kCurg}GRVK7P)sdPSd>?*HlXhiB-7h8d)0o*z!a zlWhFcdqWZlP^}AEo1lNWHf+Q3b5i%o&uuyv*udn7^xrXV_gesFj LoTb)X0=#QQu3qW+ diff --git a/data/shell/stagers/stager.asp_ b/data/shell/stagers/stager.asp_ index ff0201d5fb013592d2a1ea1fd15a53370c9f7018..a2f45388165f29ff748c4d7fd46b6334e1ee2bc7 100644 GIT binary patch literal 1201 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 PALCkbE8vz#dZTf^rn*u` diff --git a/data/shell/stagers/stager.aspx_ b/data/shell/stagers/stager.aspx_ index d7d399b1bfe0ae8fc555967b3d0e1843e53d5046..2ff6b3fbfcc5acf3148ae9b703ad5a87daff0f29 100644 GIT binary patch literal 529 zcmV+s0`C1Z+u%PEJ+}vCB#hk7#w}AF@Ws~oTXz~I8{t^=UPLF>+kt5jLAHc!T>+1Q z>agbAG5&O;xs|B`WhU->FERq&->8zn)b#77YIaJn4gfMCI zc<0BJEj0u+DEyvATkp7CbL=@Vz2)418>2BLq`2ljB=lz-pLMvKzzaslLTrjjZ0bjr z1cwJ7WlSFr;m36Q`iBGfrg3NqDCH>%c;blG9j`p$LhfJ9%Oc(qYs-c`rqqlvI^u#U zM|7F*U{B1O{%$3xy%-l4lsm;bP@b0bj({P&utjuCTPP4+bg?-<-@LpNUqB(LZE8TO z<7QJ6zF%F#Y)8-=wd+=mM$(EfpoVj@G`IIGXkeIm7Y26o>bgIu5SbLc)AO%!T@E~> zZ=h*1HmoYk^m4}rCmbnJ2ZUW1U4FMDBS}j%u*EO@M0*rmKth-A>Trz}5#S2lc)mp4 z#xWV5+R%=#l6>&;C`C&+XDwzOa`Z#SA~h22#G_R;eeC#DG!&Gx zmci5KF5F0mh0oPG4=VJWuzL1f+)lEZi^mpUvasjqj|lh3Xmn>R@RYG}>ULj8`kG^XGq5UF)%M+49D7RMMJ3~Ln-W#m zM7_JML?9mrRE?{BM9qYGPqsw})bPi$XVL^7yPDb>7_J*6_F$u_yn1u|T~4-bP_R3$ zZIT=<89gdA{^dyD#@&Cw&t!8uRFoVsXTY@bA@xAnEBi$Mw^QpWbm_VonvU=ZQ}>x0 zI|Z!Ne{Jx;!ZcZs)C~+J=t}SbPrRzovf5pQ*-&qOCs`$CYm)^V zQ~DJOU%4^)hy(IHI6f71JKiB6G;6FDUpRgbujdokcp+$HDOZf$mI1gf4#GD1MC3T- zuOtGjrlGr(i_V1AkZRu@=9^dY0gdj%N8p|HT^V3XJ@p%9Ix^m(Jd=+E=VFvW_|Mvl zAK;E!?Cx6yBYHpE)W^lKE~^*qEK;dmeB!x(o!Z$mr!d@W{8IPeZ1z+`rt40ivx9S| T>mwrAg55AqM|BrOIdBWtsQd-x diff --git a/data/shell/stagers/stager.jsp_ b/data/shell/stagers/stager.jsp_ index 5e021bffd57688898879ee43df1db8d2a7739600..6f807c3f2f5ed02d8eef58f14afb9b2f3542285e 100644 GIT binary patch literal 1321 zcmV+^1=jjB+weUiJ&$o=r>!hUR1lYNiek=~jeSC6!7G zxk8hmwph8!GgC{c$$|l60`!|!ov0m71CI;%T#>y_{p-%)YRE4AxH*~~5X`9TUqEA$1@RNzdh-j5{o4k< zJki$c+Ekme$YPUxEKk&RAJZi?Kkc{~9S9SS8g&oPCWkJS0(}OX+ej0>S+>VRF)04A zMjIaNBc@(tJ>Ru1Q2mnMcc{?1uN^jISp@>2QZC-_!IV-ak=4Mvk}2~37)r-WbiA$% z)xe4e2b7Xtvq#$)MQfR)5$t{!!#Z{+pTqIf=>~*vBH3~yYgTevDl=M%OcLX+^$rE zIFd_o#n#8&GvoIZxlE)45dWnq5eX~Wm$9IEAg!?Q_)O4@s989WZs6YeyMfhY z0q{Rl5EnuXJUB2pb=&{*`U(qRbAIB;5P)(D1!ciq^= zacoi(~jU-r*SYV_Ax_3|q*ayFSbe*yyN}&Fa@rvbVHCvXL_D-d+i9VOJ03Lh3!v(5- zfw*(|u^B$*3OvXADmH%Bf$}=EdsO6W%=j&;`V4E;O}kW?-JjVJ2?IP(E%oW_p?m2b zhuEb)AmYmX3Pz2u+nK}oweTKMlQJW(iORYv{X(oH-B%tJrBKuH)mb8$9DCDNNyf** z7PdvdhCZz6fQk@CqQM=OzXfdMb3ongE-S8o@JV^q;tjtOMQK9>LfPt9cgLv1zBeWY zPM(nl*SN5@4XCGD* zcXI~mD?vB!8|GhJ(Yf#eI3vp!5FFl>`ZXKXyTWsu+N9?Zi`l;Rtgy{##;au|{P{ze f*eZFsz=A#1$h$$&cAazMi^$^cKjM*C*+*w7$AFq! literal 1321 zcmV+^1=jix#L@u<0o4sz&bT*qC}ELPI0YlYy3`ItU5v=q=>jRr@_@eISUj`y=x7t! z596qq#hySAXA`ElF^$u=y@X)IYkaFeh*;s%5( zreL9~tbJ{3%tH-4Zd(nFh+HhF{n*QG5s!==ZpAm{-QdbCDTpMBqCscIgt&+B%l6RG z!Hf69bVRH9W7;Qjb7^og`xz7XJNV6rp#70*ryHg@ESA*NHdT0_d4MM7WzjdU!GU^) zRm9ENrX{Y4*FdjW5EZCRcE&yiL!6Bw0xB=6CNFdMPm(pKehf39#A+{^W$e3qSUu%~ zI%+G|JcMFE0fosHIp~S)3)$s?us;ewWnX@oJ3GbQz2#>ej`#eZu5*sYabMhd2+f-} z%Hp;Rd2iYoR^^1%SeM}CU#i*NhaYW%@Y&lCZOr|vy_;CNcOYdOqg_E)c^j<=TWAL{74^mP z`4@mWK+)_A#3^pMs1;}5%&QuF4ZjTiR~tAhB?3@ezto;4l5V_tLxlBNw}-RggxcAw|fM%Qo5qS(v;3t zeSr#ABjbTKUjD7ONKWOCfGUs$op%G$rr)neOGgG#tSP~f%|kTl1S%#|za5>i3#{$^ zZcc7Ji8@@D8r|j6T2NeKRy+SQl8QfCBjsclE0Q1Xqzdx+oN()`(8dIxz`T-$W4Z1m z>8l}VF3#-xWLny4O#swgi{VNz`P0_S81X(Z4-<^t)_(TmI6un zN#5|IWcHztW;ojJmjigqA6Fbm11E&Hf%n5sQhd6S^C0HdHs(elk&^hp&Pd^!Z+^NW zu85gq#9WduIPx2EdypE!1QjhCMqX0eo|7)I6u`(`M5Vqy4c|L|>C2vFGN55$K?>^X z$@~v|BuxKfw0cHXQMnvW(cu$$=|sj1V7-wUEXVlvlSFp(ZOXx^nN;=>uM&b#BOHHMjEl z36y!8x@6GN>7NU9-moaGpeInkPa2`sM?SSpj5tj0{V#(zc{4veE6nj_3$~s3p%oe; za>VUEzOAc-b5ic$9flzgcf1oHDy=U;vE!jz9&_Y8HPLUGy%M)>9}!y4pW^NlTSY1> z9%dceS10fhcE+xYpQIq!FEpPYmtFMjt9^yjWG`?&vEG4I-q@_nN4Olntv&k7q8rno)3 zVzt|pJBAW~FZ0mIcB$Z6{bK@4Q}>J)dVu%GN8Der###4iYazQBhYl=YH^1YMw|W^6 z^|uJXD)F|#9p*ED5IvRNheRanP9 zH}E84y}+(oSSVkceU5o|83aH?rg8tW-rcG22}H)X>@nGRXUBu))nNGSvQ;JhMlG@rHn>>=pOSPuSb~eGax?`|DD*KpfZ5Bv ZFed(VF2R|3V3tTAjU*+5gnIR0v$^zyz2yJ^ literal 379 zcmV->0fhb!#M;G#1+@!R_KBYpQxC#5>&21_$Kr!wSo*=gjtrN}Q%Gy1^H66i&#fkj z9>ngiB&05+6RE85AH4f$ff6@xOx3V6M%s)2F3CiLx+ua@bOVPxyHrqEUaI(_%L^XkI)7kLxom@JwdcGkDg=>Q0AYxf`0KzL)K63@ER=rZm zJMU@UXAp#RpB;o8;$&M7a#*L-Kd1|V>mn>0-RpzAN>>$0O~Mwt$QD^|jsscFJWbpT zOMwwtqT-T%WO5^;6q{m2Wp#Cbxl_ZI= (3, 0): xrange = range ord = lambda _: _ -KEY = b"wXGWkn7KI0VhDOHS" +KEY = b"LGekORm7qYCsv39f" def xor(message, key): return b"".join(struct.pack('B', ord(message[i]) ^ ord(key[i % len(key)])) for i in range(len(message))) diff --git a/extra/shutils/recloak.sh b/extra/shutils/recloak.sh index 07dd4aabe..17cd7bb75 100755 --- a/extra/shutils/recloak.sh +++ b/extra/shutils/recloak.sh @@ -5,10 +5,14 @@ DIR=$(cd -P -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd -P) cd $DIR/../../data/shell -find -regex ".*backdoor\.[a-z]*_" -or -regex ".*stager\.[a-z]*_" -type f -exec python ../../extra/cloak/cloak.py -d -i '{}' \; +find -regex ".*backdoor\.[a-z]*_" -type f -exec python ../../extra/cloak/cloak.py -d -i '{}' \; +find -regex ".*stager\.[a-z]*_" -type f -exec python ../../extra/cloak/cloak.py -d -i '{}' \; cd $DIR/../cloak sed -i 's/KEY = .*/KEY = b"'`python -c 'import random; import string; print("".join(random.sample(string.ascii_letters + string.digits, 16)))'`'"/g' cloak.py cd $DIR/../../data/shell -find -regex ".*backdoor\.[a-z]*" -or -regex ".*stager\.[a-z]*" -type f -exec python ../../extra/cloak/cloak.py -i '{}' \; +find -regex ".*backdoor\.[a-z]*" -type f -exec python ../../extra/cloak/cloak.py -i '{}' \; +find -regex ".*stager\.[a-z]*" -type f -exec python ../../extra/cloak/cloak.py -i '{}' \; + +git clean -f > /dev/null diff --git a/lib/core/common.py b/lib/core/common.py index c65b2ae97..b50810843 100644 --- a/lib/core/common.py +++ b/lib/core/common.py @@ -5003,6 +5003,10 @@ def decloakToTemp(filename): >>> openFile(_, "rb", encoding=None).read().startswith(b'<%') True >>> os.remove(_) + >>> _ = decloakToTemp(os.path.join(paths.SQLMAP_SHELL_PATH, "backdoors", "backdoor.asp_")) + >>> openFile(_, "rb", encoding=None).read().startswith(b'<%') + True + >>> os.remove(_) """ content = decloak(filename) diff --git a/lib/core/settings.py b/lib/core/settings.py index de19e2b97..eb2b45ce5 100644 --- a/lib/core/settings.py +++ b/lib/core/settings.py @@ -18,7 +18,7 @@ from lib.core.enums import OS from thirdparty.six import unichr as _unichr # sqlmap version (...) -VERSION = "1.4.8.20" +VERSION = "1.4.8.22" TYPE = "dev" if VERSION.count('.') > 2 and VERSION.split('.')[-1] != '0' else "stable" TYPE_COLORS = {"dev": 33, "stable": 90, "pip": 34} VERSION_STRING = "sqlmap/%s#%s" % ('.'.join(VERSION.split('.')[:-1]) if VERSION.count('.') > 2 and VERSION.split('.')[-1] == '0' else VERSION, TYPE)