题目给了一个html5网站。表面是静态页面,通过扫描器发现有php文件。并且发现admin.php后台管理入口。但是访问后提示不是管理员。此外还有config.php文件(访问为空)。
同时扫描发现备份文件.DS_store,但是用工具恢复后发现template文件里admin.html文件,里面有php代码可以命令执行,但是并能实际执行命令。
前端静态网页有目录遍历,但是不能进行目录穿越。
入手点应该在cookie。进入主页时通过抓包就应该发现cookie有一个user段
经过base64解码为user=user。于是尝试改为admin并编码提交会自动跳转到admin.php。然后有一个命令执行。
利用linux中$IFS代替空格的小技巧执行命令获得flag
陷入的误区:
1、对于cookie内容不注意,认为是一般字段
2、过于依赖扫描器,比如虽然扫到了admin.php,只顾对这个文件自身的操作。
3、另外直接从admin.php抓包修改cookie再重放并不能进入后台,必须要从其它界面跳转时cookie就已经修改好了才能成功。
下面研究一下原因:
直接访问的请求包
1 | GET /admin.php HTTP/1.1 |
正常浏览跳转的请求包
1 | GET /admin.php HTTP/1.1 |
二者就差在一个字段:Cache-Control:max-age=0
当把第一个加上这个的时候就可以了。原因就在于 这个字段控制缓存,而cookie存在cookie里,max-age=0 则是使缓存失效,也即执行我抓包修改的cookie而不是前一个界面的cookie。
直接访问admin.php改包失败就是因为之前已经有缓存cookie了,我们的改包并没有生效。