前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PHP代码审计入门之路

PHP代码审计入门之路

作者头像
C4rpeDime
发布2018-08-29 10:57:21
6440
发布2018-08-29 10:57:21
举报
文章被收录于专栏:黑白安全黑白安全

0x01 前言

虽然市面上的代码审计的文章已经一大把了,但是还是决定重复造轮子,打算作为一个系列来写的,近年越来越多的安全研究人员投入到php应用的漏洞挖掘,相对应的代码安全问题也被大量的暴露出来,身处这个时代,我很高兴身边的白帽子前辈不断寻求突破并丰富和完善了代码审计这个概念,学到今日,笔者也想总结自己的一套审计的经验只谈,希望可以帮助新人更加友好的入门这个领域。

0x02 准备 技术准备:PHP基础,MySql 使用工具:Visual Studio 服务器环境:xampp 推荐使用:phpStudy

0x03 脑图

PHP代码审计入门之路 代码审计 第1张
PHP代码审计入门之路 代码审计 第1张

脑图主要总结了sql注入、xss跨站脚本攻击、csrf、xsrf、文件操作相关得漏洞、代码&&命令执行、设计缺陷以及SSRF七种常见漏洞,每种漏洞都有很多种的情况与案例,后面的文章会陆续把这些做成案例分享给大家。这篇首先介绍一下SQL注入漏洞,csrf与xsrf我分为了一种。

0x04 SQL注入入门 注入的主要原因是程序员在写sql语句的时候没有根据使用的场景进行过滤导致的外部可以任意操作执行的sql,另外SQL语句有Select、Insert、Update和Delete四种类型,注入也是对这四种基本操作的拼接产生的。接下来笔者将以Select为例引导新手初步了解SQL注入。Select是数据库的查询操作,所以常常出现在一个网站的查看列表,详情,搜索这些地方,缺陷代码如下

PHP代码审计入门之路 代码审计 第2张
PHP代码审计入门之路 代码审计 第2张

浏览器输入:http://127.0.0.1/test/test.php?id=1

PHP代码审计入门之路 代码审计 第3张
PHP代码审计入门之路 代码审计 第3张

然后在浏览器输入:http://127.0.0.1/test/test.php?id=1'

PHP代码审计入门之路 代码审计 第4张
PHP代码审计入门之路 代码审计 第4张

在次在浏览器输入:http://127.0.0.1/test/test.php?id=1' and '1'='2

PHP代码审计入门之路 代码审计 第5张
PHP代码审计入门之路 代码审计 第5张

这次可以发现没有数据输出了 因为我们执行的语句中  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;

获取表字段数:

PHP代码审计入门之路 代码审计 第6张
PHP代码审计入门之路 代码审计 第6张

可以看到页面现在返回的是 正常的说明这表列数大于1,自己加大直到爆错

PHP代码审计入门之路 代码审计 第7张
PHP代码审计入门之路 代码审计 第7张

一直输到8页面爆错了,说明我们这个表的字段数小于8,那么就是说此表的字段为7

PHP代码审计入门之路 代码审计 第8张
PHP代码审计入门之路 代码审计 第8张

页面输出了1,2,3,4,5,6,7 这些都是输出点

PHP代码审计入门之路 代码审计 第9张
PHP代码审计入门之路 代码审计 第9张

分别输出了当前连接的用户,数据, 服务器版本

PHP代码审计入门之路 代码审计 第10张
PHP代码审计入门之路 代码审计 第10张

获取全部的库

PHP代码审计入门之路 代码审计 第11张
PHP代码审计入门之路 代码审计 第11张

获取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进制编码

PHP代码审计入门之路 代码审计 第12张
PHP代码审计入门之路 代码审计 第12张

获取 tdb_admin 表的所有字段

PHP代码审计入门之路 代码审计 第13张
PHP代码审计入门之路 代码审计 第13张

获取 tdb_admin 表数据

0x05 修复方法

$id=@intval($_GET['id']);

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-04-113,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
代码审计
代码审计(Code Audit,CA)提供通过自动化分析工具和人工审查的组合审计方式,对程序源代码逐条进行检查、分析,发现其中的错误信息、安全隐患和规范性缺陷问题,以及由这些问题引发的安全漏洞,提供代码修订措施和建议。支持脚本类语言源码以及有内存控制类源码。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档