2024rois-wp
pwn
tryc
很简单的 运行getshell
easy_backdoor
很简单的栈溢出
程序中明显栈溢出漏洞
直接溢出到ret
然后程序中有个后门
就直接getshell
有个踩雷点就是要得返回这个地址
不然堆栈会出错就嘎嘎报错,别问我怎么知道的/(ㄒoㄒ)/~~
1 | from pwn import* |
backdoor2
这道题也是栈溢出,但是很难看出来
调试就很好看出来
脑洞很大
依靠的是
溢出这个.com
然后有溢出思路,因为溢出空间是足够的,所以可以算出刚刚好溢出到ret上是win地址(也可以试出来)
1 | from pwn import * |
ret2shellcode
这道题思路并不难,只是难构造
看程序一个注意canary以及栈可执行 之后要用到
看主程序有个sandbox说明是沙盒检查一下
这就是最恶心的地方,不让onegadget,要自己构造orw烦死人了
更烦人的是是scanf
而程序有个无限scanf,说明有栈溢出,但是又有Canary
因此要绕过Canary,而scanf有个特性(mc十年老玩家了),是输入+-之类的并不会占用缓冲区,因此不会占用栈,就不会碰到Canary,就是实现了绕过
然后学长还在程序留了一点东西
这样就能溢出到这个放ret上
然后就会在栈上执行程序
就可以构造orw这也是最恶心的地方
1 | from pwn import * |
有注释的地方需要特别注意就是这个地方是push 0,因为这个flag后面要有个\0才能读取,只能说难绷
for1
很简单
flag就在栈上
一个%n$s就有了
for2
这道题首先的思路就是连续覆盖两个栈,就可以覆盖返回地址,但是因为aslr导致栈地址不确定,因此我们要先泄露栈地址,我们发先rbp上的值与返回地址的差距为定值,因此泄露该值得到返回地址,之后再取低两位,但是这个不一定,只是比较方便,正确的应该是低四位,而低两位可以解但是可能会不通,多打几次即可
CRYPTO
Matryoshka doll
1 | \u004d\u0048\u0067\u0031\u004d\u006a\u0052\u006d\u004e\u0044\u006b\u0031\u004d\u007a\u0064\u0069\u004e\u006a\u0067\u0030\u004d\u0044\u0063\u0032\u004d\u007a\u004d\u0030\u004e\u006a\u0063\u0031\u004e\u006d\u0055\u0032\u005a\u0054\u0064\u006c\u004e\u0032\u0055\u0033\u005a\u0041\u003d\u003d |
看名字俄罗斯套娃一看就很多层
然后这个是Unicode 解码之后就是
1 | MHg1MjRmNDk1MzdiNjg0MDc2MzM0Njc1NmU2ZTdlN2U3ZA== |
后面又== 是base64的特征 解码之后就是
1 | 0x524f49537b6840763346756e6e7e7e7d |
一看就是ASCII码
1 | ROIS{h@v3Funn~~} |
keyboard
1 | UWFzZSBXc0RSIHBPayBYZGZ2IElLbFAga0puIFdzRFIgUmZHeSBJS2xQIHJmZ1kgeWdCaiBXc2RSIFhkZlYgWlNRIE5qayBPTA== |
一眼base64
1 | Qase WsDR pOk Xdfv IKlP kJn WsDR RfGy IKlP rfgY ygBj WsdR XdfV ZSQ Njk OL |
看题目说是键盘那说明跟键盘有关
这串代表在键盘上围着的字母
1 | welcometothecamp |
看题目说要capital
1 | ROIS{WELCOMETOTHECAMP} |
web
vue-terminal
跟着提示走就flag了
ez_maze
鼠标放重点 按enter键 秒了
re
Easy_Find
Replacement
Easy_Crack
程序有个死循环 nop掉再运行就getshell