班级对抗赛write up


十年饮冰,难凉热血。

前言

已经很久没有更新了,这个比赛的wp本来一直说要上传上来的,但是后来每周都是考试,就一直拖着。emmmm,还有就是,因为这学期get了印象笔记配合马克飞象,有时候有些想法就直接写在印象笔记里面了,没有直接传到博客上。这学期发现自己莫名喜欢上数据结构,接下来有时间就把一些整理的数据结构的知识整理上来好了。嘻嘻嘻嘻~这学期还不赖,和好多大佬友链了!!!!哈哈哈哈哈哈哈哈~

说明

这个比赛形式是每个班出队伍进行比赛的,一队伍三个人,比赛时间是11.25,所以真的过了好久了。

队伍名称、队伍成员

队伍名称:facker (哈哈哈哈,我不会说这个名字是我取的)
队伍成员: P4aw_N、M3tar、shEr0

解决题目

解决题目:
RE:送分题、pwnfun、爆破
misc: 签到、热身upupup、计算题哦、芬奇的日记、RRRSA
web: web1、送分代码审计、web2、Amazing magic、Love China、加0题

解题思路

Re

1.送分题

下载下来,扔到od,因为是送分题,也不想太复杂,搜索一下ascii,看到一串base64


flag:D0g3{Re_1s_v3ry_ea5y!}

2.pwnfun

根据题目所说一个很简单的栈溢出,开始以为是写shellcode之类的利用,后来发现出题人心软了
直接用ida反编译查看如下:

溢出点很明显,变量v4距离rbp为0x88个字节,却读入了0x100个字节
emmmm
开始的想法是写shell code利用,因为泄露栈地址很麻烦,得不到shellcode的地址,所以不行,很头大
后来,看ida发现出题人心软了,给了一个函数good_game

所以就很简单了,栈溢出控制返回地址,进而控制rip跳转到good_game函数执行即可
exp如下

from pwn import *

HOST = '222.18.158.244'
PORT = 2333

payload = 'a' * over_len
payload += p64(buf_addre)

io.recvuntil('Input your message:\n')
io.sendline(payload)
io.interactive()

3.爆破

运行文件,Admin已经给出了,应该是获取文本框内容然后比对即可

题目给出爆破的提示,老老实实爆破
找到关键的流程处

往下执行,将全部跳转改到指向成功的函数那即可得到flag
D0g3{Winner_Winner_Chicken_Dinner!}

web

1.web1

进去直接源码出来,
看到最后一行,eval(“var_dump($$args)”) 可变变量,传一个全局数组变量。args=GLOBALS

2.送分代码审计

看源码啥也没有,考虑源码泄露。而且源码里面base64也提示了


down下来,看到源码的意思是$flag1 && $flag2 && $flag3 都为真,就可以出flag。那本地调试一下。构造出payload:
http://45.32.90.22:2501/index.php?name=xiaohong&&sex=nv&&key=240610708&&pen=240610708&&apple=QNKCDZO
这里源码中考察了php弱类型,=====的区别
这里
因为出现了比较,而在0e中是读取的科学计数法,构造出来的key的md5也是0e就ok,故构造$key = “240610708”;
下面 同理构造。
payload如上,

这里给一个学习php弱类型的网站:

https://www.cnblogs.com/Mrsm1th/p/6745532.html

3.web2

这里看到源码,strlen可以通过%00来截断绕过,id==0 随便测试传个值,b需要绕过eregi 用00截断 data通过使用伪协议绕过stripos
payload:

4.Amazing magic

post随便传个值后在页源码中发现一句提示


接着post key=source

得到源码,源码要让number==14598366 但是字符并不能相同,所以这里想到通过转换进制 使用两个进制进行比较 把14598366转换为16进制得到0xdec0de
所以key=0xdec0de

5.Love China

这个题要点100万次,可能不行。这里本来是想会不会有什么脚本可以跑。但是,看了一下F12。改js啊,修改clicks的值,抓包,传一个大于1000000的值,就出来了。

6.加0题

页面给出robo.txt提示
访问

url编码,传输过去后会被默认解码一次,所以将jia0编码两次,再传入就可以得到flag

Misc

1.热身upupup

音频隐写,没有密码提示。直接扔Au

摩斯电码:..- ..- ..- - ..- - ..- ..- -

D0g3{UUUTUTUUT}

2.计算题哦


长度被限制,直接改一下length
出现的弹窗,base64解码

3.芬奇的日记

下载下来是一张png图片,先放到kali看看能不能分离

发现有两张png图片,那么就dd分离

得到了一张二维码的图片

用stegsolve打开调制Gray bits得到二维码

然后扫描得到下面的一串编码

Base64解一下得flag

4.RRRSA

首先还是要学习一下RSA算法是什么,下面贴一下学习的地方。

http://bobao.360.cn/learning/detail/3058.html

在这里主要思路就是先通过n计算出p,q,通过p,q再计算出d,之后就可以求出m。
就在我上面贴的网址里面有可以求出p,q的值的网址。

解出来p,q的值。

写一个py脚本跑一下d的值。

def egcd(a, b):
    if a == 0:
        return (b, 0, 1)
    else:
        g, y, x = egcd(b % a, a)
        return (g, x - (b // a) * y, y)
def modinv(a, m):
    g, x, y = egcd(a, m)
    if g != 1:
        raise Exception('modular inverse does not exist')
    else:
        return x % m

p = 17
q = 40945572069996101
e = 65537
d=modinv(e,(p-1)*(q-1))

print(d)

跑出来d的值。

继续写一个脚本,出m的值。这里因为学艺不精,只能一直修改c的一行一行的值来解密。

c=185467894761485820
d=232174645015238273
n=696074725189933717
m=pow(c,d,n)
print hex(m)[2:len(hex(m))-1].decode('hex')

这里c的值,要一行一行的换


这里就贴一部分了,最后解出来,就是这样。