[关闭]
@1kbfree 2018-07-10T02:36:44.000000Z 字数 1799 阅读 1215

PHP原生程序之博客分析

PHP


介绍

这是一个GITHUB上找到的一个使用原生PHP代码写的一个博客,地址是:https://github.com/qinshuang1998/Tiger-Blog,但是这里有很多功能没有实现(这个作者是不是比我还懒,,,哈哈哈),然后我分析的话只是想让大家明白一下这些功能是如何实现的,还有如果有漏洞的话我也会写出来(因为我是边读边写,然后自己分析一下,但是因为我水平也不是很厉害,所以有很多漏洞也没看出来还请大佬们多多指教),对我们的代码审计有很大的帮助,不多说啦,

源代码讲解

First、

这里说明一下,我分析的时候,只会写注释,或者截屏然后在旁边标注一下,因为我觉得这样会比较高效一点,所以你们可以下载这个源代码,然后按照我分析的然后再自己看一下,大概也就能明白功能实现原理了,祝你学习愉快。

index.php

这个是首页文件( 废话,我也知道 )~

image_1chv32k2d1s6c1dp44h57298is9.png-125.8kB

首先看第三行和第四行:
  1. require('./inc/conn.php'); // 连接数据库
  2. require('./inc/func.php'); // 引入函数文件(一般都是封装了常用的函数,方便调用)

这个不必多说。

接着到了第七行:
  1. $url = $_SERVER['REQUEST_URI']; //这个功能我也不知道是干嘛的,我们来输出一下。
  2. var_dump( $url );die; //输出一下$url,并且不然他执行下面的代码

image_1chv3750l31210tlns91rc7mlom.png-54.1kB
image_1chv37qd4bluakblkmh17k8213.png-57.7kB

这个是用于输出除了域名外的路径。

第8行:
  1. $url = parse_url($url); // parse_url将路径放在了数组的path,将?后面的参数放在了数组的query
  2. var_dump( $url );die; // 如果上面字体描述的不懂我们再来打印一下。

image_1chv3h8iu1alr1u7b1b3015dq19u61g.png-29.6kB

php.png-146.3kB

打印$num:
  1. var_dump( $num );die;

image_1chv3taag1o2119grhdq1vsuos0l.png-25.3kB

这里为什么是5呢?我也好奇,然后我来到数据库看了一下。

image_1chv421os1d9e1eaequa1fu61rp83f.png-85kB

这个5就是article表的数量

16-23行
  1. if(@$_GET['page']){
  2. // 把个个参数都打印一下。
  3. $pageval=$_GET['page'];
  4. echo( '$pageval -> '.$pageval ."<br />");
  5. $page=($pageval-1)*$pagesize;
  6. echo( '$page -> '.$page ."<br />");
  7. $page.=',';
  8. echo( '$page -> '.$page ."<br />");die;
  9. }

image_1chv4b03q5ps106732kps68no4s.png-49.1kB

看不明白看下去先

image_1chv4djq76svshi2s31otkm7g59.png-134.4kB

然后下面的就基本上是简单的SQL语句了,不讲解了,开始另一个文件

admin功能

先讲解后台功能的实现。

登陆功能

php.png-86.7kB

xxx/admin/login.php

login.php

打开后发现只有一句代码:

  1. <?php
  2. require('./page/login.html'); // 包含当前的page文件夹里的login.html文件
login.html

打开后就是一些前端登陆的表单以及一些样式,然后他是将登陆的数据提交到confirm.php文件,如图:

image_1chv4qovjliodscff9nr61smr82.png-149.6kB

表单之类的html代码不多讲,这里来分析一下js代码(这里有一个问授权访问漏洞,可以不输入密码直接登陆):

image_1chv5gf6v1fst1gv71kj61i161p538v.png-172.4kB

然后我们来尝试登陆一下,查看result都会返回什么~

image_1chv5i6ucjs1vni1vonsji1pcn9c.png-109.6kB

表示登陆成功

image_1chv5innl6vj1lo54241k2v1jdo9p.png-110kB

表示登陆失败

我们身为白帽子,就是用来打破这些规矩的,输入错误密码的时候我们来抓包获取返回结果并且将result修改为success~

php.png-185.1kB

image_1chv5pvt5r761cm817v410slt023l.png-95.7kB

image_1chv5r0er6g8qe01tt81fdkhf842.png-90.1kB
成功绕过

image_1chv5rc1g1a5t15ef9qu1hsqcbe4f.png-92.7kB

接下来讲解一下confirm.php文件是如何接受数据的。

confirm.php

image_1chv6gl8n15dpns31br5p11ttf5c.png-178.3kB

image_1chv6jdc0lak1c5h1bvl1if21es37p.png-88.8kB

上面的$result使用了GetALL函数,我们来看一下他的代码。

  1. function GetAll($query) {
  2. while($tmp = mysql_fetch_array($query)){
  3. $result[] = $tmp;
  4. }
  5. return @$result;
  6. }

查询$query这个sql语句执行后的数据然后循环赋值到$result数组里。

image_1ci0vr2aq1udv1t4pun115fp1a6bp.png-169.1kB

这里的不多将了,具体有注释了,下面没注释的就是一些登陆操作的(我也看不懂)

index.php

登陆页面分析完了,来分析一下首页页面。

image_1ci100s7mi9g14vbasa16ft1aot26.png-115.3kB

page文件夹里面的都是html文件,也就是展示页面效果的,就不多讲解了。

upload.php

这个文件是后台发布文章的

image_1ci105k2r71l1k2d1na5sb11g7s2j.png-81.4kB

image_1ci10doif73q1vun1l5fq9a9i70.png-180.8kB

这里是存在Csrf漏洞的,而且也没有过滤Xss漏洞,所以是存在Xsrf的,但是因为这里他完成了插入功能,但是没有完成展示插入的数据的功能,所以没办法继续讲解了,等作者把功能实现了我再来具体分析。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注