能力值:
( LV2,RANK:10 )
|
-
-
2 楼
# 文件泄露
扫目录得到一个index.index.php.bak <?php
require("conf/config.php");
if (isset($_REQUEST['id'])) {
$id = $_REQUEST['id'];
if (preg_match("/\d.+?\D.+/is",$id)){
die("Attack detected");
}
$query = "SELECT text from UserInfo WHERE id = " . $id. ";";
$results = $conn->query($query);
echo "学号:" . $id . ",成绩为: ".$results->fetch_assoc()['text'];
}
?> 解题关键点在于绕正则,preg_match("/\d.+?\D.+/is",$id) 这个正则表达式 `/\d.+?\D.+/is` 是一个用于匹配字符串的模式,具体解释如下:
1. `/`: 正则表达式的起始标志,表示模式的开始。
2. `\d`: 匹配任意一个数字字符。
3. `.+?`: 匹配任意数量的字符(包括 0 个),`+` 表示匹配前面的字符 1 次或多次,`.` 表示匹配任意字符,`?` 表示进行非贪婪匹配,即尽可能少地匹配字符。
4. `\D`: 匹配任意一个非数字字符。
5. `.+`: 同样匹配任意数量的字符,不过这里没有非贪婪匹配的标志。
6. `/`: 正则表达式的结束标志,表示模式的结束。
7. `is`: 修饰符,其中 `i` 表示忽略大小写,`s` 表示让 `.` 匹配包括换行符在内的所有字符。
因此,这个正则表达式的作用是匹配包含数字字符的字符串,并且在数字字符后至少包含一个非数字字符。例如,它可以匹配像 `/123abc/` 这样的字符串。
值得注意的是,正则表达式的含义可能因不同的上下文而有所不同,具体匹配的结果还要看实际的字符串内容。 以上引用GPT,简而言之也就是数字后面不能跟其他字符,所以绕过payload如下
ord() 解题,接下来就是正常的查询库、表、列、数据了
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
请问一下这个目录如何扫描的,为何我这边没有泄露代码php
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
reiji
请问一下这个目录如何扫描的,为何我这边没有泄露代码php[em_46]
泄露的文件名是:/index.php.bak
|
|
|