其他分享
首页 > 其他分享> > CTF攻防世界[新手](跟进中··· )

CTF攻防世界[新手](跟进中··· )

作者:互联网

WEB:

  1. 用菜刀连接

  2. simple_php:

    1. 发现只有同时满足两个条件才可以呈现出完整的flag即a==0且if a 为真,b不是数字且b>1234才会返回。

    2. 经过查询"=="得出:php中的==首先进行类型转换,然后才会进行比较,经过查询php类型比较表得出,把a构造成'0'或'alph'这种转换后为0但本身不为Flase的形式。数字和字符混合的字符串转化为整数后只保留数字即12345s转换为整数后为12345。

    3. 构造为?a='0'&b=12345s

  3. 写了一个ping命令,但没有写waf,

    1. 命令执行漏洞(|;||;&&   这些是管道符)

      1. command1&&command2:先执行command1,如果为真,再执行command2

      2.  command1 | command2:只执行command2

      3. command1&command2:先执行command2,后执行command1

      4. command1||command2:先执行command1,如果为假,再执行command2

  4. ··· ···

MISC:

  1. 直接就是一个flag:是flag的说明

  2. 有两种思路

    1. 将pdf转为word,然后把图片移动走,然后后面就有flag,

    2. 另外也可以通过将鼠标放在图片上,发现鼠标会变成光标,然后进行复制

  3. 将gif通过在线工具把gif的内容一帧一帧的解析出来,然后将有二维码的那一张下载出来,通过PS上二维码定位符,使其成为一个完整的二维码,然后通过在线工具解码,将解码后的flag就出来了

  4.  打开动态图,发现是一个个由黑白相间的图片,猜测可能代表二进制的信息,然后用python编写exp来进行将把信息转化出来

    1. exp.py
      ------
      from PIL import Image//image模块是再python PIL图像处理中常见的模块,对图像进行基础操作的功能基本都包含在此模块内
      result = ""
      for num,i in enumerate(range(104))://enumerate()就是枚举的意思,enumerate(X,[start=0])其中函数中的X可以是一个迭代器或者一个序列,start是起始数值,默认从0开始,X可以是一个字典。num就相当于定义的是从start规定的为起始的下标,默认是从0开始的。
          img = Image.open(f"{i}.jpg")//open()里面应该是添加图像的路径,如果前面有了一个f,那么在路径里面相当于可以有了一个{}括起来的变量。
          im=img.convert("RGB")//将图像转化为RGB形式,以便输出RGB三色的值(,open打开的图像还自带一个透明的通道)
          r,g,b=im.getpixel((1,1))//分别赋予r,g,b当坐标点是(1,1)时的red,green,blue值
          if r!=255:
              result += "1"
          else:
              result +="0"
      for i in range(0,len(result),8)://从0到103,以8为步长
          byte=result[i:i+8]//算开头不算结尾,所以也就是0,1,2,3,4,5,6,7。
          print(chr(int(byte,2)),end="")//把包含二进制内容的字符串先转化为int型,然后再转换为chr型,然后用print以""结尾输出出来。

       

  5. 密码学:看起来是十六进制的密文,通过转换发现有问题,然后通过C8的判断,发现是十进制的200,但是ASCII码只有128位,所以,应该对十进制的内容进行以下改变,将转换为的十进制数减去128严谨来说应该是%128,最有得到的十进制数都是小于128的,通过ASCII码进行转换,就可以得出结论。

    1. exp.py
      ------
      import re//re模块即是正则表达式模块
      a = 'c8e9aca0c6f2e5f3e8c4efe7a1a0d4e8e5a0e6ece1e7a0e9f3baa0e8eafae3f9e4eafae2eae4e3eaebfaebe3f5e7e9f3e4e3e8eaf9eaf3e2e4e6f2'
      b=re.findall(r'.{2}',a)//括号内的r代表字符串,如果有b则代表字节,意思是以两个字符串为一组,返回到名字为b的列表中。
      flag=''
      for i in b:
          flag += chr((int(i,16)-128))//将16进制的转换为int型,然后在转换为chr型,然后累加到str型的flag中
      print(flag)

       

  6. ··· ···

标签:command1,攻防,command2,flag,然后,CTF,result,128,新手
来源: https://blog.csdn.net/qq_41997084/article/details/110306803