ctfshow crypto(二)

618 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

萌新_密码5

由田中 由田井 羊夫 由田人 由中人 羊羊 由由王 由田中 由由大 由田工 由由由 由由羊 由中大

这个是当铺密码: 当铺密码就是一种将中文和数字进行转化的密码,算法相当简单:当前汉字有多少笔画出头,就是转化成数字几。例如: 王夫 井工 夫口 由中人 井中 夫夫 由中大:67 84 70 123 82 77 125

这里用的是师傅的脚本

s ='田由中人工大王夫井羊'
code=input("请输入当铺密码:")
code = code.split(" ")
w = ''
for i in code:
    k=""
    for j in i:
       k+=str(s.index(j))
    w+=chr(int(k))
print(w)

在这里插入图片描述

贝斯多少呢

8nCDq36gzGn8hf4M2HJUsn4aYcYRBSJwj4aE0hbgpzHb4aHcH1zzC9C3IL

hint: 将明文分段,每段base62,然后拼在一起

思路应该是将密文分段,base62解密,然后把明文拼在一起

但是,这个题没有解出来,58个字符,只能29分段,但是base62解不出来……

find the table

题目说要审查元素,然后看到这个的属性是数字 在这里插入图片描述

千算万算,没想到这个是元素周期表 9 57 64 8 39 8 92 3 19 99 102 74 对应的元素就是 f la gd o y o u li k es no w 再用{}包起来就是flag了

babyrsa

这个是rsa,直接用脚本

import gmpy2
import binascii
e = 65537
p = 10404683
q = 14017
c = 477275

phi = (p-1)*(q-1)
d = gmpy2.invert(e,phi)
m = gmpy2.powmod(c,d,p*q)

print(binascii.unhexlify(hex(m)[2:]))

在这里插入图片描述

ctfshow=DJBCTF-veryphp WP

<?php
error_reporting(0);
highlight_file(__FILE__);
include("config.php");
class qwq
{
    function __wakeup(){
        die("Access Denied!");
    }
    static function oao(){
        show_source("config.php");
    }
}
$str = file_get_contents("php://input");
if(preg_match('/\`|\_|\.|%|\*|\~|\^|\'|\"|\;|\(|\)|\]|g|e|l|i|\//is',$str)){
    die("I am sorry but you have to leave.");
}else{
    extract($_POST);
}
if(isset($shaw_root)){
    if(preg_match('/^\-[a-e][^a-zA-Z0-8]<b>(.*)>{4}\D*?(abc.*?)p(hp)*\@R(s|r).$/', $shaw_root)&& strlen($shaw_root)===29){
        echo $hint;
    }else{
        echo "Almost there."."<br>";
    }
}else{
    echo "<br>"."Input correct parameters"."<br>";
    die();
}
if($ans===$SecretNumber){
    echo "<br>"."Congratulations!"."<br>";
    call_user_func($my_ans);
}

又是代码审计,快被折磨死了,一定要抽出时间好好学学

这里是参考的其他的师傅的一份wp

打开环境代码审计,一堆过滤恶心,还好可以一层一层套下去

解题思路:

post传入三个变量,通过变量覆盖赋值,并且不能包含题目中的那些特殊字符

  1. $shaw_root满足正则匹配规则,并且长度为29

  2. 找到$SecretNumber的值,并传入到ans

  3. 调用qwq类当中的oao方法

那么首先来看这个正则匹配,稍微学过正则的都应该能懂,我给出我的一个payload,可以参考学习

-a9<b>111111111>>>>abcphp@Rsz

但是传入参数前shaw_root中间有_过不了正则的限制,这里利用了一个特性,在传入一些非法字符的时候php会把它解析为下划线_,我记得有空格和[和+这三个这里我用空格吧,post传入

shaw root=-a9<b>111111111>>>>abcphp@Rsz

传入后得到hint,接下来通过爆破得到了secretnumber是21475

>Here is a hint : md5("shaw".($SecretNumber)."root")==166b47a5cb1ca2431a0edfcef200684f && strlen($SecretNumber)===5

进入最后一层call_user_func,这里用了其特性,调用类的方法时语法是qwq::oao

因此最终payload是,burp发包即可获得flag

shaw root=-a9<b>111111111>>>>abcphp@Rsz&ans=21475&my ans=qwq::oao

在这里插入图片描述