Pwn出题简单总结
https://www.cnblogs.com/ve1kcon/p/18128333
https://xz.aliyun.com/t/14507?time__1311=GqAhDIqIxUxmx0yx4%2BgrxgQAPi%3Dkf3x
https://cn-sec.com/archives/3119494.html
环境
由于docker的原因,要开启clash的tun和服务模式

重启docker环境之后平台也要重启,容器顺序不一定按修改的先后顺序排列

编译环境
docker是ubuntu的,所以建议在Ubuntu上编译二进制文件,如果没有特定版本就用docker构建
编译特定glibc版本的附件
1 |
|
gcc编译
- NX :-z execstack / -z noexecstack (关闭 / 开启) 不让执行栈上的数据,于是JMP ESP就不能用了
- Canary :-fno-stack-protector /-fstack-protector / -fstack-protector-all (关闭 / 开启 / 全开启) 栈里插入cookie信息
- PIE :-no-pie / -pie (关闭 / 开启) 地址随机化,另外打开后会有get_pc_thunk
- RELRO :-z norelro / -z lazy / -z now (关闭 / 部分开启 / 完全开启) 对GOT表具有写权限
得到特定二进制文件
sudo docker run -it glibc2.23 /bin/bash

sudo docker cp 947e24ecf60a:/app/format_master ~/Desktop/
一般选择直接部署到服务器上,因为本地部署完会出现nc 127.0.0.1 端口 无回显的情况
常见docker命令
docker相关命令都要sudo权限
查看容器:sudo docker ps
停止容器:sudo docker stop 8b
删除镜像:sudo docker rmi e1
进入容器:sudo docker exec -it your_stack /bin/bash
退出容器:ctrl+d
根据镜像创建容器:docker build -t format_master .
GZCTF动态flag部署
https://cn-sec.com/archives/3119494.html
https://skynionkrz.github.io/2024/08/22/%E5%87%BA%E9%A2%98%E6%B5%81%E7%A8%8B/
echo ghp_ZcmbShK0PitZqOfHDF…… | docker login ghcr.io –username j1ya-22 –password-stdin
docker tag format_master ghcr.io/j1ya-22/format_master:latest
docker push ghcr.io/j1ya-22/format_master:latest

比赛没开始的时候得到的flag
实际效果

平台开启测试容器,服务器就能生成有后缀的对应容器


遇到的问题
glibc_xx not found
用kali22的gcc编译得到的二进制文件需要glibc2.34,但是dockerfile默认是ubuntu16
在本地搭一个特定版本的docker来编译二进制文件
./执行no such file
题目本身需要libc文件加载,不然无法在远程运行

把libc.so.6文件(实际lbc-2.23.so)放到和二进制文件同一目录,其他如ld-2.23.so都不需要
远程函数真实地址随机
puts等函数真实地址不一定是0x7f开头,但如果是0x7c等开头也能打通,主要是地址随机化的缘故
需要关闭系统地址随机化bash -c “echo 0 > /proc/sys/kernel/randomize_va_space”
