pwn学习笔记
gdb调试
2024春秋杯网络安全联赛夏季赛复现
比赛那几天忙了做各种各样的课设,加上ciscn刚打完不太想动,所以就纯看看题了(为自己菜找借口)现在缓过来了,就做一下复现吧。
Reserve
Snake
打开软件发现是pygame
12345678910111213141516171819PS C:\Users\Derrick Li\Desktop> python pyinstxtractor.py snake.exe[+] Processing snake.exe[+] Pyinstaller version: 2.1+[+] Python version: 3.8[+] Length of package: 12997948 bytes[+] Found 121 files in CArchive[+] Beginning extraction...please standby[+] Possible entry point: pyiboot01_bootstrap.pyc[+] Possible entry point: pyi_rth_pkgres.pyc[+] Possible entry point: pyi_r ...
Reserve_1
在学习pwn的过程中难免会遇到形形色色的有关逆向的问题,且二进制与逆向互通性相对来说比较高,也可以说逆向是二进制的铺垫,因此,在此栏专门记录自己学习逆向的过程,争取两天一更(但愿自己不会成为鸽子)。
汇编
指令
功能
命令
功能
命令
加法
add
与
and
减法
sub
或
or
乘法
mul/imul
非
not
除法
div/idiv
异或
xor
比较大小
cmp
测试
test
调用
call
返回
ret
系统调用
sysenter/syscall
中断返回
iret
系统调用返回
sysexit/sysret
压栈
push
寄存器批量入栈
pushad
出栈
pop
寄存器批量出栈
popad
普通赋值
mov
单字节赋值
movsb
双字节赋值
movsw
四字节赋值
movsd
取地址
lea
跳转类型的指令
功能
命令
功能
命令
等于转移
JE/JZ
不等于时转移
JNE/JNZ
有进位时转移
JC
无进位时转移
JNC
不溢出时转移
JNO
奇偶性为奇数时转移
...
H&NCTF 2024 Pwn WP
pwn附件下载
close
main反编译出来的伪代码有一个close(1),接下来就直接给shell了
main:
123close(1);system("/bin/sh");return 0;
close(1) 关闭标准输出
close(2) 关闭标准错误输出
exec命令的介绍
1,通过文件描述符打开或关闭文件。
2,将文件重定向到标准输入,及将标准输出重定向到文件。
3,exec命令重新设置了I/O重定向,要恢复为原来的I/O指向,还得需要使用exec命令显示指定。
exec用法:
&n :代表描述符代表的文件。
< :代表以什么形式使用描述符。
exec 8<&2 :描述符8以读取方式打开标准错误对应的文件。
exec &>log:把标准输入错误打开文件log。
exec 8<&- :关闭描述符8。
exp:
12exec >&0cat flag
ez_pwn
这套题和ciscn_2019_es_2高度相似
具体可以参考先知社区的一篇写的非常好的介绍栈迁移的文章
exp:
123 ...
Reserve中常见的加密算法
在做逆向的时候,我们难免会遇到各种各样的加密算法
这次来介绍几种常见的加密算法
RC4
RC4加密算法简介
RC4是一种对称的加密算法,所谓的对称加密算法是指加密和解密使用相同密钥的加密算法,数据发送方利用密钥将明文经过特殊加密算法处理后,使其变成复杂的加密密文发送出去,接收方收到密文后,若想解读原文,则需要使用加密用过的密钥以及相同的加密算法对明文进行解密,才能使其恢复成可读的明文。
RC4算法简单,运行速度快,而且密钥长度是可变的,可变范围为1-256字节(8-2048比特),生成的密钥流的长度和铭文的长度是对应的。在现在技术支持的前提下,当密钥长度为128比特是,用暴力法搜索密钥可能已经不太可行,所以能够预见RC4的密钥范围仍然能够在今后相当长的时间里低于暴力搜索哟密钥的攻击。实际上,现在也没有找到对于128bit密钥长度的RC4加密算法的有效的攻击方法。
RC4主要包括了初始化算法(KSA)和加密算法两大部分。
加密(解密)原理
RC4由伪随机数生成器和异或运算组成。RC4的密钥长度可变,范围是[1,255]。RC4一个字节一个字节地加解密。给定一个密钥,伪随机数生成器接受密钥 ...
Shellcode
shellcode的定义
shellcode是一段用于利用软件漏洞而执行的代码,shellcode为16进制的机器码,因为经常让攻击者获得shell而得名。shellcode常常使用机器语言编写。可在暂存器eip溢出后,塞入一段可让CPU执行的shellcode机器码,让电脑可以执行攻击者的任意指令。
常用指令
得到jmp_esp地址
ROPgadget --binary 文件名 --only “jmp”
123456789Gadgets information============================================================0x080483ab : jmp 0x80483900x080484f2 : jmp 0x80484700x08048611 : jmp 0x80486200x0804855d : jmp dword ptr [ecx + 0x804a040]0x08048550 : jmp dword ptr [ecx + 0x804a060]0x0804876f : jmp dword ptr [ecx]0x08048 ...
BUUCTF PWN3
ciscn_2019_n_3
老规矩
123ubuntu@vm:~/桌面/新建文件夹$ checksec --file=ciscnRELRO STACK CANARY NX PIE RPATH RUNPATH Symbols FORTIFY Fortified Fortifiable FILEPartial RELRO Canary found NX enabled No PIE No RPATH No RUNPATH 90 Symbols No 0 2 ciscn
main
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152int __cdecl main(int argc, const char **argv, const char **envp){ int v3; // eax float ...
BUUCTF PWN2
[第五空间2019 决赛]PWN5
检测文件的保护机制
123ubuntu@vm:~/桌面$ checksec --file=pwnRELRO STACK CANARY NX PIE RPATH RUNPATH Symbols FORTIFY Fortified Fortifiable FILEPartial RELRO Canary found NX enabled No PIE No RPATH No RUNPATH No Symbols No 0 2 pwn
可以发现存在NX保护和Canary保护,关于Canary保护可详见
ctf-wiki
开启 Canary 保护的 stack 结构大概如下:
123456789101112131415 High Address | | +-----------------+ | args | ...
misc加密解密
序言
本文章收集各大ctf的misc题用到的一些常用和不常见的加密解密方式
游戏动漫文字密码
原神文字(原)
isctf-2022-捕风的魔女
标准银河字母(指挥官基恩)
Geek Challenge 2023-下一站是哪儿呢
魔女之旅
jsFuck
在线解密
特征:
主要是以[]!+等符号的形式
正常的一段 JS 代码:
alert(1)
经过 JSFuck 混淆之后的代码类似于:
[][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]]([][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[]) ...
BUUCTF PWN
rip
检测文件的保护机制
123ubuntu@vm:~/桌面$ checksec --file=pwn1RELRO STACK CANARY NX PIE RPATH RUNPATH Symbols FORTIFY Fortified Fortifiable FILEPartial RELRO No canary found NX disabled No PIE No RPATH No RUNPATH 64 Symbols No 0 1 pwn1
打开ida可以看到控制函数在fun函数中
exp:
123456789from pwn import * #pwntools函数导入#sh = ./pwn1sh = remote('node4.buuoj.cn',29452) #连接靶机的服务,需要输入对应的ip地址和端口号payload = b'a'*0xf + b'a ...