<p>password字段如果存在特殊字符,在传入到程序时仍然会被转义,而且在phpsso的login中使用的是username做数据库查询,而不是password。</p><p>针对第一个问题我们可以使用二次url编码的方法来搞定,在解码之后程序还是用了parse_str对字符串进行了拆解,而这个函数还附带了解url编码的功能。所以,我们只需要在传password内容时传递%2527就可以让单引号出现在phpsso的变量中了。</p><p>第二个问题也用到parse_str的功能,parse_str在解析“username=123&password=456”这样的字符串,会把它解析为:</p><p>Array(</p><p> username=>123,</p><p> password=>456</p><p>)</p><p>那么如果被解析字符串变成“usernamen=123&password=456&username=789”,他就会被解析为:<br></p><p>Array(</p><p> username=>789,</p><p> password=>456</p><p>}</p><p>那这样我们的利用思路就有了:将”&username=”进行url编码后作为password的值用于在phpsso中覆盖之前的username值,在“&username=”后面添加进行两次url编码的SQL语句,构造出来的POST数据如下:<br></p><p>usernmae=phpcms&password=%26username%3d%2527<br></p><p>然后就可以利用了.</p>
暂无评论