31、appcms 这个先放放。
32、可以直接看到代码:
<?php
highlight_file('flag.php');
$_GET['id'] = urldecode($_GET['id']);
$flag = 'flag{xxxxxxxxxxxxxxxxxx}';
if (isset($_GET['uname']) and isset($_POST['passwd'])) {
if ($_GET['uname'] == $_POST['passwd'])
print 'passwd can not be uname.';
else if (sha1($_GET['uname']) === sha1($_POST['passwd'])&($_GET['id']=='margin'))
die('Flag: '.$flag);
else
print 'sorry!';
}
?>
可以看到关键是sha1()函数,查了查sha1()有一个漏洞,不能处理数组,那么就给它数组。
33、也能直接看到代码:
<?php
extract($_GET);
if (!empty($ac)){
$f = trim(file_get_contents($fn));
if ($ac === $f){
echo "<p>This is flag:" ." $flag</p>";
}else{
echo "<p>sorry!</p>";
}
}
?>
见到file_get_contents(),想到之前用过的方法,php://input:
34、还是进去能看到代码:
<?php
highlight_file('2.php');
$key='KEY{********************************}';
$IM= preg_match("/key.*key.{4,7}key:\/.\/(.*key)[a-z][[:punct:]]/i", trim($_GET["id"]), $match);
if( $IM ){
die('key is: '.$key);
}
?>
是关于正则表达式:
/表示开始,key和”;”表示要匹配key和;,”.”表示可以匹配任意字符,”*”表示可以匹配前面字符任意次,”{4,7}”表示匹配它前面字符最少4次,最多7次,”\/”第一个字符是转义符,所以这个就表示/,”[a-z]”表示a-z中任意一个字符,”[[:punct:]]”,表示一个ASCⅡ码符号,”/i”表示大小写不敏感。
因此我们需要这样格式:%表示一个任意字符,@表示一个ASCⅡ码符号,#表示一个a-z中任意一个。
key%key%%%%key:/%/%key#@
找这个格式随便来一个:
35、这个题貌似挂了。。。
36、这个也挂了。。。
37、这个看到只能上传图片,而且图片上传后可以访问,先是想到一句话木马??先用%00截断绕过上传??
但是不行,上传的文件会被改名,所以行不通,又试了试文件上传绕过(改content-type,属于服务端绕过的文件类型绕过),确实可以,但只能上传不能做什么(因为文件会被改名)。
。。。查了不少HTTP协议的东西,还是没有用,关于这道题,看到有大佬提到把Content-Type: multipart/form-data改成Content-Type: Multipart/form-data,会变成:
但是原理??找了半天也没找到,求解。。。