zkctf部分wp2

Web guess game

查看源代码,发现其实又是代码审计

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<!-- 
error_reporting(0);
$flag = "***********************";

$invest = $_GET['invest'];
$rand = rand(2,50);

$len = strlen(trim($_GET['invest']));

foreach ($_GET as $key => $value) {
if(!is_numeric($value)||$value == '0'){
die('no no no!');
}
}

$money = number_format($invest*$rand);


$money = intval(str_replace(',','',$money));

$guess = intval($_GET['guess']);

if ($guess == $money && strlen($money)===$len) {
echo $flag;
}else{
echo "这次的倍率是".$rand.",所以您中了".$money."元钱.";
echo "<br>但是您的预期金额是".$_GET['guess'].",没猜对,2333";
}
--

了解到rand函数作用为产生一个随机整数,在本题中产生2-50之间的随机数,要得到flag需要使guess的值等于money(即$invest*$rand)的值,并且money长度要与invest的长度相等。那我们可以直接直接bp爆破,猜一个guess,固定invest和guess的值,多次爆破,如果次数达到一定的上限一定会出现猜对倍数的情况,这样的话就会输出flag.

1
得到flag的前半段

2
同样的方法,可以得到flag的后半段


本题知识点总结:

trim — 去除字符串首尾处的空白字符(或者其他字符)

is_numeric — 检测变量是否为数字或数字字符串

number_format — 以千位分隔符方式格式化一个数字

格式:
number_format ( float $number , int $decimals = 0 , string $dec_point = “.” , string $thousands_sep = “,” )

本函数可以接受1个、2个或者4个参数(注意:不能是3个)。
number:
你要格式化的数字
decimals:
要保留的小数位数
dec_point:
指定小数点显示的字符
thousands_sep:
指定千位分隔符显示的字符


Misc easy流量分析

下载流量包用Wireshark打开,发现部分TCP流长度异常,追踪TCP流发现flag
3

Misc 马男波杰克有话说

下载得到一个名字为atool.png的图片,什么线索也没有得到,问了同学后知道这是一个atool解密,解密后得到flag。解密网址http://www.atool9.com/steganography.php
4

Misc what

用十六进制打开what发现末尾处PK,判定是rar文件,将文件头改成50 4B 03 04,再打开what压缩包,得到zyr文件,再用WinHex打开发现是PNG图片,用图片打开得到flag

Misc 模糊的图片

这个题照着网上搜到的wp做的
5
这一道lsb隐写题,用StegSolve进行分析,发现在red plane 0这里是纯黑的,
6
说明这里什么也没有,正常的图片都不会是这样子的,其它通道也都显示正常。
那我们要从其他的通道比如:blue、alpha、green中找些到信息。整张图片看起来是毫无规则的像素点,那一定想把真正的信息隐藏起来,再用一些毫无规则的像素点干扰我们。我们如果想得到其中的信息,就要去掉这些干扰点。但是到底去掉哪些呢。经过前面的步骤我们知道了信息可能隐藏在plane 0中,所以我们要先把各个通道的plane 0提取出来。Red plane 0因为是空信息,可以不用提取了。我们提取出(File->Save as)Green plane 0、Alpha plane 0、Blue plane 0,把他们各另存为一张图。然后各个图进行比对(Analyse->image Combiner),最后发现Alpha plane 0 和Green plane 0 异或运算下的图出现了flag。
7

Misc 看得到吗?

打开图片,观察到图片的宽和高差距太大,十六进制打开,修改图片的宽高
8
打开看到flag
9