natas21
本关有两个页面,一个和之前的相同,显示“You are logged in as a regular user. Login as an admin to retrieve credentials for natas22.”,另一个好像是一个修改CSS的页面,查看第一个页面的源码,会发现和前一关相似,都是需要_SESSION[“admin”]==1才可看到下一级的密码。
加上第一个页面提示,Note: this website is colocated with http://natas21-experimenter.natas.labs.overthewire.org,查看两个页面的源码,都有session_start()函数,然而这并不是突破点,联想前几关的操作,都是对PHPSESSID进行操作的,所以猜测两者的关联点在于session-id,第一关的源码要求SESSION[“admin”]==1,由此想到在第二个页面构造处admin=1.
第二个页面给的是一个css的修改:
而查看源码,它并没有对提交的参数进行审核,只是将参数加载到会话中,所以我们可以对其进行修改。
将bgcolor修改成admin,yellow修改成1.
提交用bp抓包,如此我们就构造出了admin=1的值了,将bp在实验页面修改admin=1抓包得到的PHPSESSID的值,替换到正常页面(也就是第一个页面的PHPSESSID),刷新即可得到密码。
natas22
打开页面是一个空白页面,查看源码,看起来好像是需要我们在url中添加“revelio”,然而实验了之后发现我们回到原来的页面 ,再次仔细审计源码,会看到页面开头有一个重定向,php中的header()函数客户端发送原始的 HTTP 报头,也就是header()函数返回302重定向到浏览器。
header(“Location: /”)中,header函数表示发送一个原始 Http Header到客户端,指定Location是进行重定向,/表示本地,即刷新。
由此可以得到思路,url中添加revelio满足获取密码的条件,但同时需要避免刷新,所以可以使用bp抓包,把第一次抓到的数据包丢到repeater中go一下,就能避免第二次跳转,从而获得下一关密码。