题目

  • 文件包含
  • 简单的php
  • Easygo

J_Dream成长日记 | [鹏城杯] 鹏城杯部分WP_web安全

文件包含

nginx配置错误+user-agent文件头写入命令+读取access.log日志,题目确确实实有文件包含考察任意文件读取,但是waf使用正则进行过滤了绝大部分的伪协议和flag、一下子没啥思路百度了一下、发现有一个绕过的方法,就是利用nginx的配置错误 来进行路径拼接,整体是这样子的,直接访问/var/log/nginx/access.log时会被过滤,但是如果服务器配置错误的话,/var/vfree/../log/nginx/access.log的话,nginx默认会处理成/var/log/nginx/access.log,把vfree/../当成跳转上一层目录,于是就log后面的路径拼接到了/var后面,造成了目录穿越的漏洞。然后就是请求头写入读取flag的php代码,包含access.log就读出flag

PCL{bc58644f-f757-11ec-9edf-5224002d2b29}

J_Dream成长日记 | [鹏城杯] 鹏城杯部分WP_ctf_02

J_Dream成长日记 | [鹏城杯] 鹏城杯部分WP_php_03

简单的php

打开题目,发现基本上把能用的字符都过滤掉了,同时code传入的字符不能超过80,否则输出Hello,由于是无参数RCE,不是很熟,所以这里百度了一下,发现了一些题目有点像,于是大概学习了一些,基本上就是异或或者取反,这里找到了一个现在的自动编码取反的脚本,由于是无参数回显,所以要结束print_r、scandir和pos(localeconv())输出当前目录,在此之前要进行编码

print_r(scandir(pos(localeconv()))) ---> [~%8F%8D%96%91%8B%A0%8D]!%FF)));

将这段payload放到get中,就会输出当前目录的文件内容,但是发现flag不在当前目录,所以可能是在根目录上,有一个问题就是不能直接查看根目录,因为/使用了就不符合规则了

J_Dream成长日记 | [鹏城杯] 鹏城杯部分WP_ctf_04

所以此时可以利用通过获取getallheaders()的user-agent进行取反命令执行,也就是说说,在code输入执行函数,然后修改bp的user-agent的内容,使得传入的code执行函数去执行user-agent头,构造payload:

system(next(getallheaders())) ---> [~%8C%86%8C%8B%9A%92]!%FF));

user-agent: ls /

J_Dream成长日记 | [鹏城杯] 鹏城杯部分WP_php_05

发现了flag名字,接下来直接改user-agent头进行读取flag,最终flag为:

PCL{b35a314f-ff57-13a2-9ad1-002d22deeb2a}

Easygo

查看main.go发现/juice/:id网站路径,然后开始利用,http://192.168.1.115:8080/juice/1 网页有输出,源码中id是要输入到sql语句中,所以id这里存在sql注入,payload:

http://192.168.1.115:8080/juice/1’ and 1=1
http://192.168.1.115:8080/juice/1’ and 1=2

最后确定漏洞后,利用sqlmap一把嗦,跑出flag:

PCL{Postgresql_1njection_1s_3asY}

部分wp来源我大神队友地址:​https://vfree.ltd/index.php/archives/400.html​