Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
owaspkyushulocalchaptermeeting7th
Search
nwiizo
July 28, 2016
73
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
owaspkyushulocalchaptermeeting7th
nwiizo
July 28, 2016
More Decks by nwiizo
See All by nwiizo
35分でわかるEffective Platform Engineering
nwiizo
5
510
20分でわかるセキュアAPI
nwiizo
2
310
型は壁、Rustでもバグを直すな、表現できなくせよ
nwiizo
14
2.5k
システムは「動く」だけでは足りない 実装編 - 非機能要件・分散システム・トレードオフをコードで見る
nwiizo
4
710
システムは「動く」だけでは 足りない - 非機能要件・分散システム・トレードオフの基礎
nwiizo
32
12k
アーキテクチャモダナイゼーションとは何か
nwiizo
18
7.8k
【社内勉強会】新年度からコーディングエージェントを使いこなす - 構造と制約で引き出すClaude Codeの実践知
nwiizo
41
24k
技術的負債の泥沼から組織を救う3つの転換点
nwiizo
9
7.9k
30分でわかるアーキテクチャモダナイゼーション
nwiizo
13
9.5k
Featured
See All Featured
Odyssey Design
rkendrick25
PRO
2
770
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
3k
First, design no harm
axbom
PRO
2
1.3k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.9k
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
280
Ethics towards AI in product and experience design
skipperchong
2
350
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2k
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
550
Abbi's Birthday
coloredviolet
3
9.4k
Between Models and Reality
mayunak
4
400
Optimizing for Happiness
mojombo
378
71k
The Limits of Empathy - UXLibs8
cassininazir
1
610
Transcript
OWASP Kyushu Local Chapter Meeting 7th Depressed One Step Web
scraping 2016年12月14日 @nwiizo
アジェンダ • はじめに • OWASP BWAとは • 情報を取得してみよう • 自動ログインしてみよう
• ログイン後ページでの情報を取得してみよう • レスポンスヘッダーのチェック • まとめ
はじめに • Python3を使ってハンズオン 自動ログインツールの生成 簡易診断ツールの作成 • くれぐれも自分の管理下以外のサーバには 行わないように • 猛者が暇しない為の問題も用意しています
OWASP BWAとは • OWASP Broken Web Applocations Project • 意図して脆弱なアプリケーションを集めた仮
想マシンを提供しているプロジェクト • 今回は、ここにあるWebアプリを対象に使う
実行環境(Python3) • 2020年に公式のPython2の開発/保守が終了 します。 Python3 でやるより2の方が幸せ になれることが多いけどな!!
Python3に対する勘違い • モジュールが対応していない。 • 文字や数字の振る舞いが違いすぎない?? • そもそもいろんな挙動が違いすぎる。 Python3でも相当するモジュールは存在する場合が多い 申し訳ありません。 ごめんなさい
OWASP BWAの起動 • ダウンロードしたovaをVirtualboxで起動 • 仮想ネットワークの設定でネットワークを「ホ ストオンリーアダプター」に変更しておく(外部 に公開ぜず設定自分だけ見れるという)
ブラウザでアクセス • http://[イメージのIPアドレス]/WackoPickoにア クセス • WackoPicko 脆弱性のあるWebサイト 画像の共有 画像の売買 etc
タイトルの取得 • 任意のWebページのタイトルを取得するプロ グラムの作成 • WackoPickoのタイトルを取得して標準出力に 出力してください
使用するライブラリ • HTMLの取得のために urllibを使用する。 • HTMLを解析するために BeautifulSoupを使用する。
get_header.py import urllib from bs4 import BeautifulSoup url = "http://192.168.16.128/WackoPicko/"
page = urllib.request.urlopen(url).read() page_title = BeautifulSoup(page,"html.parser") print(**********.title.string)
任意の情報の取得 • Titleの情報をとってくるスクリプトを書きました。 • 今回は、そのページにあるリンクを集めるス クリプトを作ってみましょう !!
get_href.py url = "http://192.168.16.128/WackoPicko/" page = urllib.request.urlopen(url) s_p = page.read()
s = BeautifulSoup(s_p,"html.parser") a_list = s.findAll(“*") for a in a_list: print (a.get(“****"))
[追加]入力フォームの探索 • Titleもaタグの情報も集めることができました。 • 次にログインフォームの入力にどのようなも のがあるのか探索してみましょう
[追加]get_input.py url = "http://192.168.16.128/WackoPicko/users/login.php" page = urllib.request.urlopen(url) s_p = page.read()
s = BeautifulSoup(s_p,"html.parser") for form in s.findAll(“*****"): print(form.get(“****"))
自動ログインの実装 • 入力すべき値はすべてわかっている前提で の自動ログインを行う HTMLを解析し て必要な情報 を取得 取得したデータ を元にログイン ページにログイ
ン情報を送信 ログイン成功
IDとパスワード • 最初のページ http://[IP_address]/ の WackoPickoのブックマークをクリック • ログイン情報などが記載されています。 はい、便利
HTMLの解析(手動) http://[ip_address]/WackoPicko/users/login.php <h2>Login</h2> <table style="width:320px" cellspacing="0"> <form action="/WackoPicko/users/login.php" method="POST"> <tr><td>Username
:</td><td> <input type="text" name="username" /></td></tr> <tr><td>Password :</td><td> <input type="password" name="password" /></td></tr> <tr><td><input type="submit" value="login" /></td><td> <a href="/WackoPicko/users/register.php">Register</a></td></tr> 送信先 ユーザー名 パスワード
使用するライブラリ • POSTリクエストを送信するためにrequestsを 使う • pip3 install requests
Auto_login.py import requests payload = {"username":"scanner1","password":"scanner1"} r = requests.post("http://192.168.16.128/WackoPicko/users/login.php") print(r.text)
課題1 • BeautifulSoupなどを使ってログインできたか を確認しましょう
課題2 • ユーザを変えるたびにソースコードの変更を 行うのは手間 • 実行時のコマンドライン引数にログイン情報 を入力できるようにしましょう
まとめ • Python3を使って特定の情報の取得、ログイ ンの自動化などWebスクレイピングの入門を 行いました。 • 各種モジュールにはもっと便利な機能があり 自分でカスタマイズしていきましょう。 • くれぐれも管理していないWebサイトに行わな
い事。
謝辞 • 発表の機会を下さった。OWASP Kyushu Chapter Leader 服部さんには深く感謝申し上げたいと思 います。 • 無粋な学生に快く会場を貸してくださった
BETASOFT 竹田様。会場の設定が何度も間違っ ていてすみません。心より御礼申し上げます。 • このスライドの多くは実習の時間を使って作成し ました。共同実習者の水田くんには大変、迷惑 をかけました。