xman 2018夏solo题


http://t.cn/RDNm7Mb

Web

Makeit

在这里插入图片描述
打开页面发现在URL里有page包含参数,应该是a文件包含,后面再验证下,然后看到下面,说开发时用到了 git , PHP ,bootstrap ,这个git字眼,要引起重视,可能存在git源码泄露。
那就先试试,
在这里插入图片描述
在原路径下加上 .git/ ,果然读出来了,那我们用githack 把源码下下来看看
下载地址:https://github.com/lijiejie/GitHack
然后cd 进入githack-master的目录
python GitHack.py http://xxxxxx/.git/
就把源码下到了 githack 下的以站点命名的文件夹
点开发现有个flag.php,因为是git的模板所以这里应该并没有放flag的值,到这里就可以想到文件包含读取flag.php的内容。
然后我们读源码,index.php
在这里插入图片描述
这里有个strpos()函数,查找字符串在另一字符串里第一次出现的位置
在这里插入图片描述
assert()函数中的为字符串所以把字符串当做PHP 代码来执行,表达式是否成立返回TRUE or FALSE
*经常看到这样的语句:
f i l e = f o p e n ( file = fopen( file=fopen(filename, ‘r’) or die("抱歉,无法打开: f i l e n a m e " ) ; o r 在 这 里 是 这 样 理 解 的 , 因 为 在 P H P 中 并 不 区 分 数 据 类 型 , 所 以 filename"); or在这里是这样理解的,因为在PHP中并不区分数据类型,所以 filename");orPHPfile既可以是int也可以bool,所以这样的语句不会报错。但其处理过程可能有些朋友不大明白。
其实在大多数的语言中, bool or bool这样的语句中,如果前一个值为真后一个值就不会再判断了。这里也是的,所以如果fopen函数执行正确的话,会返回一个大于0的int值(这其实就是“真”),后面的语句就不会执行了。如果fopen函数执行失败,就会返回false,那么就会判断后面的表达式是否为真了。
结果执行了die()之后,不管返回什么,程序都已经停止执行了,并且显示指定的出错信息,也就达到了调试的目的。
就这样。 *
所以当前面的get传进的page参数中如果含有 ” … “,那么前面的strpos()函数就返回一个出现的位置,等式就不成立,那么执行or 后面的语句 die()。
因此看到这里有assert()可以代码执行,
因此构造一个payload, sa' , 'a') === false") or system("cat templates/flag.php");//
看起来这个payload perfect ,首先把strpos()的单引号闭合,然后呢就判断FALSE,执行后面的系统命令,把templates下的flag.php打印出来,后面的都给注释了
但是呢,输入发现payload不起作用。求大佬讲解后,明白了这个原理:
从代码层来看, 插入的数据// 本来是一个字符串,就是不具备注释作用的,但是assert函数对这个字符串做了代码执行 //才有了注释作用 所以这两个的执行是有先后顺序的 只有 assert闭合合法//才能发挥作用,所以输入的 " ,并不能闭合,也只是当做字符串所以就是并没有闭合,
所以就这条语句不能执行后面的系统命令,没办法闭合assert(),无法对===FALSE判断,
构造一个新的payload sa' , 'a') or system(" cat templates/flag.php ");//
补全之后就是,assert(“strpos('sa' , 'a') or system("cat templates/flag.php");//','..') === false") or die(".......) 这里就是strpos函数返回一个非FALSE的值,自然后面的system函数就不会执行,所以想在这个assert函数执行后面我们自己的命令就可以换一个逻辑用 and 或者在strpos里换一个字符串使得返回的是FALSE,因此这个payload有多种,
还要考虑此题有两个assert断言函数,因此在下面那个file_exists()里也可以执行我们想的命令。
总结:
1.此题为git泄露加源码审计加代码执行,所以要对能执行特定代码或系统命令的函数在审计时应该特别关注,弄清楚参数传递时的具体流程,当触发点有多个时搞清楚是哪个触发点我们需要利用,还是需要联合利用触发。
2.对参数中的特殊符号需弄清楚是否有特殊含义,还是只是字符串,比如// 注释符,“ 引号等是否有闭合的功能

MISC

XMAN通行证

放题后惊喜发现,这应该是道签到题。

拿到通行证才开始王者之路,相当于签了到就开了征途。好吧,暂且相信。下载后就是一个TXT文本,明显里面是一个base64编码的字符串,
在这里插入图片描述
直接解码
在这里插入图片描述
好了,到这里啦,就开始后面的疯狂实验。
首先这个不符合flag的常规格式,一般的大括号都应该在最后出现,这让我们想起了栅栏密码,不妨一试,这一试就一上午过去了。
最后得到这么几个还过得去的
在这里插入图片描述
然而,并没有发现有哦什么,然后真的是无助了。
这里发现了一个新大陆,国内和国外的栅栏竟然不一样,
http://www.practicalcryptography.com/ciphers/classical-era/rail-fence/
http://ctf.ssleye.com 这个解密工具也是根据国外的栅栏算法进行的
在线解的栅栏网站,国外的栅栏式“ V ”型进行解密,而国内一般是矩形的排列
在这里插入图片描述
7个作为一栏,然后在底部的是两栏共用,最后按照行从左至右的顺序进行加密
所以加密后的结果就是 kzna{blnl_abj_lbh_trg_vg}
变换成了类似 flag{} 的形式,然后想着凯撒解密
get。
PS:
此题的知识盲区就是对栅栏密码的了解只在矩形形式上,国外哪种V型不了解,而且是用其进行加密,以后遇到类似的可以试着不一定是解密,也可能是加密。

FILE

下载下来后是一个img镜像文件,听大佬说一般此类题是文件恢复,首先在Ubuntu里用file命令查看下文件类型
具体的参数参考:http://man.linuxde.net/file
在这里插入图片描述
发现只有一个ext4的数据包
这就得恢复看看,这里提到一个工具extundelete 一个恢复工具 https://www.cnblogs.com/yuhuLin/p/7027253.html
在这里插入图片描述
extundelete -- restore-all task_file.img执行这个命令恢复然后会生成一个RECOVERED_FILES文件夹里面存放着恢复的文件
cd进去,查看文件 ls -al查看当前所有的文件和文件夹包括隐藏的
在这里插入图片描述
发现有个jpg文件 ,查看
在这里插入图片描述
get。
总结:主要是一个文件恢复的操作,这个恢复工具Windows上需要装diskgenius,比较麻烦,建议在Linux里装直接apt-get install了就好了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值