程序逻辑问题

emmmmm,打了国赛,打了南理工校赛,都自闭了,反序列化用指针引用的,后期弄懂了,再放笔记,南理工校赛有些题目有点脑洞,web不是纯ctf题目,结合了CVE漏洞来作为考点,没有hint估计只能做出一道题,还一个PHPLFI+tomact任意文件上传漏洞就是做不出来。还是回归正常的学习,并且这几天陆续会出DDCTF,国赛,南理工校赛的WEB笔记.

进入题目链接:

源码如下:

<html>
<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>

然后最重要的在于

select pw from php where user='$user'和if (($row[pw]) && (!strcasecmp($pass, $row[pw])))
明显是存在sql注入漏洞的,但是是分开判断的。
具体的就是传入两个参数,先查询php表中pw字段where user='xxxx'然后返回的一行数据中的pw字段的数据要与传入的md5加密的pass参数值一样,才能get flag。
呢么如果我们让查询的语句,利用联合查询语句,直接返回值,呢么row[pw]就是我们传入的值。那么来试一下。
自己手动来试试看:




payload=user=-1' union select md5(1)#&pass=1 成功返回flag



posted @ 2019-04-22 22:23  yunying  阅读(292)  评论(0编辑  收藏  举报