business-logic-testing
npx skills add https://github.com/ed1s0nz/cyberstrikeai --skill business-logic-testing
Agent 安装分布
Skill 文档
ä¸å¡é»è¾æ¼æ´æµè¯
æ¦è¿°
ä¸å¡é»è¾æ¼æ´æ¯åºç¨ç¨åºå¨ä¸å¡å¤çæµç¨ä¸ç设计缺é·ï¼å¯è½å¯¼è´æªæææä½ãæ°æ®ç¯¡æ¹ãèµéæå¤±çãæ¬æè½æä¾ä¸å¡é»è¾æ¼æ´çæ£æµãå©ç¨å鲿¤æ¹æ³ã
æ¼æ´ç±»å
1. 工使µç»è¿
è·³è¿éªè¯æ¥éª¤ï¼
- ç´æ¥è®¿é®æç»æ¥éª¤
- ä¿®æ¹æ¥éª¤é¡ºåº
- é夿§è¡æ¥éª¤
2. ä»·æ ¼æä½
è´æ°ä»·æ ¼ï¼
- è¾å ¥è´æ°éé¢
- 导è´è´¦æ·ä½é¢å¢å
ä»·æ ¼ç¯¡æ¹ï¼
- ä¿®æ¹åç«¯ä»·æ ¼
- ä¿®æ¹API请æ±ä¸çä»·æ ¼
3. æ°ééå¶ç»è¿
è´æ°æ°éï¼
- è¾å ¥è´æ°
- å¯è½å¯¼è´åºåå¢å
è¶ åºéå¶ï¼
- ä¿®æ¹æ°ééå¶
- æ¹éæä½ç»è¿
4. æ¶é´ç«äº
å¹¶å请æ±ï¼
- åæ¶åéå¤ä¸ªè¯·æ±
- ç»è¿å次éå¶
5. ç¶ææä½
ç¶æåéï¼
- å°å·²å®æè®¢åæ¹ä¸ºå¾ æ¯ä»
- ä¿®æ¹è®¢åç¶æ
æµè¯æ¹æ³
1. 工使µåæ
è¯å«ä¸å¡æµç¨ï¼
- æ³¨åæµç¨
- è´ä¹°æµç¨
- æç°æµç¨
- å®¡æ ¸æµç¨
æµè¯æ¥éª¤è·³è¿ï¼
æ£å¸¸æµç¨: æ¥éª¤1 â æ¥éª¤2 â æ¥éª¤3
æµè¯: ç´æ¥è®¿é®æ¥éª¤3
æµè¯: æ¥éª¤1 â æ¥éª¤3ï¼è·³è¿æ¥éª¤2ï¼
2. åæ°ç¯¡æ¹
ä¿®æ¹å ³é®åæ°ï¼
POST /api/purchase
{
"product_id": 123,
"quantity": 1,
"price": 100.00 # ä¿®æ¹ä¸º 0.01
}
è´æ°æµè¯ï¼
{
"quantity": -1,
"price": -100.00
}
3. å¹¶åæµè¯
åæ¶åé请æ±ï¼
import threading
import requests
def purchase():
requests.post('https://target.com/api/purchase',
json={'product_id': 123, 'quantity': 1})
# åæ¶åé10个请æ±
for i in range(10):
threading.Thread(target=purchase).start()
4. ç¶æä¿®æ¹
ä¿®æ¹è®¢åç¶æï¼
PATCH /api/order/123
{
"status": "completed" # ä¿®æ¹ä¸ºå·²å®æ
}
åéç¶æï¼
PATCH /api/order/123
{
"status": "pending" # ä»å·²å®æåéå°å¾
æ¯ä»
}
å©ç¨ææ¯
ä»·æ ¼æä½
è´æ°ä»·æ ¼ï¼
{
"product_id": 123,
"price": -100.00,
"quantity": 1
}
ä¿®æ¹åç«¯ä»·æ ¼ï¼
// å端代ç
const price = 100.00;
// ä¿®æ¹ä¸º
const price = 0.01;
APIä»·æ ¼ä¿®æ¹ï¼
POST /api/checkout
{
"items": [
{
"product_id": 123,
"price": 0.01, # åä»·100.00
"quantity": 1
}
]
}
æ°ééå¶ç»è¿
è´æ°æ°éï¼
{
"product_id": 123,
"quantity": -10 # å¯è½å¯¼è´åºåå¢å
}
è¶ åºéå¶ï¼
{
"product_id": 123,
"quantity": 999999 # è¶
åºå次è´ä¹°éå¶
}
伿 叿»¥ç¨
éå¤ä½¿ç¨ï¼
POST /api/checkout
{
"coupon": "DISCOUNT50",
"items": [...]
}
# éå¤ä½¿ç¨åä¸ä¼æ å¸
æªæ¿æ´»ä¼æ å¸ï¼
POST /api/checkout
{
"coupon": "EXPIRED_COUPON", # 使ç¨è¿æä¼æ å¸
"items": [...]
}
æç°æ¼æ´
è´æ°æç°ï¼
{
"amount": -1000.00 # å¯è½å¯¼è´è´¦æ·ä½é¢å¢å
}
è¶ åºä½é¢ï¼
{
"amount": 999999.00 # è¶
åºè´¦æ·ä½é¢
}
æ¶é´ç«äº
å¹¶åè´ä¹°ï¼
import threading
import requests
def buy():
requests.post('https://target.com/api/purchase',
json={'product_id': 123, 'quantity': 1})
# éæ¶æ¢è´ï¼å¹¶å请æ±
for i in range(100):
threading.Thread(target=buy).start()
ç»è¿ææ¯
å端éªè¯ç»è¿
ç´æ¥è°ç¨APIï¼
- ç»è¿å端JavaScriptéªè¯
- ç´æ¥åéAPI请æ±
ä¿®æ¹è¯·æ±ï¼
- 使ç¨Burp Suiteæ¦æª
- ä¿®æ¹åæ°ååé
ç¶æç åæ
è§å¯ååºï¼
- 200 OK – å¯è½æå
- 400 Bad Request – åæ°é误
- 403 Forbidden – æéä¸è¶³
- 500 Internal Server Error – æå¡å¨é误
é误信æ¯å©ç¨
ä»é误信æ¯è·åä¿¡æ¯ï¼
é误: "ä½é¢ä¸è¶³ï¼å½åä½é¢: 100.00"
â å¯ä»¥è·åè´¦æ·ä½é¢ä¿¡æ¯
å·¥å ·ä½¿ç¨
Burp Suite
使ç¨Repeaterï¼
- æ¦æªä¸å¡è¯·æ±
- ä¿®æ¹å ³é®åæ°
- è§å¯ååº
使ç¨Intruderï¼
- æ è®°åæ°
- 使ç¨Payloadå表
- æ¹éæµè¯
èªå®ä¹èæ¬
import requests
import json
def test_price_manipulation():
# æµè¯ä»·æ ¼ä¿®æ¹
for price in [0.01, -100, 0, 999999]:
data = {
"product_id": 123,
"price": price,
"quantity": 1
}
response = requests.post('https://target.com/api/purchase',
json=data)
print(f"Price {price}: {response.status_code}")
test_price_manipulation()
éªè¯åæ¥å
éªè¯æ¥éª¤
- 确认å¯ä»¥ç»è¿ä¸å¡é»è¾éå¶
- éªè¯å¯ä»¥æ§è¡æªæææä½
- è¯ä¼°å½±åï¼èµéæå¤±ãæ°æ®ç¯¡æ¹çï¼
- è®°å½å®æ´çPOC
æ¥åè¦ç¹
- æ¼æ´ä½ç½®åä¸å¡æµç¨
- 坿§è¡çæªæææä½
- 宿´çå©ç¨æ¥éª¤åPoC
- ä¿®å¤å»ºè®®ï¼æå¡ç«¯éªè¯ãä¸å¡è§åæ£æ¥çï¼
鲿¤æªæ½
æ¨èæ¹æ¡
-
æå¡ç«¯éªè¯
def process_purchase(product_id, quantity, price): # 仿°æ®åºè·åçå®ä»·æ ¼ real_price = db.get_product_price(product_id) # éªè¯ä»·æ ¼ if price != real_price: raise ValueError("Price mismatch") # éªè¯æ°é if quantity <= 0: raise ValueError("Invalid quantity") # å¤çè´ä¹° process_order(product_id, quantity, real_price) -
ç¶ææºéªè¯
class OrderState: PENDING = "pending" PAID = "paid" SHIPPED = "shipped" COMPLETED = "completed" TRANSITIONS = { PENDING: [PAID], PAID: [SHIPPED], SHIPPED: [COMPLETED] } def can_transition(self, from_state, to_state): return to_state in self.TRANSITIONS.get(from_state, []) -
å¹¶åæ§å¶
import threading lock = threading.Lock() def process_order(order_id): with lock: # æ£æ¥è®¢åç¶æ order = db.get_order(order_id) if order.status != 'pending': raise ValueError("Order already processed") # å¤ç订å process(order) -
ä¸å¡è§åéªè¯
def validate_business_rules(order): # éªè¯æ°ééå¶ if order.quantity > MAX_QUANTITY: raise ValueError("Quantity exceeds limit") # éªè¯ä»·æ ¼èå´ if order.price <= 0: raise ValueError("Invalid price") # éªè¯åºå if order.quantity > get_stock(order.product_id): raise ValueError("Insufficient stock") -
审计æ¥å¿
def log_business_action(user_id, action, details): log_entry = { "user_id": user_id, "action": action, "details": details, "timestamp": datetime.now() } db.log_action(log_entry)
注æäºé¡¹
- ä» å¨æææµè¯ç¯å¢ä¸è¿è¡
- é¿å 对ä¸å¡é æå®é å½±å
- 注æä¸åä¸å¡æµç¨çå·®å¼
- æµè¯æ¶æ³¨ææ°æ®ä¸è´æ§