联合注入的 一些小心得

一、

1、首先贴一个参考博客https://blog.csdn.net/u012763794/article/details/51207833

2、关于联合注入的很多细节博客中已经提及,这里只是说一下所需要的一些步骤

注:以下实验来自bugku 中ctf中的成绩单一题

二、首先判断数据库中是字符型或者是数字型。

(1)使用单引号,双引号判断,id=1'或者id=1"

(2)数字回显比如id=1和id=2-1两者返回页面信息相比较

三、其次使用order by命令来判断使用整个数据表中的字段如:id=1' order by 4 #

(1)先说说order by 原理吧,他主要是将查询到的内容按照一定顺序排列,而我们这里的id=1’ order by 4 则就是按照第四列的顺序进行排列,那么你可以试想,当我们这个列数取得很大,超出他的列数范围的时候,那这时他返回的页面肯定是错误的,所以我们就可以不断尝试,一直到达到返回正确和错误的临界。什么意思呢?就是说order by 4 显示结果为正确,order by 5 显示结果为错误,那么试想,他的列数为多少,那肯定是4啊!!!

(1)根据上面的测试我们发现这是一个字符型的注入,当他是一个字符型的注入时候我们可以要把其中的单引号闭合,

以免在执行order by的时候受到影响,那当我们尝试闭合时候其中有两种注释后面单引号的方式,--+(两个减号代表注释,加号代表空格),或者使用#号注释,你可以两种都尝试一下,看看id=1' # id=1‘ --+两种哪个页面返回正确

(2)当我们判断出哪种注释能用的时候我们开始要去使用order by 可以先随机选一个,我一般选5 ,id=1' order by 5#,

然后看页面的返回状态,返回不正确,可以采用二分法先取3看看,然后再看返回结果,发现正确,那结果肯定在3和5之间

那我们再试试id=1’ order by 4 # 查看他返回状态,发现正确,这就是我们想要的结果,id=1‘ order by 4#

四、知道有多少字段之后开始使用union语句爆出相应的数据库名,表名,以及列名,列的数据

这是整个联合查询的核心,首先使用payload id=-1 union select 1,2,3,database()#

说明:id=-1 是因为查询的时候mysql的函数只会执行一次所以只能让id前面的参数为错,

所以可以让id=0 或者字符串之类的,这个在文章开始的博客里面有说明

select 1,2,3, 是因为我使用order by 知道它的字段数为4 后面的#用来注释

如图得到数据库名字

那么从上图我们可以看到,图中有1,2,3,还有一个函数database()的返回值,那么其实就是因为我们有四个字段,所以作为第四个字段返回显示到页面,那么同样我们可以让他在其他三个字段显示结果

(2)、得到数据库名字之后再将爆破表名使用payload:

id=-1’ union select 1,2,3,table_name from information_schema.tables where table_schema='skctf_flag' limit 0,1#

说明:information_schema在一开始的博客中又说明,可以自行查看,其中limit 0,1代表一行一行地爆表也可在博客中看到说明

(3)得到表名爆破列名 使用payload:

id=-1' union select 1,2,3,group_concat(column_name) from information_schema.columns where table_name='fl4g' limit 0,1#

说明:本次的payload使用了group_concat字符串连接函数,说明同样在开头的博客中有

(4)、得到列名,就可以去爆列的值payload:

id=-1' union select 1,2,3,concat_ws(char(32,58,32),skctf_flag) from fl4g #

如果想要将内容一次性全部加载可以使用

id=-1' union select 1,2,3,group_concat(concat_ws(char(32,58,32),skctf_flag)) from fl4g #

 

说明:concat_ws函数同样是连接字符串,concat_ws()函数用于在拼接的时候指定分隔符,payload中的char(32,58,32)就是ASCII码值,大家可以自行准备一个mysql手册,以便随时查阅相关函数的特性。

 

记一次简单的ctf题目所获心得。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值