【Web】入门题(二)

 

 (一)PHP代码审计

1、题目信息:

描  述: WarmUp,PHP代码审计

2、解题思路:

打开靶机链接以后,是一张图片。查看源代码:

 看到源码页面,就知道是代码审计了,按照代码逻辑解题 

 3、解题过程:

 1 <?php
 2     highlight_file(__FILE__);
 3     class emmm
 4     {
 5         public static function checkFile(&$page)
 6         {
 7             $whitelist = ["source"=>"source.php","hint"=>"hint.php"];
 8             if (! isset($page) || !is_string($page)) {
 9                 echo "you can't see it";
10                 return false;
11             }
12 
13             if (in_array($page, $whitelist)) {
14                 return true;
15             }
16 
17             $_page = mb_substr(
18                 $page,
19                 0,
20                 mb_strpos($page . '?', '?')
21             );
22             if (in_array($_page, $whitelist)) {
23                 return true;
24             }
25 
26             $_page = urldecode($page);
27             $_page = mb_substr(
28                 $_page,
29                 0,
30                 mb_strpos($_page . '?', '?')
31             );
32             if (in_array($_page, $whitelist)) {
33                 return true;
34             }
35             echo "you can't see it";
36             return false;
37         }
38     }
39 
40     if (! empty($_REQUEST['file'])
41         && is_string($_REQUEST['file'])
42         && emmm::checkFile($_REQUEST['file'])
43     ) {
44         include $_REQUEST['file'];
45         exit;
46     } else {
47         echo "<br><img src=\"https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />";
48     }  
49 ?>

查看代码,首先判断请求是否存在file字符串参数,然后将file参数放入emmm checkFile函数中进行判断。

当checkFile函数返回true后,通过include函数来加载file参数中的页面。

那么思路就比较明确了,file参数必须是在白名单内的:source或hint。那先试下hint:

 

 看来flag在ffffllllaaaagggg这个文件中。

又知道include是目录包含,那么只要绕过白名单检测并进行目录跳转就可以了:

checkFile函数$_page取file参数第一个问号之前的字段检查文件名是否在白名单内于是构造file参数为hint.php?/../../../../../ffffllllaaaagggg

hint.php?/被当作目录,之后上跳目录就好了

 4、思路总结

include可以跨目录包含文件

(二)SQL注入

题目:

SQL注入

解题:

启动靶机,是一个Web登录页面

 

简单输入单引号试下:

 

 

 

 

看报错是MariaDB直接没有做任何过滤,那么简单了,用通用的恒等式再加上mariaDB的注释符组合一下:

 

 

成功登录

 

 

 

 (三)HaveFun——代码审计

打开靶机,发现是一个动态页面:

 

看下源码:

 

 代码很简单,传入一个cat的参数,并且让值等于dog就可以了,试一下:

(四)php代码审计

题目:

ACTF 2020 新生赛 include 1

 

解题:

打开靶机,点击tips,发现跳转到新的页面,url中include存在文件包含漏洞:

 

但是只有一个flag.php,没有任何提示。

猜测可能是被注释掉了。

因为文件包含读取的是文件,而不是文件源码,内容里面是php代码的话就会执行。

尝试使用php伪协议来过滤读取,使其中的php代码失效

php://filter/read=convert.base64-encode/resource=xxx.php

得到一串base64字符串,解码得出flag:

 

(五)【强网杯 2019】随便注1

题目:

 

 

简单试了下,输入单引号出现报错,可以看出来是字符串注入,那么单引号闭合后输入恒等式:

 

 

一共三行数据,这里试了下union联合查询查其他字段,发现有waf过滤了select等关键字

 

尝试了注释、大小写等绕过均无效。

那就先尝试查一下其他内容:

查看数据库和表:

 

 

6个数据库,两张表,看下第一个表:

 

 

两个字段,其中有flag。再查了第二个表就能得出words表的data列中就是实际表单查询的用户名和id

将表1919810931114514名字改为words,flag列名字改为id,那么就能得到flag的内容了 

修改表名(将表名user改为users)
alter table user rename to users;

修改列名(将字段名username改为name)
alter table users change uesrname name varchar(30);

最终语句构造如下:

'; alter table words rename to words1;alter table `1919810931114514` rename to words;alter table words change flag id varchar(50);#

 然后使用1' or 1=1#即可查询出flag

 
posted @ 2021-12-08 11:32  XuepengZ  阅读(104)  评论(0编辑  收藏  举报