攻防世界web wtf.sh-150

攻防世界web wtf.sh-150

 

打开环境

攻防世界web wtf.sh-150

 

 

 

第一眼看不出来有什么

随便点一下

 

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

攻防世界web wtf.sh-150

 

 

 攻防世界web wtf.sh-150

 

攻防世界web wtf.sh-150

 

登录了 没发现什么异常

继续点

 

攻防世界web wtf.sh-150

 

 

 

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

这里确实是路径穿越

post.wtf?post=../

攻防世界web wtf.sh-150

 

 

 

有代码,crtl+f  找一下flag

攻防世界web wtf.sh-150

 

 

 

整理一下代码

<html>
 <head>
  <link rel="stylesheet" type="text/css" href="/css/std.css" />
 </head>
 <body>
   $ if contains 'user' ${!URL_PARAMS[@]} &amp;&amp; file_exists &quot;users/${URL_PARAMS['user']}&quot; $ then $ local username=$(head -n 1 users/${URL_PARAMS['user']}); $ echo &quot;
  <h3>${username}'s posts:</h3>&quot;; $ echo &quot;
  <ol>
   &quot;; $ get_users_posts &quot;${username}&quot; | while read -r post; do $ post_slug=$(awk -F/ '{print $2 &quot;#&quot; $3}' &lt;&lt;&lt; &quot;${post}&quot;); $ echo &quot;
   <li><a href="\&quot;/post.wtf?post=${post_slug}\&quot;">$(nth_line 2 &quot;${post}&quot; | htmlentities)</a></li>&quot;; $ done $ echo &quot;
  </ol>&quot;; $ if is_logged_in &amp;&amp; [[ &quot;${COOKIES['USERNAME']}&quot; = 'admin' ]] &amp;&amp; [[ ${username} = 'admin' ]] $ then $ get_flag1 $ fi $ fi
 </body>
</html>

 

里面有一句

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

登录用户admin 就可以得到flag1 

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

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

攻防世界web wtf.sh-150

 

 

 

那就是要继续路径穿越了

post.wtf?post=../users

攻防世界web wtf.sh-150

 

 

看到了我们注册的张三

那admin在这里么

攻防世界web wtf.sh-150

 

 

 

攻防世界web wtf.sh-150

 

 

 

 

 

找到admin

那这些字符代表什么呢

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

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

点张三 用户抓包看看

攻防世界web wtf.sh-150

 

 

 攻防世界web wtf.sh-150

 

 

 

这是token

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

使用token 伪装admin登录

攻防世界web wtf.sh-150

 

 

 

得到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

 

 

 

攻防世界web wtf.sh-150

 

 

 

 

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

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

攻防世界web wtf.sh-150

 

 

 

攻防世界web wtf.sh-150

 

 

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

 

 攻防世界web wtf.sh-150

 

 

 

得到路径攻防世界web wtf.sh-150

 

 

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

攻防世界web wtf.sh-150

 

 

 

攻防世界web wtf.sh-150

 

 

 

得到后一半  149e5ec49d3c29ca}

得到falg

xctf{cb49256d1ab48803149e5ec49d3c29ca}

 

真滴难

 

上一篇:JAVA学习笔记21.12.10(参考黑马程序员B站视频)


下一篇:Java中的ObjectOutputStream类