PHP代码审计入门之路

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']);

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏aCloudDeveloper

Linux探秘之I/O效率

一、文章来由   最近看了《UNIX环境高级编程》,对以前比较模糊的一些知识结构又做了进一步的加强,特别是前两章讲到不带缓冲的文件I/O和带缓冲的标准I/O,对...

2257
来自专栏码农阿宇

海量数据即时查询引擎ElasticSearch入门 附.Net Core例子

Elasticsearch是基于Lucene的搜索引擎。它提供了一个分布式,支持多租户的全文搜索引擎,它具有HTTP Web界面和无模式JSON文档。 Elas...

1982
来自专栏JackieZheng

Nodejs学习笔记(四)——支持Mongodb

前言:回顾前面零零碎碎写的三篇挂着Nodejs学习笔记的文章,着实有点名不副实,当然,这篇可能还是要继续走着离主线越走越远的路子,从简短的介绍什么是Nodejs...

2145
来自专栏大史住在大前端

一统江湖的大前端(4)shell.js——穿上马甲我照样认识你

码农界存在着无数条鄙视链,linux使用者对windows的鄙视便是其中之一,cli使用者对GUI用户的嘲讽也是如此,在这样一个讲究逼格的时代,如果你的桌面上没...

1895
来自专栏码农阿宇

ElasticSearch入门 附.Net Core例子

Elasticsearch是基于Lucene的搜索引擎。它提供了一个分布式,支持多租户的全文搜索引擎,它具有HTTP Web界面和无模式JSON文档。 Elas...

2911
来自专栏Linyb极客之路

Redis开发常用规范

虽然Redis支持持久化,但是Redis的数据存储全部都是在内存中的,成本昂贵。建议根据业务只将高频热数据存储到Redis中【QPS大于5000】,对于低频冷数...

1342
来自专栏大内老A

[WCF-Discovery]让服务自动发送上/下线通知[原理篇]

到目前为止,我们所介绍的都是基于客户端驱动的服务发现模式,也就是说客户端主动发出请求以探测和解析可用的目标服务。在介绍WS-Discovery的时候,我们还谈到...

2166
来自专栏杨建荣的学习笔记

MySQL频繁停库的问题分析(r12笔记第33天)

最近也抽空帮一些网友解决一些问题,有些是Oracle,有些是MySQL,有时候虽然忙忙乎乎,但是解决问题之后还是很有成就感的。 今天来说一个蛮有意思的问...

46910
来自专栏芋道源码1024

从客户端的角度设计后端的接口

2.请求Path,http://www.online.com/api/ [path]

1483
来自专栏阮一峰的网络日志

处理Apache日志的Bash脚本

去年一年,我写了将近100篇网络日志。 现在这一年结束了,我要统计"访问量排名",看看哪些文章最受欢迎。(隆重预告:本文结尾处将揭晓前5名。) ? 以往,我用的...

3605

扫码关注云+社区