strange_php | 复现
差一步但也差亿点啊,这个pop链是真没有想到,还得练意识
- 一眼应该是反序列化?
- 是password_hash创建的密码
- 可能考点
- 有文件覆写phar?
- 有session,反序列化?
- 有sleep竞争
- login处进入welcome.php
- login处重置了session为user_id
- 切入点好多,得慢慢看了
- 关于session反序列化,user_id其实是不可控的,可控的只有username,session中存有user_id和file_path
- 思路的切入在于可控点和利用点
- 可控点
- deleteMessage中的path
- User中可以通过控制username来写入log/md5(username).txt文件,main函数结束后调用__destruct
- 利用点
- 应该是在welcome.php中
- 可控点
- 尝试
- 注册用户admin,报错,有重复的用户,不错,这里也没有权限控制需要用到的,不管了,admin:admin,emm,居然进了,但是不是考点;接下来就是welcome.php中的利用点了
- 这里有一个file_existed在delete处,而且也完全可控,打phar?那么利用点在哪里?有一个__set()可以读取文件?readMessage()中也有阿?
- however,__set()处是可控的
- 找pop链子了
马萨卡还要套一个session反序列化吗?这个__set还要指定是filePath,找不到了555
看看gxngxn的
- 注意最后是直接访问即可,因为是./不是/
1
2
3
4
5
6
7
8
9// 利用pdo设置pop链,很强大gxngxn
User->__destruct()
User->log()
User->conn->get_connection()
UserMessage->__set(...)
// 可以成功读取到/flag文件
// 写入后delete触发
// 随后访问一下./log/md5(username).txt即可
Summary
- session_start时进行加载?