v4.6.6 11月28日 phpmywind发布的版本 不知道现在发布新版本了没。
用这渣渣洞 帮XX机油拿了个证书。 机油我爱你。 证书到手了, 也就准备写出来了。
Phpmywind/member.php
这个xss略显鸡肋。 没多研究。。 要在会员列表里面点详细才可以。
然后看了下get_ip 函数 但是最后对ip的合法性做了验证。
继续看看member.php
$link 就是referer 可伪造。
并且带入了查询当中$dosql->ExecNoneQuery(“INSERT INTO `#@__userfavorite` (aid,molds,uid,uname,link,time,ip,isshow) VALUES
(‘$aid’,'$molds’,'$uid’,'$uname’,'$link’,'$time’,'$ip’,’1′)”);
跟进。
先把语句给了setQuery
获取表前缀 然后替换语句中的前缀。
然后赋给querystring
关键就是下面的语句检查了。
这个很明显就是dede里面内置的防注入的
也就是由80sec提供的。
不过这个已经被大牛们绕过了。
貌似是把单引号里面的内容都替换成$s$?不太懂
引用下大牛的话把: 这里可以设置title为如下代码,一方面绕过ids防注入代码检测,另一方面加一个#注释掉后面的代码,但是还要做一下变形,就是这个 char(@`’`)了。因为#@__feedback的所有字段都被设置为NOT NULL,而@`’`是一个变量,默认为NULL,直接插入@`’`的话会报错,所以需要以char(@`’`)的方法转换一下。
的确加了char(@`’`) 就没被拦截了。。
先构造一下语句
然后加上char(@`’`)
注入成功。
无视magic_quotes_gpc
因为 magic_quotes_gpc 只对 Get post cookie的传递过来的特殊字符转义。
______________________________________________
老版本的phpmywind的后台 太好getshell了。
因为模版可以直接编辑php 文件 但是现在不行了。
这里可以修改 但是黑名单中有php 添加了php还是不能上传
但是还有Cer cdx asa phtml php3 ……&
________________________________________________________________________________________________
另外一种方法是借鉴了raindrop兄弟的那dede的后台另类拿shell的方法。
我用我的理解来说说把。 没怎么学过php,, 不知道说得错误多不多。。
经常可以看到各种后台配置插马儿。
但是现在一般都用单引号引起了。 也不乏有一些双引号引的。。
如果是双引号引的 就利用双引号的二次解析就更容易拿shell了。
单引号呢 有时候闭合后还是能拿shell 但是受gpc
不过现在有些cms 就像 phpmywind dede 这样的
添加了再多的单引号
配置文件也依然这样 raindrop思维很活跃啊。巧妙的利用单行注释多行注释 和 转义符。
不知道为什么 我在phpmywind 后台里面 写一个 或者 写两个 在配置文件里面都是空的
写三个里面才有了一个
Raindrop 还说要把第一个单引号注释掉 就是 ‘//’
因为不能直接注释掉 所以要先转义。
但是我觉得不需要额, ’ 已经不能用来闭合了。
第一行就是转义第二个单引号, 然后第一单引号和第三单引号闭合了。 然后结束语句。
然后利用多行注释 注释掉4 5 单引号, 然后再单行注释掉phpinfo(); 后面的第6单引号
然后 phpinfo() 就无单引号了。
因为magic_quotes_gpc 是会对 转义的嘛
可是当magic_quotes_gpc 为on的时候还是可以拿
Lengai兄弟也说得很清楚了。
function ReWriteConfig()
{
global $dsql,$configfile;
if(!is_writeable($configfile))
{
echo “配置文件’{$configfile}’不支持写入,无法修改系统配置参数!”;
exit();
}
/*
以写的方式打开一个文件。接着从数据库里面查找配置,在写到文件里面。
*/
$fp = fopen($configfile,’w');
flock($fp,3);
fwrite($fp,”<”.”?phprn”);
$dsql->SetQuery(“SELECT `varname`,`type`,`value`,`groupid` FROM `#@__sysconfig` ORDER BY aid ASC “);
$dsql->Execute();
while($row = $dsql->GetArray())
{
if($row['type']==’number’)
{
/*
如果为数字的情况下,就直接写到文件里面。
我本以为找到数字类型的,直接写入代码(类似’;phpinfo();//),可惜找了几个都没找到。
本以为放弃了,结果后面无意间发现了一个可以利用的地方。
*/
if($row['value']==”) $row['value'] = 0;
fwrite($fp,”${$row['varname']} = “.$row['value'].”;rn”);
}
else
{
/*
如果类型为文本的话 他会自动去掉单引号,在自动加上单引号。
其实这样的思路是没啥错的,可惜现在人们越来月淫荡了。所以他还是有个地方错误,他忽略了转义符()
*/
fwrite($fp,”${$row['varname']} = ‘”.str_replace(“‘”,”,$row['value']).”‘;rn”);
}
}
fwrite($fp,”?”.”>”);
fclose($fp);
}
这个phpmywind跟dede还是挺像的 这里要fputs个马儿才行。 不能直接连接配置文件。