0x01 前言
虽然市面上的代码审计的文案已然一许多了,然则还是决定重复造轮子,打算做为一个系列来写的,近年越来越多的安全科研人员投入到php应用的漏洞挖掘,相对应的代码安全问题亦被海量的暴露出来,身处这个时代,我很高兴身边的白帽子先辈持续寻求突破并丰富和完善了代码审计这个概念,学到今日,笔者亦想总结自己的一套审计的经验只谈,期盼能够帮忙新人更加友好的入门这个行业。
0x02 准备
技术准备:PHP基本,MySql
运用工具:Visual Studio
服务器环境:xampp
举荐运用:phpStudy
0x03 脑图
脑图重点总结了sql注入、xss跨站脚本攻击、csrf、xsrf、文件操作关联得漏洞、代码&&命令执行、设计缺陷以及SSRF七种平常漏洞,每种漏洞都有非常多种的状况与案例,后面的文案会持续把这些做成案例分享给大众。这篇首要介绍一下SQL注入漏洞,csrf与xsrf我分为了一种。
0x04 SQL注入入门
注入的重点原由是程序员在写sql语句的时候无按照运用的场景进行过滤引起的外边能够任意操作执行的sql,另一SQL语句有Select、Insert、Update和Delete四种类型,注入亦是对这四种基本操作的拼接产生的。接下来笔者将以Select为例引导新手初步认识SQL注入。Select是数据库的查找操作,因此常常出此刻一个网站的查看列表,详情,搜索这些地区,缺陷代码如下
浏览器输入:
http://127.0.0.1/test/test.php?id=1
而后在浏览器输入:
http://127.0.0.1/test/test.php?id=1
在次在浏览器输入:
http://127.0.0.1/test/test.php?id=1 and 1=2
这次能够发掘无数据输出了 由于咱们执行的语句中 goods_id 不止需要 等于1 并且还需要 string(1) = string(2) 才返回真 然则 string(1)永远不可能等于string(2) 因此要求不满足不返回数据, 从这儿咱们能够晓得,咱们外边带入的语句被成功的带入数据库并且查找了,因此能够判断有sql注入。
Mysql注释:
从‘-- ’序列到行尾。请重视‘--’的后面有个空格,注释风格需求第2个破折号后面最少跟一个字符(例如空格、tab、换行符、字符串等等)。
从‘#’字符从行尾。
从/*序列到后面的*/序列。结束序列不必定在同一行中,因此呢该语法准许注释跨越多行。
下面的例子表示了3种风格的注释:
mysql>SELECT 1+1; #
mysql>SELECT 1+1; --
mysql>SELECT 1 /* xxxxxx */ + 1;
获取表字段数:
能够看到页面此刻返回的是 正常的说明这表列数大于1,自己加大直到爆错
始终输到8页面爆错了,说明咱们这个表的字段数少于8,那样便是说此表的字段为7
页面输出了1,2,3,4,5,6,7 这些都是输出点
分别输出了当前连接的用户,数据, 服务器版本
获取所有的库
获取test库的所有表
获取16进制:
SELECT hex(test);
结果74657374
加上0x+74657374
16进制:0x74657374
http://127.0.0.1/test/test.php?id=-1 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=0x74657374
table_schema === 库名16进制编码
table_name === 表名16进制编码
获取 tdb_admin 表的所有字段
获取 tdb_admin 表数据
0x05 修复办法
$id=@intval($_GET[id]);