做下之前没做完的些。
1.bug ku 管理员系统。
打开题目,发现为提交窗口,随便输个,
碰到这个就想到伪造IP头,记得以前做过这么一道题,那道题用的是,x-client-ip: 127.0.0.1,就去记录了几个伪造ip头的方法。
x-forwarded-for: 127.0.0.1
x-remote-IP: 127.0.0.1
x-remote-ip: 127.0.0.1
x-client-ip: 127.0.0.1
x-client-IP: 127.0.0.1
X-Real-IP: 127.0.0.1
这里同样伪装成本地IP,
但这里还需要管理员和管理员密码,看源码发现底部有一段base64密文,
解码看看,
用admin,test123 登陆试试(抓包改ip头),
点击 GO 得到flag
2.bugku 网站被黑
打开题目发现是个黑页,
什么都看不了,加几个php页面看看,
尝试了index.php, flag.php,webshell.php,shell.php,
发现shell.php中有
尝试了一些常见密码无果后,用burp爆破,
发现密码,输入即得
3.bugku web5
打开题目发现为jsfuck,之前也做了几道类似的,大概就是要观察符号的前后对应,
查看源码发现jsfuck代码,去控制台跑,发现报错
观察了下有一个小括号没有对应,加上后弹出
输入后但他....
想了半天看到题目格式要大写...
改成大写对了就
4.bugku 本地包含。
打开题目
读一下发现有eval(),这个函数可用来做命令执行漏洞,
这里根据"var_durp($a)",构造payload
?hello=1);show_source(%27flag.php%27);var_dump(3
闭合()以及“”,
拿到flag
5.bug ku 变量1
代码审计。
读完发现var_dump()中有两个$$,查了一下
这里可以理解为$($args)
构造payload :?args=GLOBALS ---用全局数组来定义他,
在eval中便会将$GLOBALS数组中存放的所有变量以数组的方式输出 得到flag,
6.bugku flag在index中
这个确实没什么头绪,看了wp才理解了。
打开题目一路往下点,
url中看到了?file提示文件包含漏洞,
直接构造payload:?file=php://filter/read=convert.base64-encode/resource=index.php
base64解码得到源码
解释一下内容,
php://是一种协议名称,php://filter/是一种访问本地文件的协议,/read=convert.base64-encode/表示读取的方式是base64编码后,resource=index.php表示目标文件为index.php。
这里是执行不成功才会返回源码,这里base64编码是必须要的。
7.bugku备份。
打开题目发现是一段字符串,推测MD5加密,
解一下
为两个null。
这里不知道怎么下手了,根据题目提示查了一下备份文件,一般为.bak文件,在后面加一个.bak
发现竟然提示下载了,下载打开看看,
<?php
/**
* Created by PhpStorm.
* User: Norse
* Date: 2017/8/6
* Time: 20:22
*/
include_once "flag.php";
ini_set("display_errors", 0);
$str = strstr($_SERVER['REQUEST_URI'], '?');
$str = substr($str,1);
$str = str_replace('key','',$str);
parse_str($str);
echo md5($key1);
echo md5($key2);
if(md5($key1) == md5($key2) && $key1 !== $key2){
echo $flag."取得flag";
}
?>
代码审计,功能为把两个参数中的key替换为空(这里可以用kekeyy绕过),然后对key1,key2的值进行md5加密,并进行比较,
因为MD5不能处理数组,这里可以利用它来构造payload: ?kekeyy1[]=b&kekey2[]=a
8.cookies欺骗
打开题目发现是一串字符,源码也没有什么,
发现url中有a2V5cy50eHQ=一串,解码出来为keys.txt,
这应该就要用base编码后再访问,这里尝试访问index.php,编码后传入
给line赋值,发现应该是源码,这里寻了一份脚本
import requests
a=30
for i in range(a):
url="http://120.24.86.145:8002/web11/index.php?line="+str(i)+"&filename=aW5kZXgucGhw"
s=requests.get(url)
print s.text
输出源码,
if(isset($_COOKIE['margin']) && $_COOKIE['margin']=='margin'){
$file_list[2]='keys.php';}//关键部分
这里表示传参后cookie必须满足margin=margin,keys.php要编码
抓包,在cookie中写入margin=margin,
得到flag。
9.bugku 前女友
打开题目,查看源代码,发现一个txt文件
前面说了,MD5()是不能操作数组的,会返回null。
题目表示v1!=v2且md5(v1)=md5(v2),正好满足,
这里把两个数组传上去
payload:?v1[]=a&v2[]=b&v3[]=c ,得到flag
10.bugku 字符正则
正则是之前看了挺久的,但看了这个题....确实差的还有些多。
主要规则:
1.表达式直接写出来的字符串直接利用,如key
2.“.”代表任意字符
3.“*”代表一个或一序列字符重复出现的次数,即前一个字符重复任意次
4.“\/”代表“/”
5.[a-z]代表a-z中的任意一个字符
6.[[:punct:]]代表任意一个字符,包括各种符号
7./i代表大小写不敏感
8.{4-7}代表[0-9]中数字连续出现的次数是4-7次
(参考原文:https://blog.csdn.net/qq_30464257/article/details/81160656 )
分析一下preg_match中的内容,
一位一位往出来读(对着盯了半天...)
构造?id=keyxxkeyxxxxkey:/x/xkeyx!