Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
owaspkyushulocalchaptermeeting7th
Search
nwiizo
July 28, 2016
75
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
おい、エージェントを使って終わらせろ
nwiizo
3
1.1k
AI時代の「技術的負債」の変質ー概念の終焉と再解釈、エージェントと共に向かう先
nwiizo
2
4.1k
AIで実装は速くなった。なのにプロダクトは速くならない。職能の壁を越えて価値のフローを設計する
nwiizo
10
9.1k
35分でわかるEffective Platform Engineering
nwiizo
6
1.2k
20分でわかるセキュアAPI
nwiizo
3
490
型は壁、Rustでもバグを直すな、表現できなくせよ
nwiizo
16
2.7k
システムは「動く」だけでは足りない 実装編 - 非機能要件・分散システム・トレードオフをコードで見る
nwiizo
5
790
システムは「動く」だけでは 足りない - 非機能要件・分散システム・トレードオフの基礎
nwiizo
34
12k
アーキテクチャモダナイゼーションとは何か
nwiizo
18
8.7k
Featured
See All Featured
Embracing the Ebb and Flow
colly
88
5.2k
How GitHub (no longer) Works
holman
316
150k
Prompt Engineering for Job Search
mfonobong
0
520
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
570
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.4k
The Limits of Empathy - UXLibs8
cassininazir
2
720
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
320
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
990
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
380
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
6
1.2k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
630
Paper Plane (Part 1)
katiecoart
PRO
2
12k
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 竹田様。会場の設定が何度も間違っ ていてすみません。心より御礼申し上げます。 • このスライドの多くは実習の時間を使って作成し ました。共同実習者の水田くんには大変、迷惑 をかけました。