前言
这次上海市大学生查了几名没进有点可惜,出题太慢了,放下wp吧
WEB
Decade
跟上次字节跳动的题差不多…….只是过滤的东西有点不同
babyt5
一道安恒月赛原题…………连flag文件名都不改……..
easysql
fuzz发现过滤了union select、or、逗号等等,于是union all select绕过union select,hex(mid(from))代替for和逗号,又发现权限是root,可以用mysql代替information,join代替逗号,最后没有列名的注入,然后脚本盲注
1 |
-*- coding:utf8 -*- |
PWN
boringheap
这题只有0x20、0x30、0x40的堆块可以用,同时程序有个漏洞点:abs整数溢出
利用0x80000000 % 0x30 = -0x20 ,可以实现改写size,从而overlap,从而可以泄露出libc地址,同时实现double free,构造2条double free的链子,一条写入size=0x40,另一条写入伪造的fake_chunk,申请出来,改写topchunk的地址为malloc_hook上方,再次malloc就可以改写成onegadget从而getshell
1 |
coding=utf8 |
login
程序功能就这几个
1 |
---Menu--- |
保护,没开PIE
1 |
Arch: amd64-64-little |
IDA分析可以发现,delete中有uaf
1 |
else if ( password[v1] ) |
在login函数中存在打印函数
1 |
read(0, &s, len); |
那么就可以利用login函数将libc爆出来
利用UAF构造出如图的情况,只要edit 1就能修改0的password指针,再一位一位爆破出来,拿到真实地址后就UAF修改free_hook为system即可
exp如下
1 |
from pwn import * |
slient_note
checksec
1 |
Arch: amd64-64-little |
可以看到RELOR强度只开到Partial,也就是说got 表可改
再来看一下功能
Add
1 |
unsigned __int64 sub_400AEC() |
只能申请两种大小的堆0x28和0x208,而且用calloc,也就是申请后会清空内容,两种大小的块用两个全局变量存放,且都只能放一个
delete
1 |
unsigned __int64 sub_400BCF() |
存在UAF
思路:unlink然后修改got表得到地址,再将free@got修改为system ,free(‘/bin/sh\x00’) get shell
常规unlink,具体操作就不多解释了,exp如下
1 |
coding:utf-8 |
RE
puzzle
这里分析逻辑,化简函数
可以看到需要绕过5层的check,前面三个分别是,输入16个16进制的字符,每两个转成hex,然后将字符转成16进制数值,问题不大,xor可以通过动态调试得到xor的固定值
第一个是0x7D,然后一个个调试出来得到:0x7C,0xAB,0x2D,0x91,0x2F,0x98,0xED,0xA9
所以就是输入的明文异或这些数值加密,得到密文,密文进行了一个sort函数,这里需要爆破出一个排列组合,选择不同的运算方式得到特定值,8个数,10种运算结果,这里直接写个C语言脚本爆破跑一下
1 |
include <bits/stdc++.h> |
接着输入即可得到flag
MISC
签到题
直接拖进去ida然后找字符串,‘Password’,定位到check函数后,F5就可以看到flag了
CRYPTO
RSA
分析一波可以得到
1 |
p+q = 196075640660409986135975784767502028538644025058282395628670981900974958890619954451344723318649578431744942274184506178219307129498083095220609328355931687266846079805131400737270051437647584592782747418213354229728108610925547647805880482097163218511341484311783416306321402379596024705973981708966729752698 |
解个方程
1 |
coding = utf8 |
得到
1 |
p=106559472238507992886893257595935131953388935896627959833031588247260020805443236827178002922192535072027637299082200170640652258414961919417154405674232765071939665000916796219859195238458399706193108146924408124158611736331559842114957778275757663860676776947490183450347232203866189542181859286964311023847 |
最后脚本
1 |
import gmpy2 |
poly
一波分析以后发现居然是个假的加密函数……加密前和加密后的东西没啥区别……
那就直接去十六进制转字符串
poly_rev
分析一波,其实就是多项式的解方程而已……
1 |
import os |
FROM:Xi4or0uji
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论