- 一. web2
- 二. 计算器
- 三. web基础$_GET
- 四. web基础$_POST
- 五. 矛盾
- 六. web3
- 七. 域名解析
- 八. 你必须让他停下
- 九. 本地包含
- 十. 变量1
- 十一. Web5
- 十二. 头等舱
- 十三. 网站被黑
- 十四. 管理员系统
- 十五. web4
- 十六. flag在index里面
- 十七. 输入密码查看flag
- 十八. 点击一百万次
- 十九. 备份是个好习惯
- 二十. 成绩单
- 二十一. 秋名山老司机
- 二十二. 速度要快
- 二十三. cookies欺骗
- 二十四. never give up
- 二十五. welcome to bugkuctf
飘过…..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}
十四. 管理员系统
- submit. 在源码中发现:
<!-- dGVzdDEyMw== --> - base64解码, 得到:
test123, 猜测是密码. - 根据提示:”IP禁止访问,请联系本地管理员登陆,IP已被记录”, 得到思路: 伪装成本地访问.
- 输入
admin和test123, 抓包. repeater, 改包, Headers中增添一对键值对:X-Forwarded-For : 127.0.0.1 - 访问得到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");
十七. 输入密码查看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.