ISCC-WriteUp


ISCC-WriteUp

0X01 Basic

1.Wheel Cipher(50)

Jefferson disk(杰弗逊盘),查看wiki其加密方法。

关键部分摘录下来。

Operation
To encrypt a message, Alice rotates the disks to produce the plaintext message along one "row" of the stack of disks, and then selects another row as the ciphertext. To decrypt the message, Bob rotates the disks on his cylinder to produce the ciphertext along a row. It is handy if both Alice and Bob know the offset of the row, but not really necessary since Bob can simply look around the cylinder to find a row that makes sense.

For example, a simplified "toy" Bazeries cylinder using only ten disks might be organised as shown below, with each disk "unwrapped" into a line and each marked with a designating number:

1:    < ZWAXJGDLUBVIQHKYPNTCRMOSFE <
2:    < KPBELNACZDTRXMJQOYHGVSFUWI <
3:    < BDMAIZVRNSJUWFHTEQGYXPLOCK <
4:    < RPLNDVHGFCUKTEBSXQYIZMJWAO <
5:    < IHFRLABEUOTSGJVDKCPMNZQWXY <
6:    < AMKGHIWPNYCJBFZDRUSLOQXVET <
7:    < GWTHSPYBXIZULVKMRAFDCEONJQ <
8:    < NOZUTWDCVRJLXKISEFAPMYGHBQ <
9:    < XPLTDSRFHENYVUBMCQWAOIKZGJ <
10:    < UDNAJFBOWTGVRSCZQKELMXYIHP <
If the "key", the sequence of disks, for this Bazeries cylinder is

7,9,5,10,1,6,3,8,2,4
and Alice wants to send the message "retreat now" to Bob, she rearranges the disks as per the key and rotates each disk to obtain the plaintext, which is shown at the left, with spacing added for clarity:

7:    < R AFDCE O NJQGWTHSPYBXIZULVKM <
9:    < E NYVUB M CQWAOIKZGJXPLTDSRFH <
5:    < T SGJVD K CPMNZQWXYIHFRLABEUO <
10:    < R SCZQK E LMXYIHPUDNAJFBOWTGV <
1:    < E ZWAXJ G DLUBVIQHKYPNTCRMOSF <
6:    < A MKGHI W PNYCJBFZDRUSLOQXVET <
3:    < T EQGYX P LOCKBDMAIZVRNSJUWFH <
8:    < N OZUTW D CVRJLXKISEFAPMYGHBQ <
2:    < O YHGVS F UWIKPBELNACZDTRXMJQ <
4:    < W AORPL N DVHGFCUKTEBSXQYIZMJ <
She then selects the ciphertext from the sixth row of the cylinder up from the plaintext. This ciphertext is also highlighted above with spacing, and gives:

OMKEGWPDFN
When Bob gets the ciphertext, he rearranges the disks on his cylinder to the key arrangement, rotates the disks to give the ciphertext, and then reads the plaintext six rows down from the ciphertext, or simply looks over the cylinder for a row that makes sense.

简述一下解密的方法:

给出了加密表,密匙和密文。

1.将加密表根据密匙的数字顺序排序。

2.每一行相当于一个滚轮,字母是环形首尾相接排列的,按照密文将加密表每一行重新排列,使第一个字母符合密文,排列时当作一个环进行排列。

3.排好后按列读出,看看哪列成句子。

加密表:
1:    < ZWAXJGDLUBVIQHKYPNTCRMOSFE <
2:    < KPBELNACZDTRXMJQOYHGVSFUWI <
3:    < BDMAIZVRNSJUWFHTEQGYXPLOCK <
4:    < RPLNDVHGFCUKTEBSXQYIZMJWAO <
5:    < IHFRLABEUOTSGJVDKCPMNZQWXY <
6:    < AMKGHIWPNYCJBFZDRUSLOQXVET <
7:    < GWTHSPYBXIZULVKMRAFDCEONJQ <
8:    < NOZUTWDCVRJLXKISEFAPMYGHBQ <
9:    < XPLTDSRFHENYVUBMCQWAOIKZGJ <
10:    < UDNAJFBOWTGVRSCZQKELMXYIHP <
11:    < MNBVCXZQWERTPOIUYALSKDJFHG <
12:    < LVNCMXZPQOWEIURYTASBKJDFHG <
13:    < JZQAWSXCDERFVBGTYHNUMKILOP <

密钥为:2,3,7,5,13,12,9,1,8,10,4,11,6
密文为:NFQKSEVOQOFNP

2:    < N ACZDTRXMJQOYHGVS FUWIKPBEL <
3:    < F HTEQGYXPLOCKBDMA IZVRNSJUW <
7:    < Q GWTHSPYBXIZULVKM RAFDCEONJ <
5:    < K CPMNZQWXYIHFRLAB EUOTSGJVD <
13:    < S XCDERFVBGTYHNUMK ILOPJZQAW <
12:    < E IURYTASBKJDFHGLV NCMXZPQOW <
9:    < V UBMCQWAOIKZGJXPL TDSRFHENY <
1:    < O SFEZWAXJGDLUBVIQ HKYPNTCRM <
8:    < Q NOZUTWDCVRJLXKIS EFAPMYGHB <
10:    < O WTGVRSCZQKELMXYI HPUDNAJFB <
4:    < F CUKTEBSXQYIZMJWA ORPLNDVHG <
11:    < N BVCXZQWERTPOIUYA LSKDJFHGM <
6:    < P NYCJBFZDRUSLOQXV ETAMKGHIW <

-->FIREINTHEHOLE

2.神秘图片(100)

下载附件是一png格式图片下载

放到pngcheck看一下,发现IEND块里有东西。

mark

用foremost进行恢复。

执行foremost -v 1.png,文件生成一个文件夹。

mark

查看恢复出来的图片。

发现里面有个这个,是猪圈密码。猪圈密码

mark

解得-goodluck。

3.告诉你个秘密(100)

636A56355279427363446C4A49454A7154534230526D6843
56445A31614342354E326C4B4946467A5769426961453067

-----------------------------------------------------
16进制转字符
cjV5RyBscDlJIEJqTSB0RmhC
VDZ1aCB5N2lKIFFzWiBiaE0g
-------------------------------------------------------
解base64
r5yG lp9I BjM tFhB
T6uh y7iJ QsZ bhM 
---------------------------
tongyuan

4.你猜猜(100)

下载得

504B03040A0001080000626D0A49F4B5091F1E0000001200000008000000666C61672E7478746C9F170D35D0A45826A03E161FB96870EDDFC7C89A11862F9199B4CD78E7504B01023F000A0001080000626D0A49F4B5091F1E00000012000000080024000000000000002000000000000000666C61672E7478740A0020000000000001001800AF150210CAF2D1015CAEAA05CAF2D1015CAEAA05CAF2D101504B050600000000010001005A000000440000000000

看到504B应该就知道是怎么回事了,这是一个zip文件的16进制数据。

16进制编辑保存为zip文件,打开发现flag.txt被加密,尝试伪加密无果,转而爆破,得key:123456,得flag。

5.公邮密码(100)

下载得一个加密的zip文件,爆破得到密码,输入密码得到base64加密过的flag,解密即可。

6.二维码(150)

​ 下载是一个二维码,内容是The password of the router is our flag说flag在路由器里。改为zip,内容被加密,文件名比较不同u5bc6u7801u7eafu6570u5b57u5171u0038u4f4d,是Unicode编码,解码后告诉我们密码纯数字共8位。爆破得密码为20161114.

​ 解压后又给出了密码提示和一个.cap的文件,用EWSA爆破。根据提示前四位是ISCC 后四位由大写字母和数字构成,写出字典。

s='1234567890QWERTYUIOPASDFGHJKLZXCVBNM'
ss='ISCC'
flag=open('1.txt','w')
for a in s:
    for b in s:
        for c in s:
            for d in s:
                key=ss+a+b+c+d
                flag.write(key)
                flag.write('\n')
flag.close()

爆破得密码即flag.

0X02 Misc

1.眼见非实(100)

下载的是一个word文档,出错打不开。改一下后缀解压出来,在document.xml文件中有flag。

2.普通Disco(250)

下载是一个disco.wav文件,频谱分析,开头一段又东西。

mark

高低位对应01,然后二进制转十进制,再转字符。

1100110    102
1101100    108
1100001    97
1100111    103
1111011    123
1010111    87
0110000    48
1010111    87
0101010    42
1100110    102
1110101    117
1101110    110
1101110    110
1111001    121
1111101    125

flag{W0W*funny}

3.很普通的数独(300)

下载得到25个数独图片,有数字的格涂黑,拼成二维码。(ps大法好)

mark

mark

扫码,解base64,得flag。

4.就在其中(100)

wireshark分析没东西,转而去binwalk分离文件,分离出的一堆东西里又个压缩包,可以解压出key.txt,但打开是乱码,文件中还有一个rsa解密key,openssl命令解密得flag。

mark

命令:

# openssl rsautl -decrypt -in '/root/output/zip/00000047/key.txt' -inkey '/root/_Misc-03.pcapng.extracted/AC76.key' -out key.de

openssl -RSA资料

http://www.cnblogs.com/aLittleBitCool/archive/2011/09/22/2185418.html

0X03 Web

1.自相矛盾(150)


打破常规,毁你三观!!!!

<!--
$v1=0;$v2=0;$v3=0;
$a=(array)json_decode(@$_GET['iscc']);  #json格式传入数据,get方式读入

if(is_array($a)){
    is_numeric(@$a["bar1"])?die("nope"):NULL;
    if(@$a["bar1"]){
        ($a["bar1"]>2016)?$v1=1:NULL;    #iscc中的bar1不能是数字还得大于2016
    }
    if(is_array(@$a["bar2"])){
        if(count($a["bar2"])!==5 OR !is_array($a["bar2"][0])) die("nope");
            #bar2是5位数组且第0位也是数组
        $pos = array_search("nudt", $a["bar2"]); 
        $pos===false?die("nope"):NULL;   #bar2的每一位要含有nudt
        foreach($a["bar2"] as $key=>$val){
            $val==="nudt"?die("nope"):NULL;    #bar2的每一位不能含有nudt
        }
        $v2=1;

    }    
}
$c=@$_GET['cat'];
$d=@$_GET['dog'];
if(@$c[1]){
    if(!strcmp($c[1],$d) && $c[1]!==$d){  #0&&1

        eregi("3|1|c",$d.$c[0])?die("nope"):NULL;
        strpos(($c[0].$d), "isccctf2017")?$v3=1:NULL; #要有isccctf2017

    }

}
if($v1 && $v2 && $v3){ 

   echo $flag;
}
-->

php的弱类型:当一个整形和一个其他类型行比较的时候,会先把其他类型intval再比

传{“bar1”:”2017a”}就好了。

intval(nudt)=0,所以{“bar2”:”[[0],0,0,0,0]”}

cat要是数组,cat[1]和dog比较,要strcmp为0,cat[1]!==dog为1,所以让cat[1]为数字,dog为字符。

dog又要包含isccctf2017,用%00截断。

payload:?iscc={"bar1":"2017a","bar2":[[0],0,0,0,0]}&cat[0]=1&cat[1][]=1&dog=%00isccctf2017

2.我们一起来日站(150)

看一下/robots.txt,

#
# robots.txt 
#
User-agent: * 
Disallow: /21232f297a57a5a743894a0e4a801fc3/
Disallow: /api

去访问http://139.129.108.53:5090/web-04/21232f297a57a5a743894a0e4a801fc3/,猜测登陆页面为http://139.129.108.53:5090/web-04/21232f297a57a5a743894a0e4a801fc3/admin.php.

正确,进入登陆页面,抓包,万能密码登陆,得到flag。

mark

后台登陆万能密码

https://www.douban.com/note/168041331/

3.交换flag(100)

​ 抓个包,参数传入的值为f1ag,这个在题目页面细心一点可以发现,再就是参数名称的问题,每一次根据反馈不断添加就好。

mark

mark

4.WelcomeToMySQL(100)

可以上传文件,上传图片可以,传php的马就会弹窗,从表哥那得知有.php5的这种文件,直接可以上传,传马,在base.php文件中发现username和password,登陆数据库,得到flag。

mark

5.


文章作者: LANVNAL
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 LANVNAL !
  目录