代码审计1
在开始练习之前,我们以Less-1为例对php代码进行审计。这样,在后续关卡,我们大多数时间只需要关注其与Less-1不相同的地方即可。
sqli-lab-PHP7-master的程序均采用面向过程的书写方式编写,对有C基础的人来说较易上手。
index.php:
第一行是一个使用相对路径的文件包含,相当于直接把改文件写在这句代码的位置。
sqli-connect.php
在sqli-connect中,
$con1使用我们之前设置的参数,建立了一个到mysql的连接;
@mysqli_select_db将我们之前设置的数据库设为默认数据库,即正常情况下,查询只能在该数据库中进行。
回到index,
isset() 函数用于检测变量是否已设置并且非 NULL。$_GET[]存储通过GET方法从网页获得的数据。
$fp那几句是耳熟能详的文件写入操作,负责记录我们输入的每次命令。
$sql存储了查询的语句;‘$id’将刚才的输入直接拼接进去。
php对单引号包裹的字符完全原样输出,对双引号包裹的字符先尝试转义后再输出。然而,在$sql中,单引号被双引号包裹,无法起到前述作用,是被输出的部分。
mysqli_query()执行了一次查询。对于此处的select语句,它的返回值是一个mysqli_result类对象。
(mysqli_result类中的成员属性
$current_field:获取当前结果中指向的字段偏移位置,是一个整数。
$field_count:从查询结果中获取列的个数。
$lengths:返回一个数组,保存在结果集中获取当前行的每一个列的长度。
$num_rows:返回结果集中包含记录的行数。)
mysqli_fetch_array函数从$result中取得关联数组。
若$row中有内容,则输出查询结果,否则报错。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?