2017Pwnhub杯-CUIT校赛

这是CUIT第十三届校赛啦,也是我参加的第一次校赛。

在被虐到崩溃的过程中也学到了一些东西。

这次比赛是从5.27早上十点打到5.28晚上十点,共36小时,中间睡了五六个小时吧。(我还算是我们队休息时间比较长的了)|(•_•) |•_•) |_•) |•) | )

这次我队总分1500,校内排名第六。

在下贡献了四道题目,总计450。

MISC: 1

RE: 2

PWN: 1

杂项就不多说了,说一下RE和PWN吧。

先放官方给出的wp,我对题目不一样的看法会放在后面作为参考。


RE100:

引用Nu1l的wp

 t = [157,151,141,181,132,,187,251,186,145,140,144,189,253,145,128,254,188,145,141,254,170,171,179]
s=''
for v int t:
for i in xrange(0x100):
if(~(~(i | 0xCE) | ~(~i | 0x31))&0xff == v:
s+=chr(i)
print s

RE150:

首先修复一下该程序:

 #include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <assert.h>
#include <elf.h> #define ENTRY 0x08048320
#define FILE_OFF 0x320
#define COUNT 0x432 int main(int argc,char *argv[]){
Elf32_Ehdr ehdr;
unsigned char buf[COUNT] = {};
assert(argc == ); int fd = open(argv[],O_RDWR);//打开文件
assert(fd>); assert(lseek(fd,,SEEK_SET)!=-);//读取elf头
assert(read(fd,&ehdr,sizeof(ehdr)) == sizeof(ehdr));
ehdr.e_entry = ENTRY;//修改入口地址 assert(lseek(fd,,SEEK_SET)!=-);//回写elf头
assert(write(fd,&ehdr,sizeof(ehdr)) == sizeof(ehdr)); //解密
assert(lseek(fd,FILE_OFF,SEEK_SET)!=-);//读取被加密的代码
assert(read(fd,buf,COUNT) == COUNT);
int i = ;
while(i<COUNT){
buf[i] = (buf[i]^)<< | (buf[i]^)>>;
i++;
} assert(lseek(fd,FILE_OFF,SEEK_SET)!=-);//写入
assert(write(fd,buf,COUNT) == COUNT); close(fd); return ;
}

然后IDA中去花,分析得到算法。

 #include <stdio.h>

 unsigned char code[]={0x73,0x8D,0xF2,0x4C,0xC7,0xD4,0x7B,0xF7,0x18,0x32,0x71,0xD,0xCF,0xDC,0x67,0x4F,0x7F,0xB,0x6D,};

 int main(void){
int i = ; while(code[i]){
code[i] = code[i]^;
i++;
} i = ;
while(code[i]){
code[i] = ((code[i]^i)<<(i%)) | ((code[i]^i)>>( - (i%)));
i++;
} printf("%s\n",code);
return ;
}

最后得到flag:

SYC{>>Wh06m1>>R0Ot}

pwn50:

Escape from Jail

python的Jail(python沙箱逃逸),过滤是这样的。

通过查看python的builtins,得知可以使用getattr去调用函数。

getattr(os,"system")("/bin/sh")

起shell之后直接读flag就行了。

接下来说一下我在解题过程中的一些不一样的东西:


RE100:

上面最后出flag的时候用的是穷举,但是我发现程序中关键算法的部分本身就是可逆的。

flag[i] = ~(~(flag[i] | 0xCE) | ~(~flag[i] | 0x31));

这是他原来的算法。

在我测试过程中,发现它等同于另一条语句。

flag[i] ^= 0xCE

所以完全可以不用穷举,可以直接利用以下代码。

 #include <stdio.h>
int main(void){ int flag[]={
0x9d,0x97,0x8d,0xb5,0x84,0xbb,0xfb,0xba,0x91,0x8c,0x90,0xbd,0xfd,0x91,0x80,0xfe,0xbc,0x91,0x8d,0xfe,0xaa,0xab,0xb3
};
int i=;
for ( i = ; i < ; ++i ){
flag[i] = ~(~(flag[i] | 0xCE) | ~(~flag[i] | 0x31));
}
for(i=;i<;++i)
printf("%x ",flag[i]); return ;
}

RE150:

我在解题时并没有去试着完全修复ELF文件。

我利用gdb在解密代码后下断,然后dump出解密后的关键代码。

再将这段代码替换到原文件对应的部分,再到IDA中进行分析。

由于中间带花的部分我不会去......所以最后手动翻译了整段代码。(很傻,不建议像我这样做。)

后面的做法就一样啦。

PWN50:

前面差不多,我也用了getattr这个函数去调用system,

但是最后我并没有去拿shell,而是用"cat *"

列出了所有文件的内容。(因为这里还过滤掉了  .  所以不能"cat flag.txt")

2017CUIT校赛-线上赛的更多相关文章

  1. 2019第十二届全国大学生信息安全实践创新赛线上赛Writeup

    本文章来自https://www.cnblogs.com/iAmSoScArEd/p/10780242.html  未经允许不得转载! 1.MISC-签到 下载附件后,看到readme.txt打开后提 ...

  2. 20190815网络与信息安全领域专项赛线上赛misc WriteUp

    目录 签到题 题目内容 使用工具 解题步骤 七代目 题目下载地址 使用工具 解题步骤 亚萨西 题目下载链接 使用工具 解题步骤 24word 题目下载链接 使用工具 解题步骤 感想 几星期前报了名却完 ...

  3. 2018 ACM-ICPC 中国大学生程序设计竞赛线上赛 H题 Rock Paper Scissors Lizard Spock.(FFT字符串匹配)

    2018 ACM-ICPC 中国大学生程序设计竞赛线上赛:https://www.jisuanke.com/contest/1227 题目链接:https://nanti.jisuanke.com/t ...

  4. 2018 ACM-ICPC 中国大学生程序设计竞赛线上赛 F题 Clever King(最小割)

    2018 ACM-ICPC 中国大学生程序设计竞赛线上赛:https://www.jisuanke.com/contest/1227 题目链接:https://nanti.jisuanke.com/t ...

  5. “玲珑杯”线上赛 Round #17 河南专场

    闲来无事呆在寝室打打题,没有想到还有中奖这种操作,超开心的 玲珑杯”线上赛 Round #17 河南专场 Start Time:2017-06-24 12:00:00 End Time:2017-06 ...

  6. 2021江西省赛线下赛赛后总结(Crypto)

    2021江西省赛线下赛 crypto1 题目: from random import randint from gmpy2 import * from Crypto.Util.number impor ...

  7. 计蒜客 25985.Goldbach-米勒拉宾素数判定(大素数) (2018 ACM-ICPC 中国大学生程序设计竞赛线上赛 B)

    若干年之前的一道题,当时能写出来还是超级开心的,虽然是个板子题.一直忘记写博客,备忘一下. 米勒拉判大素数,关于米勒拉宾是个什么东西,传送门了解一下:biubiubiu~ B. Goldbach 题目 ...

  8. ISCC 2018线上赛 writeup

    今天有机会去ISCC2018参加了比赛,个人的感受是比赛题目整体难度不高,就是脑洞特别大,flag形式不明确,拿到flag后也要猜测flag格式,贼坑 废话不多说,以下是本人的解题思路 MISC 0x ...

  9. 2019 第三届强网杯线上赛部分web复现

    0x00前言 周末打了强网杯,队伍只做得出来6道签到题,web有三道我仔细研究了但是没有最终做出来,赛后有在群里看到其他师傅提供了writeup和环境复现的docker环境,于是跟着学习一波并记录下来 ...

随机推荐

  1. java 基础知识九 类与对象

    java  基础知识九  类与对象 1.OO(Object–Oriented )面向对象,OO方法(Object-Oriented Method,面向对象方法,面向对象的方法)是一种把面向对象的思想应 ...

  2. C语言本身并不提供输入输出语句

    C语言本身并不提供输入输出语句,输入和输出操作是由函数来实现的.在C标准函数库中提供了一些输入输出函数,例如,printf函数和scanf函数.在使用他们时,千万不要误认为他们是C语言提供的“输入输出 ...

  3. kafka各个版本特性预览介绍

    kafka-0.8.2 新特性 producer不再区分同步(sync)和异步方式(async),所有的请求以异步方式发送,这样提升了客户端效率.producer请求会返回一个应答对象,包括偏移量或者 ...

  4. 【mysql】关于InnoDB表text blob大字段的优化

    最近在数据库优化的时候,看到一些表在设计上使用了text或者blob的字段,单表的存储空间已经达到了近100G,这种情况再去改变和优化就非常难了 一.简介 为了清楚大字段对性能的影响,我们必须要知道i ...

  5. sql中常见日期获取

    获取当前年月日 --获取当前月份 ,GETDATE())) --获取当前月份的下个月 ,GETDATE())) --获取当前月份的上个月 year()获取年 select year(GETDATE() ...

  6. 【one day one linux】grep工具

    grep  筛选功能 学习这些命令采用20/80原则,这样,可以达到使用%20的命令选项,处理80%的情况. #grep 的使用格式 grep [option] pattern file 那么接下来看 ...

  7. 谈谈一些有趣的CSS题目(十五)-- 谈谈 CSS 关键字 initial、inherit 和 unset

    开本系列,谈谈一些有趣的 CSS 题目,题目类型天马行空,想到什么说什么,不仅为了拓宽一下解决问题的思路,更涉及一些容易忽视的 CSS 细节. 解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题 ...

  8. redis 压缩链表

    redis 压缩链表 概述 压缩链表是相对于普通链表而言的 当普通链表的数据越来越多, 链表查询性能会低效 当存储的数据较少时, 使用链表存储会浪费空间 压缩链表本质上是一个字符串 压缩链表内存储的数 ...

  9. iOS开发 - 适配Https的野路子

    大致写下适配Https时遇到的坑,做完服务器迁移一直通宵到现在,表示无力再多做详解,只放一些常见问题的解决方案吧 问题一.Https请求失败 1. NetManager初始化时可参考如下设置(因为我没 ...

  10. JQuery获取元素类名

    一般而言,JQuery可以利用attr来获取元素的属性值, 1.$("元素").attr("属性");                //获取指定属性的值 2. ...