pwn_waf使用教程
下载与设置
首先将其源码下载下来或者git clone下来到本地pwn_waf
需要修改的地方是makefile文件,我们要修改日志存放的位置,这边推荐的位置就是在pwn题目的目录下创建一个隐藏文件夹(以点.开头的文件夹名称)。也是为了避免和下面注意一样的坑。
注意:这里的LOG_PATH路径设置有个坑,这里的路径设置跟xinetd配置文件设计的方式有关
service ctf
{
disable = no
socket_type = stream
protocol = tcp
wait = no
user = root
type = UNLISTED
port = 9999
bind = 0.0.0.0
server = /usr/sbin/chroot
server_args = –userspec=1000:1000 /home/ctf ./pwn
banner_fail = /etc/banner_fail
per_source = 10
rlimit_cpu = 20
}如果配置文件与上述类似,这种就是通过/usr/sbin/chroot启动,将文件活动的根进行了一个更改,上述就是默认的初始路径为
/home/ctf
,且只能操作该目录下的文件(不要企图用../,这个玩意不行!不行!),所以在配置路径时,要以/home/ctf
拼接进行配置,假设LOG_PATH=/home/ctf/.pwn_waf,则最后日志写入的文件位置为/home/ctf/home/ctf/.pwn_waf
,然后又由于没有创建该文件,导致最后nc连接时回出现Open log [/tmp/.waf/13_57_07_36de8.log] file failed!
错误个人发疯:就是这个破问题,浪费了差不多三天的时间,最后突然悟了想着试试,顶不住了(希望不会有人也是因为这个问题浪费时间)
编译与利用
编译流量监听的程序,这里只编译流量监听部分。如果有需要拦截转发等功能的可以在自行编译,这个流量窃听在我看来是比较有用的。
1 |
|
然后就会在项目当前的文件夹下得到一个catch
文件,这个文件会实现流量监听功能,同时还会保证原pwn题服务;
对于这个保证原pwn题服务是怎么实现的呢,经过最后方法实现的猜测:(原pwn文件要放到日志目录下,并改名为
pwn
)首先是这个catch文件监听nc连接,然后将连接的数据转发到原pwn程序,得到返回值返回到连接的用户中
然后我们将该catch
文件传到部署pwn题的服务器上(哪个目录下都行不碍事,可以的话就先放在待会写日志的那个文件夹下),先保存下来原来的pwn题目文件(可以放到本机上,放置后面因为误删导致各种问题);
1 |
|
然后我们用catch
文件来替代原来部署的pwn题目,并改名为原来的pwn题目程序的程序名称
1 |
|
然后再在存放日志的文件夹中,复制一份源pwn题程序并改名为pwn(这是为了让catch
能找到原来的pwn题目)
1 |
|
至此,其实工作就已经完成了。
其实到这里还不算完全结束,对于像上述注意事项的那种pwn题目部署方式,在本地进行测试时,还需要创建一个文件夹,即LOG_PATH
对应路径的文件夹,因为在服务器的本地,根路径还是根路径,只有通过nc连接的时候根路径才会修改为/home/ctf
,所以我们还要创建一个文件夹,并将程序的源文件复制到相应的文件夹并改名为pwn才行。
去测试一下新pwn程序(catch改名的那个程序能不能运行),成功运行后,打开日志填写文件夹看看有没有记录流量。
如果以上都成功了,接下来才是重头戏,nc连接测试,只要相应文件夹有日志就成功了。