【CTF】UTCTF2025 wp

admin 2025年3月18日18:29:52评论34 views字数 11645阅读38分49秒阅读模式

介绍

在网上偶然看见的比赛,这里简单分享一下,

本比赛是由德克萨斯大学奥斯汀分校的信息与系统安全协会团队举办

【CTF】UTCTF2025 wp

Misc

Trapped in Plain Sight 1

ssh连接,密码为password

【CTF】UTCTF2025 wp

查看当前目录,有个flag.txt文件,赋予权限发现需要系统命令

【CTF】UTCTF2025 wp

先看看suid,发现一个xxd命令,没见过

【CTF】UTCTF2025 wp

谷歌查看后发现xxd是一个十六进制转储工具,常用于:

  • 查看二进制文件的十六进制内容。
  • 将二进制文件转换为可读的十六进制格式(或反向转换)。
  • 调试和分析文件结构。

这里直接查看该就拿到了flag,utflag{SpeciaL_Permissionz}

【CTF】UTCTF2025 wp

不过既然可以利用,就提权一下吧,ctfobins查看一下

LFILE=file_to_read
sudo xxd "$LFILE" | xxd -r

因为sudo命令无法使用,提权不成功

【CTF】UTCTF2025 wp

Trapped in Plain Sight 2

先看一下描述

【CTF】UTCTF2025 wp

常规信息收集,没有什么利用信息

【CTF】UTCTF2025 wp

在根目录下发现启动文件

【CTF】UTCTF2025 wp

了解一下

  • setfacl:设置文件访问控制列表(ACL)。
  • -m:修改文件的 ACL 规则。
  • u:$SECRET_USER:r:
    • u:表示用户(user)。
    • $SECRET_USER:环境变量,代表目标用户名(如 alice)。
    • r:授予读(read)权限。
  • /home/USER1是环境变量(如/home/bob/flag.txt`)。
#为指定用户添加对文件的读权限
setfacl -m u:$SECRET_USER:r /home/$USER1/flag.txt  #
unset SECRET_USER #清除变量值
unset USER1 #清除变量值

在/home文件下发现一个新用户

【CTF】UTCTF2025 wp

这里猜测可能需要利用新用户来读取,hunter2可能是密码

【CTF】UTCTF2025 wp

登录该用户,找到flag, utflag{4ccess_unc0ntroll3d}

【CTF】UTCTF2025 wp

Crytpo

RSA

下载附件,是低指数加密攻击

【CTF】UTCTF2025 wp

直接利用脚本求解

import gmpy2
from Crypto.Util.number import *

defrsa_small_e_attack(ciphertext, e, n):
# 计算e次方根
    m, exact = gmpy2.iroot(ciphertext, e)
# 检查结果是否为精确的整数解
if exact:
return int(m)
else:
returnNone
# 数据
n=21507386633439519550169998646896627263990342978145866337442653437291500212804540039826669967421406761783804525632864075787433199834243745244830254423626433057121784913173342863755047712719972310827106310978325541157116399004997956022957497614561358547338887866829687642469922480325337783646738698964794799137629074290136943475809453339879850896418933264952741717996251598299033247598332283374311388548417533241578128405412876297518744631221434811566527970724653020096586968674253730535704100196440896139791213814925799933321426996992353761056678153980682453131865332141631387947508055668987573690117314953760510812159
e=3
c=6723702102195566573155033480869753489283107574855029844328060266358539778148984297827300182772738267875181687326892460074882512254133616280539109646843128644207390959955541800567609034853

# 执行攻击
plaintext = rsa_small_e_attack(c, e, n)

if plaintext isnotNone:
    print(long_to_bytes(plaintext))
else:
    print("攻击失败,无法直接从密文中恢复明文。")
# utflag{hmm_maybe_bad_idea}    

DCΔ 直流δ-单

思路:单素数RSA

题目给了n,c,e三个数

n = 399956368360808862373914258335185223080849636197711424060797090309268643429064461492550414549161330948819635837600839124910339139212025975705016633767495247163243281423582407941339197895052969960664399531226116807938480610953640675838340969642399505783577667601230289640157854573282615113017817753471366212008719316238931155299741896658264134636523008018510523774126757209492757800553768281613227711738371473830681563493341816035127889532515105148615575695347672918819305383651095344758737833444302556494599778991752161562622963652164008980839152347260377969421014616624263631920322958235478733540894255954351848359580013695597870908080170511403061620632540407634608773118202473287854599776791229532885611074739079107324575619148211269673210431496846247978541032947073060592123529635361112170678347924377962162254827262375685704046691718585952854410058401794022674628779309507437739620598639589987596443373586284136126401843497367142210715014480599609277532331148988390798073713743339823218981940779096432112651466716648010370850152213399051968069102663753404120592506704133217642671853086570223710424683386625314802805217882906873879240914022607713870946351691046929143491841506422542038315876506588525639983398522454145866029283449
e = 65537
c = 22644125297186385803212285721101686380290089858624593588464228942417644877688212364383835956263619653769244324906844180248816686517049952319431524113838480708352331162026595736354019259708442449783760846242702532176456117138374450898213788623580234048867117546091028843127595147910526821835855070663317466469650577618010308109119812464711010326075908158768138773973732088207030977470605554056485614676156104134673446546446752627654287202815354367643042773923258958887865030737447323798382020847653880886311162447594373201951226217556835030816588457674298560260109378271244834215832992407457137601161490484862135147963942227371690835380497920998286827898323068399708168699403459009009580152834747843780155917438758224782364193716322974594031272100820264364860227674838730962348140555980411714722361909800417953974064469599278274083750031569853934963716467881656073359393449142980936480726005445774158733389270553554093627622406166942859792490275434896108377393648278975530519769034633686070931694499857110956537102727286491854314244036392929790997824274724196292688659782806587688964714529943288954314300861531138101192901942534064757877725334672680909389193357725470116673323012331269218651347104807494994267835408427908717684178629

根据题目提示,可能就一个素数

【CTF】UTCTF2025 wp

在该网站分解https://www.alpertron.com.ar/ECM.HTM,点击factor即可

【CTF】UTCTF2025 wp

或者调用yafu分解n

.yafu.exe "factor(x)"#x是待分解的数
【CTF】UTCTF2025 wp

成功分解,可以看到p,q值相同

p=19998909179272975096669389773315684909164840476930738123591959958398932097041125093572976768403454709172312115056676217567714135065584289066946488822717110035175886060013869752746528110783649242456127578482532542251448083935376109090114352728675578298146585186423055045769485483629739528100502325926126065585392531444778435555737739407677466146189470978162623830003195010534137805929579970953953819006507688647292456336763899513727791292581312482817948726557865657118159131434894505604528936556072666055920148673374873823318296419969165536109100159362271450418965389139196396590576777869148638544055146306458627451893
【CTF】UTCTF2025 wp

由于pq值相同,故为单素数RSA,利用python代码求解即可

import libnum
import gmpy2
from Crypto.Util.number import *
import math

n = 399956368360808862373914258335185223080849636197711424060797090309268643429064461492550414549161330948819635837600839124910339139212025975705016633767495247163243281423582407941339197895052969960664399531226116807938480610953640675838340969642399505783577667601230289640157854573282615113017817753471366212008719316238931155299741896658264134636523008018510523774126757209492757800553768281613227711738371473830681563493341816035127889532515105148615575695347672918819305383651095344758737833444302556494599778991752161562622963652164008980839152347260377969421014616624263631920322958235478733540894255954351848359580013695597870908080170511403061620632540407634608773118202473287854599776791229532885611074739079107324575619148211269673210431496846247978541032947073060592123529635361112170678347924377962162254827262375685704046691718585952854410058401794022674628779309507437739620598639589987596443373586284136126401843497367142210715014480599609277532331148988390798073713743339823218981940779096432112651466716648010370850152213399051968069102663753404120592506704133217642671853086570223710424683386625314802805217882906873879240914022607713870946351691046929143491841506422542038315876506588525639983398522454145866029283449
p= 19998909179272975096669389773315684909164840476930738123591959958398932097041125093572976768403454709172312115056676217567714135065584289066946488822717110035175886060013869752746528110783649242456127578482532542251448083935376109090114352728675578298146585186423055045769485483629739528100502325926126065585392531444778435555737739407677466146189470978162623830003195010534137805929579970953953819006507688647292456336763899513727791292581312482817948726557865657118159131434894505604528936556072666055920148673374873823318296419969165536109100159362271450418965389139196396590576777869148638544055146306458627451893
e=65537
c = 22644125297186385803212285721101686380290089858624593588464228942417644877688212364383835956263619653769244324906844180248816686517049952319431524113838480708352331162026595736354019259708442449783760846242702532176456117138374450898213788623580234048867117546091028843127595147910526821835855070663317466469650577618010308109119812464711010326075908158768138773973732088207030977470605554056485614676156104134673446546446752627654287202815354367643042773923258958887865030737447323798382020847653880886311162447594373201951226217556835030816588457674298560260109378271244834215832992407457137601161490484862135147963942227371690835380497920998286827898323068399708168699403459009009580152834747843780155917438758224782364193716322974594031272100820264364860227674838730962348140555980411714722361909800417953974064469599278274083750031569853934963716467881656073359393449142980936480726005445774158733389270553554093627622406166942859792490275434896108377393648278975530519769034633686070931694499857110956537102727286491854314244036392929790997824274724196292688659782806587688964714529943288954314300861531138101192901942534064757877725334672680909389193357725470116673323012331269218651347104807494994267835408427908717684178629

phi_n=p*(p-1)# 注意此处
d=libnum.invmod(e,phi_n)
m=pow(c,d,n)
print(long_to_bytes(m))
# utflag{th3_t0t13nt_funct10n_uns1mpl1f13d}

Autokey Cipher

题目给了提示是 自动密钥密码,该密码和维吉尼亚密码很相似,https://en.wikipedia.org/wiki/Autokey_cipher

【CTF】UTCTF2025 wp

写一个脚本爆破,猜测明文头是utflag

defdecrypt_autokey(ciphertext, initial_key):
    ciphertext = ciphertext.upper().replace(' ''')
    key = [ord(c.upper()) - ord('A'for c in initial_key]
    plaintext = []
    key_length = len(key)
    key_idx = 0# 跟踪密钥使用进度

for c in ciphertext:
ifnot c.isalpha():
            plaintext.append(c)
continue

if key_idx < key_length:
            k = key[key_idx]
else:
            k = ord(plaintext[key_idx - key_length]) - ord('A')

# 解密
        decrypted = (ord(c) - ord('A') - k) % 26
        plaintext.append(chr(decrypted + ord('A')))
        key_idx += 1

return''.join(plaintext)

# 已知条件
ciphertext = "lpqwma{rws_ywpqaauad_rrqfcfkq_wuey_ifwo_xlkvxawjh_pkbgrzf}"
known_plain = "UTFLAG"

# 自动提取初始密钥
initial_key = []
for i in range(len(known_plain)):
    c = ord(ciphertext[i].upper()) - ord('A')
    p = ord(known_plain[i]) - ord('A')
    initial_key.append(chr((c - p) % 26 + ord('A')))

initial_key = ''.join(initial_key)

# 解密全文
plaintext = decrypt_autokey(ciphertext, initial_key)
print(f"初始密钥: {initial_key}")
print(f"解密结果: {plaintext}")

# 验证密钥扩展机制
print("n验证过程:")
print(f"初始密钥 ({len(initial_key)}位): {initial_key}")
print("后续密钥生成:")
for i in range(len(initial_key), len(initial_key)+5):
    print(f"密钥位置 {i}{plaintext[i - len(initial_key)]}")
#utflag{keyless_autokey_cipher_with_knowns_plaintext_is_trivial}   

提交之后发现不对,把里面的英文单词分割出来,可以看到利用字符头为utflag去爆破出来的结果是不对的

【CTF】UTCTF2025 wp

看来只能利用其他的方法了,在该网站https://www.guballa.de/vigenere-solver,先爆破一下

【CTF】UTCTF2025 wp

这里爆破出一个可能的密钥

【CTF】UTCTF2025 wp

解码得到,看起来很像utflag

utileg{why_foemuency_dnelysis_than_know_eekinnind_latters} 
#转换一下
utflag{why_foemuency_dnelysis_than_know_eekinnind_latters} 
#why foemuency dnelysis than know eekinnind latters

这里的坑是需要把错误的英语单词修复

utflag{why_frequency_analysis_when_know_beginning_letters}

Forensics-取证

Streamified

下载查看是625位二进制,25*25,很像是QR码,这里有一个想法是转为ASCII字符,但是需要先转为字节,而一个字节需要8位二进制,显然不行

【CTF】UTCTF2025 wp

看题目描述有扫描字眼,可能需要转换位二维码

【CTF】UTCTF2025 wp

丢给deepseek跑一个脚本

from PIL import Image
#625位,25*25
binary_str = "1111111000011110101111111100000100110101100100000110111010110110111010111011011101010101001101011101101110101001010010101110110000010100101111010000011111111010101010101111111000000001011110100000000010111110001110110011111000111010101100000010100000100011110111100101110111100000100001010100010000011000001000000001011011111100010001010111011100011010100010101001111100110111011100001001100110000011100001100110101011111111100000000110000001000110101111111001111001101010011100000101101001010001000010111010111100011111111011011101011001110011010011101110101010011110010010110000010011011001011100011111111010101010000010111"

# 原始尺寸 25*25
qr_size = 25
# 放大倍数
scale = 10
# 边框宽度
border = 20

# 转换二进制字符串为二维矩阵
matrix = [[binary_str[y*qr_size + x] == '1'for x in range(qr_size)] for y in range(qr_size)]

# 计算新尺寸(包含边框)
new_size = qr_size * scale + border*2
img = Image.new('RGB', (new_size, new_size), 'white')  # 白色背景
pixels = img.load()

# 绘制二维码(注意坐标系)
for y in range(qr_size):
for x in range(qr_size):
        color = (000if matrix[y][x] else (255255255)  # 1为黑色,0为白色
# 放大像素
for dy in range(scale):
for dx in range(scale):
                px = x * scale + dx + border
                py = y * scale + dy + border
                pixels[px, py] = color
img.save("flag_qr.png")
#utflag{b!t_by_b!t}

拿到二维码扫描一下即可

【CTF】UTCTF2025 wp
burp插件-文件上传一把梭-Upload_Auto_Fuzz
DecryptTools-一款集成多数据库的综合加解密工具

原文始发于微信公众号(泷羽Sec-track):【CTF】UTCTF2025 wp

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年3月18日18:29:52
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【CTF】UTCTF2025 wphttps://cn-sec.com/archives/3855513.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息