[wirteup] unctf-web-can_you_hacked_me

 

看到网页界面很容易想到MySQL注入,所以尝试一下常规的注入方法:

username= a' pr 1=1#     、pass随意 

发现这个题目远不止这么简单,正则表达式过滤了我浅薄知识范畴里可以想到的所有注入姿势。

后来又百度了很多注入方法,一一尝试都不成功。

无奈之下只能用dirsearch尝试搜索后门:

 

 

结果发现了一个www目录(可能是网站根目录?)的zip包 

发现里面有一个index.php文件和一个sql文件

<html>

<head>
    <meta charset="UTF-8">
    <title>Can You Hacked me?</title>
</head>

<body>
<h1>Can You Hacked me?</h1>
<form method="get">
    Username: <input type="text" name="username"> <br>
    Password: <input type="text" name="password"> <br>
    <input type="submit">
</form>

<pre>
<?php
include "flag.php";
error_reporting(0);

function waf1($inject) {
    preg_match("/'|union|select|&|\||and|or|\(|,/i",$inject) && die('return preg_match("/\'|union|select|&|\\||and|or|(|,/i",$inject);');
}

if(isset($_GET['username']) && isset($_GET['password'])) {
    $username = $_GET['username'];
    $password = $_GET['password'];
    
    waf1($username) || waf1($password);
    
    if (strtolower($_GET['username']) == 'admin' && $_SERVER["REMOTE_ADDR"] != '127.0.0.1') {
        die('Admin only allow to login at localhost');
    }
    
    $conn = new mysqli("127.0.0.1","root","root","supersqli");
    
    $sql = "select * from `users` where username = '$username' and password = '$password';";

    $result = $conn->query($sql);
    
    echo $sql . '<br>';
    
    if ($result->num_rows > 0) {
        // 输出数据
        while($row = $result->fetch_assoc()) {
            if($row["username"] === 'admin') {
                echo 'Welcome Admin, here is your flag: ' . $flag;
            } else {
                die("You are not Admin.");
            }
        }
    } else {
        echo "Result Not Found!";
    }
    $conn->close();
}


?>
</pre>

</body>

</html>
CREATE DATABASE IF NOT EXISTS supersqli;

USE supersqli;

CREATE TABLE IF NOT EXISTS `users` (
  `id` int(10) NOT NULL,
  `username` varchar(20) NOT NULL,
  `password` varchar(20) NOT NULL
) ENGINE=MyISAM  DEFAULT CHARSET=utf8;


INSERT INTO `users` values(1,'test', 'test'),(2,'admin','AdminSecret');

发现居然存储了admin的密码,赶快去网站登陆admin,得到提示:

Admin only allow to login at localhost

 并不能登陆admin,而登陆test账号是无法得到flag的。

但是可以尝试上一篇博客(189条消息) MySQL约束攻击的原理和复现_bouIevard的博客-CSDN博客

中所说的MySQL约束攻击的原理,我们直接输入admin不能够登陆,但是可以输入一个超长字符串‘admin                               ’来实现登陆,然后拿到flag。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值