每日CTF-week2

2018-3-12

NCTF-base64全家桶

原题:

base64全家桶
150

全家桶全家桶全家桶!
我怎么饿了。。。。。。
密文(解密前删除回车):
R1pDVE1NWlhHUTNETU4yQ0dZWkRNTUpYR00zREtNWldHTTJES1JSV0dJM0RDTlpUR1kyVEdNWlRHSTJVTU5SUkdaQ1RNTkJWSVk
zREVOUlJHNFpUTU5KVEdFWlRNTjJF

分析:

base64,base32,base16解一遍就行。

>>> from base64 import *
>>> 
>>> b64decode("R1pDVE1NWlhHUTNETU4yQ0dZWkRNTUpYR00zREtNWldHTTJES1JSV0dJM0RDTlpUR1kyVEdNWlRHSTJVTU5SUkdaQ1RNTkJWSVkzREVOUlJHNFpUTU5KVEdFWlRNTjJF==")
b'GZCTMMZXGQ3DMN2CGYZDMMJXGM3DKMZWGM2DKRRWGI3DCNZTGY2TGMZTGI2UMNRRGZCTMNBVIY3DENRRG4ZTMNJTGEZTMN2E'
>>> b32decode("GZCTMMZXGQ3DMN2CGYZDMMJXGM3DKMZWGM2DKRRWGI3DCNZTGY2TGMZTGI2UMNRRGZCTMNBVIY3DENRRG4ZTMNJTGEZTMN2E")
b'6E6374667B6261736536345F6261736533325F616E645F6261736531367D'
>>> b16decode("6E6374667B6261736536345F6261736533325F616E645F6261736531367D")
b'nctf{base64_base32_and_base16}'
>>>

flag:

nctf{base64_base32_and_base16}

知识点:

base编码

NCTF-n次base64

原题链接:

http://chinalover.sinaapp.com/decode1/base64.txt

分析:

应该是很多次的base64编码,用python脚本跑就行。

payload:

#python 3.x
from base64 import *

f = open("base64.txt")

try:
    b = f.read()
finally:
    f.close()

while True:
    try:
        b = b64decode(b)
    except:
        print(b)
        break

flag:

nctf{please_use_python_to_decode_base64}

知识点:

base64,python


2018-3-13

NCTF-骚年来一发吗

原题链接:

http://ctf.nuptsast.com/challenges#%E9%AA%9A%E5%B9%B4%E6%9D%A5%E4%B8%80%E5%8F%91%E5%90%97

骚年来一发吗
250

密文:iEJqak3pjIaZ0NzLiITLwWTqzqGAtW2oyOTq1A3pzqas
mark

分析:

题目给出了一个加密函数,我们只要按照加密的规则,逆过来,就可以将其解密了。
我们先分析一下加密函数:

<?php
    function_encode($str){
        $_o = strrev($str); // 将传进的字符串反转
        for($_0 = 0; $_0 &lt; strlen($_o); $_0++){
            $_c = substr($_o, $_0, 1); // 循环遍历反转后的字符串的所有字符
            $__ = ord($_c) + 1; // 将每个字符串的ASCII加1
            $_c = chr($__); // 然后将新的字符串赋值给一个新的变量
            $_ = $_.$_c; //将这些新的字符进连接 
        }
        return str_rot13(strrev(base64_encode($_))); // 将得到的新字符串Base64加密后再反转然后再求Rot-13 , 最后返回
    }
?>

那么解密函数的思路也很清楚了。
1. rot_13
2. strrev
3. base64decode
4. strrev
5. 遍历处理

payload:

#php解法  
<?php
    function decode($str)
    {
        $res='';
        $one=str_rot13($str);
        $two=strrev($one);
        $three=base64_decode($two);
        $four=strrev($three);
        for($i=0;$i<strlen($four);$i++)
        {
            $a=substr($four,$i,1);
            $b=ord($a)-1;
            $c=chr($b);
            $res=$res.$c;
        }
        return $res;
    }
    print decode("iEJqak3pjIaZ0NzLiITLwWTqzqGAtW2oyOTq1A3pzqas");
?>
#题外话:我特别讨厌类似$__,$_o,$0之类的变量命名法,写给最强大脑看吗?

flag:

nctf{rot13_and_base64_and_strrev}

知识点:

rot_13加密、base64、php代码审计、编程语言(其实php或者其他都行)

关于Rot-13 , 这种加密方式其实就是利用凯撒加密的原理 ,
但是为什么得到的密文加密一次后又会变成明文呢 ?

正好因为英文有26个字母 ,
位移13位之后刚好又可以回到原来的位置


2018-3-14

mixed_base64

原题链接:

mixed_base64
250
code.txt
多重base64加密,
干(sang)得(xin)漂(bing)亮(kuang)!
mark

分析:

题目给出了生成的源码,base16,base32,base64 随机加密3次。
那么我也解密十次:

from base64 import *

f = open("code.txt")

try:
    b = f.read()
finally:
    f.close()

for i in range(10):
    try:
        b = b16decode(b)
    except:
        try:
            b = b32decode(b)
        except:
            b = b64decode(b)

print(b)

payload:

以上

flag:

nctf{random_mixed_base64_encode}

知识点:

python编程、base加密


2018-3-15

NCTF-异性相吸

原题链接:

题目链接:

异性相吸
300
同性真爱,异性相吸都是假的!(题目要求,我是直的)
解密压缩文件里的内容

TIPS:

    xor
    hex2binary
    len(bin(miwen))==len(bin(mingwen))

分析:

题目给了提示,xor,那么猜测就是将压缩包的内容,按照异或运算,即可。
01editor按照二进制打开;
分别得到其二进制代码,方便计算:
mark
利用脚本,计算异或结果:

#python 3.x
a = '0000101000000011000101110000001001010110000000010001010100010001000010100001010000001110000010100001111000110000000011100000101000011110001100000000111000001010000111100011000000010100000011000001100100001101000111110001000000001110000001100000001100011000' 
b = '0110110001101111011101100110010101101100011011110111011001100101011011000110111101110110011001010110110001101111011101100110010101101100011011110111011001100101011011000110111101110110011001010110110001101111011101100110010101101100011011110111011001100101' 
for i in range(len(a)): 
    if(a[i] == b[i]): 
        print('0',end='')
    else: 
        print('1',end='')

得到运算结果后,按照二进制复制到01editor中,然后得到flag。
mark

flag:

nctf{xor_xor_xor_biubiubiu}

知识点:

异或运算


2018-3-16

NCTF-MD5

原题链接

MD5
300

python大法好!
这里有一段丢失的md5密文
e9032???da???08????911513?0???a2
要求你还原出他并且加上nctf{}提交

已知线索 明文为: TASC?O3RJMV?WDJKX?ZM

分析

这里很显然是md5碰撞,md5是指纹加密,不可逆,但是可以通过字符串碰撞出和密文一致的结果。题目缺失了三个字符,还有可能爆破,多了恐怕。。。。

payload

python脚本:

#python3.x
import hashlib 
# 明文为: TASC_O3RJMV_WDJKX_ZM 
# 密文为 : e9032___da___08____911513_0___a2 
str1 = "TASC" 
str2 = "O3RJMV" 
str3 = "WDJKX" 
str4 = "ZM"

#将字符存在列表中,方便调用   
dic = ['!', '#', '$', '%', '&', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '?', '@', 
'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']

def getMD5(minwen):
    md5obj = hashlib.md5()
    md5obj.update(str.encode(minwen))
    return md5obj.hexdigest()

for i in dic:
    for j in dic:
        for k in dic:
            minwen = str1 + i + str2 + j + str3 + k + str4  #拼接明文字串
            print(minwen,end=' ')
            md5 = getMD5(minwen)
            print(md5)

            if md5.startswith("e9032") and md5.endswith("a2"):
                print("find flag:  nctf{"+md5+"}")
                exit(0)

注意,这里有个坑,得到的明文不是题目要的答案,题目要求还原的是密文。

mark

最后说一句:BF+python大法好!

flag:

nctf{e9032994dabac08080091151380478a2}


2018-3-17

NCTF-综合题

原题链接:

http://teamxlc.sinaapp.com/web3/b0b0ad119f425408fc3d45253137d33d/index.php

分析:

很显然是jsfuck的编码,直接在控制台中运行一下,试试看,得到1bc29b36f623ba82aaf6724fd3b16718.php,

访问http://teamxlc.sinaapp.com/web3/b0b0ad119f425408fc3d45253137d33d/1bc29b36f623ba82aaf6724fd3b16718.php,结果不对,还被嘲讽了。

哈哈哈哈哈哈你上当啦,这里什么都没有,TIP在我脑袋里

但是好像提示tip,回头看题,发现tip是bash。
mark
响应头里也出现了history of bash。

度娘一下,Linux下查看命令行历史记录

简单的说,Linux的bash命令会存在.bash_history中,然后可以通过history(bash中),或者./history(vim,cat)查看。

于是访问

http://teamxlc.sinaapp.com/web3/b0b0ad119f425408fc3d45253137d33d/.bash_history

,得到
zip -r flagbak.zip ./*

那么我们接着访问http://teamxlc.sinaapp.com/web3/b0b0ad119f425408fc3d45253137d33d/flagbak.zip
即可下载压缩包,解压得到flag。

flag:

nctf{bash_history_means_what}

知识点:

bash_history


2018-3-18

SQL注入2

原题链接

http://ctf.nuptsast.com/challenges#SQL%E6%B3%A8%E5%85%A52

分析

源码:

<?php
if($_POST[user] && $_POST[pass]) {
   mysql_connect(SAE_MYSQL_HOST_M . ':' . SAE_MYSQL_PORT,SAE_MYSQL_USER,SAE_MYSQL_PASS);
  mysql_select_db(SAE_MYSQL_DB);
  $user = $_POST[user];
  $pass = md5($_POST[pass]);
  $query = @mysql_fetch_array(mysql_query("select pw from ctf where user='$user'"));
  if (($query[pw]) && (!strcasecmp($pass, $query[pw]))) {
      echo "<p>Logged in! Key: ntcf{**************} </p>";
  }
  else {
    echo("<p>Log in failure!</p>");
  }
}
?>

关键代码:

$query = @mysql_fetch_array(mysql_query("select pw from ctf where user='$user'"));
  if (($query[pw]) && (!strcasecmp($pass, $query[pw]))) {
      echo "<p>Logged in! Key: ntcf{**************} </p>";
  }

函数strcasecmp —
二进制安全比较字符串(不区分大小写)

提示说union select ,于是构造一个md5(1)的联合查询。
得到flag。

payload

user: -1’ union select md5(1)#
pw: 1

flag

ntcf{union_select_is_wtf}


2018.3.19

密码重置2

原题链接

http://nctf.nuptzj.cn/web14/index.php
TIPS:
1.管理员邮箱观察一下就可以找到
2.linux下一般使用vi编辑器,并且异常退出会留下备份文件
3.弱类型bypass

分析

查看网页源码,发现邮箱: admin@nuptzj.cn
tips2 关于vim的备份文件.swp格式文件,百度得到:https://blog.csdn.net/qingchenldl/article/details/79702355

于是查看文件http://nctf.nuptzj.cn/web14/.submit.php.swp
注意查看文件要加.

获得关键代码:

if(!empty($token)&&!empty($emailAddress)){
    if(strlen($token)!=10) die('fail');
    if($token!='0') die('fail');
    $sql = "SELECT count(*) as num from `user` where token='$token' AND email='$emailAddress'";
    $r = mysql_query($sql) or die('db error');
    $r = mysql_fetch_assoc($r);
    $r = $r['num'];
    if($r>0){
        echo $flag;
    }else{
        echo "失败了呀";
    }
}

容易看到token要满足:
strlen( token)=10 t o k e n ) = 10 token = 0

容易想到 token=0e12345678(科学计数法绕过)
得到flag。

flag

nctf{thanks_to_cumt_bxs}

知识点

vim的.swp文件
php弱类型

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值