jjnoob

bugku-web-持续更新

2019-05-15
jjnoob

飘过…..web-sec没花太多时间在上面, 一直以来也没怎么学习. 导致我现在只看了web基础, sec没怎么看…未来的时间主要还是放在这上面. 不能一直在做基础题…

一. web2

摁F12即可:

KEY{Web-2-bugKssNNikls9100}

查看源代码的方法:

参考

  • 摁 F12 (有些笔记本品牌有所谓的功能键,摁的是Fn+F12)
  • 快捷键 Ctrl+U
  • 在URL 前面加上view-source:
  • 另: 查找页面内容的快捷键为 Ctrl+F


二. 计算器

摁F12查看HTML源码, <input>标签里对输入长度有限制, 修改为”maxlength=3” 即可.

flag{CTF-bugku-0032}


三. web基础$_GET

  • POST 传值的时候 会加密传值信息 不让别人看见
  • GET传值的时候 是不会加密的,在URL中就会体现出来

看PHP代码, 如果what=flag, 则打印flag. 所以将flag复制给what. 在URL后面添加?what=flag

flag{bugku_get_su8kej2en}


四. web基础$_POST

参考

火狐插件hackbar

安装, 摁F12就可以看到 hackbar

Load URL -> Post data -> 输入what=flag

flag{bugku_get_ssseint67se}


五. 矛盾

is_numeric遇到%00截断

在URL后添加?num=1%00

flag{bugku-789-ps-ssdf}

00截断上传原理

参考知乎专栏

  • 截断的核心,就是chr(0)这个字符
  • 这个字符不为空(Null),也不是空字符(“”),更不是空格
  • 当程序在输出含有chr(0)变量时,chr(0)后面的数据会被停止,换句话说,就是误把它当成结束符,后面的数据直接忽略,这就导致漏洞产生


六. web3

查看源代码, 有Unicode编码, 在线转码

KEY{J2sa42ahJK-HS11III}

注意观察一下Unicode编码的特征, &#**;&#**


七. 域名解析

vim /etc/hosts
# 添加:
123.206.87.240 flag.baidu.com

访问 flag.baidu.com

KEY{DSAHDSJ82HDS2211}


八. 你必须让他停下

chrome禁用 js 脚本, 然后再不停的刷新就能得到 flag.

flag{dummy_game_1s_s0_popular}


九. 本地包含

说是有源码中有PHP代码, 没找到..


十. 变量1

flag{92853051ab894a64f7865cf3c2128b34}

我还是先去看PHP吧, PHP代码都看的不怎么懂.

php 代码审计

(1) PHP eval()函数

eval() 函数把字符串按照 PHP 代码来计算。

(2) PHP var_dump() 函数

var_dump() 函数用于输出变量的相关信息。

(3) 可变变量

$$a 表示将 变量$a 再作为一个变量

(4) PHP isset() 函数

isset() 函数用于检测变量是否已设置并且非 NULL。

(5) PHP highlight_file() 函数

highlight_file() 函数对文件进行语法高亮显示。

(6) __file__变量

当前脚本运行的路径


十一. Web5

jsfuck, 查看源码, 将看起来乱丢丢的东西扔进控制台, 即可.

CTF{WHATFK}

(1) jsfuck

JSFuck可以将JavaScript代码进行转换,转换后的代码只使用6个字符([,],(,),!,+),实现的功能和转换前代码是一样的。


十二. 头等舱

说是要用burp suite抓包, Debian装破解版很头疼, 所以用win10弄的. 正要从浏览器里复制消息, 就从header里面看到了flag….? headers -> response header -> view source

flag{Bugku_k8_23s_istra}


十三. 网站被黑

御剑后台扫描工具 -> burp suite 密码爆破

都快跑了快一个小时, 这么慢. 先睡觉, 先睡觉, 头发要紧, 都一点了

Windows10工具好多啊……如果能在Linux上安装就好了….

flag{hack_bug_ku035}


十四. 管理员系统

  1. submit. 在源码中发现: <!-- dGVzdDEyMw== -->
  2. base64解码, 得到: test123, 猜测是密码.
  3. 根据提示:”IP禁止访问,请联系本地管理员登陆,IP已被记录”, 得到思路: 伪装成本地访问.
  4. 输入admintest123, 抓包. repeater, 改包, Headers中增添一对键值对: X-Forwarded-For : 127.0.0.1
  5. 访问得到flag.


十五. web4

查看源码, 发现script代码很乱. 进行unescape解密(在线解密), 得到:

<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>

输入: p1 + 54aa2 + p2: 67d709b2b54aa2aa648cf6e87a7114f1, 即可得到flag.

escape()函数主要作用就是对字符串进行编码,以便它们能在所有计算机上可读。


十六. flag在index里面

一开始的url为: http://123.206.87.240:8005/post/

点击后变为: http://123.206.87.240:8005/post/index.php?file=show.php

file关键字想到: php://filter.

访问: http://123.206.87.240:8005/post/index.php?file=php://filter/read=convert.base64-encode/resource=index.php

得到一串字符串, base64解码, 得到flag.

php://filter

php://filter是PHP语言中特有的协议流,作用是作为一个“中间流”来处理其他流。比如,我们可以用如下一行代码将POST内容转换成base64编码并输出:

readfile("php://filter/read=convert.base64-encode/resource=php://input");

更多的php://filter


十七. 输入密码查看flag

五位数密码, burp爆破即可.


十八. 点击一百万次

查看源码发现:

if(clicks >= 1000000){
    var form = $('<form action="" method="post">' +
			'<input type="text" name="clicks" value="' + clicks + '" hidden/>' +
			'</form>');
			$('body').append(form);
			form.submit();
          }

当点击次数达到后, 向当前url以post方法发送clicks的次数.

用hackbar以post方法发送clicks=10000000:

url: http://123.206.87.240:9001/test/

post data: clicks=10000000


十九. 备份是个好习惯

参考

按照题目的意思是备份代码泄露, 网上说御剑可以, 跑了一下没有得出结果. 最后采用一航的源码泄露工具, 工具地址

执行:

$ python SourceLeakHackerForLinux.py http://123.206.87.240:8002/web16/

返回:

 [ 200 ]  Checking : http://123.206.87.240:8002/web16/index.php
HTTPConnectionPool(host='123.206.87.240', port=8002): Max retries exceeded with url: /web16/www.zip~1~ (Caused by ConnectTimeoutError(<urllib3.connection.HTTPConnection object at 0x7f8fb14c08d0>, 'Connection to 123.206.87.240 timed out. (connect timeout=5)'))
 [ 200 ]  Checking : http://123.206.87.240:8002/web16/index.php.bak

访问: http://123.206.87.240:8002/web16/index.php.bak

打开该代码文件:

<?php
/**
 * Created by PhpStorm.
 * User: Norse
 * Date: 2017/8/6
 * Time: 20:22
*/

include_once "flag.php";  //引入flag.php文件代码
ini_set("display_errors", 0);  //关闭php错误提示
$str = strstr($_SERVER['REQUEST_URI'], '?');  //strstr获得URL从'?'往后(包括'?')的字符串
$str = substr($str,1); //去掉'?'
$str = str_replace('key','',$str);  //把字符串中的'key'替换为空, 可以使用kkeyey绕过
parse_str($str);  //parse_str把字符串解析到变量中, 例如parse_str('key1=a&key2=b');与$a=a;$b=b;的效果是一样的
echo md5($key1);

echo md5($key2);
if(md5($key1) == md5($key2) && $key1 !== $key2){  //需要得到key1,key2不相等而二者md5相等, 可以采用php弱类型比较弱过
    echo $flag."取得flag";
}
?>

两种方法绕过

方法1

md5()函数无法处理数组, 如果传入的为数组, 会返回NULL, 所以两个数组经过加密后得到的都是NULL, 也就是相等的.

payload: ?kkeyey1[]=1&kkeyey2[]=2

方法2

利用==比较漏洞

如果两个字符经MD5加密后的值为0exxxxx形式, 就会被认为是科学计数法, 且表示的是0*10的xxxx次方, 还是零, 都是相等的.

下列的字符串的MD5值都是0e开头的:

QNKCDZO

240610708

s878926199a

s155964671a

s214587387a

s214587387a
payload:  ?kkeyey1=QNKCDZO&kkeyey2=s878926199a


二十. 成绩单

SQLi, 之前写过wp了. 翻以前的博客.


二十一. 秋名山老司机

都说跑脚本就行, 为啥我跑不出来, 为了进度, 跳过.


二十二. 速度要快

没跑出来…跳, 为了进度.


二十三. cookies欺骗

不知道为啥一连三题脚本都跑不出来, 一开始以为是python requets出错, 但是试了爬百度的页面, 却没有报错. emmm, 可能是我Python学得不够好吧.


二十四. never give up

查看源码, 发现1p.html, 访问1p.htm, 页面跳转到http://www.bugku.com/

推测有window.location.href之类的重定向.

直接看1p.html的源码: view-source:http://120.24.86.145:8006/test/1p.html

发现为url编码, 解码. 注释部分为base64编码, 解码后为url编码. 再解码. 得到php代码, 主要代码都注释掉了, 其中有require("f4l2a3g.txt");, 访问: f4l2a3g.txt得到flag.

二十五. welcome to bugkuctf


上一篇 关系范式

下一篇 sqli-studying1

Content